Python 基于另一列连接节点列
我需要建立一个网络,其中节点是网站,应该根据分配的分数进行分组。如果该网站是新的,则其标签为1,否则为0 数据示例:Python 基于另一列连接节点列,python,pandas,networkx,Python,Pandas,Networkx,我需要建立一个网络,其中节点是网站,应该根据分配的分数进行分组。如果该网站是新的,则其标签为1,否则为0 数据示例: url score label web1 5 1 web2 10 1 web3 5 0 web4 2 0 ... 我尝试使用netw
url score label
web1 5 1
web2 10 1
web3 5 0
web4 2 0
...
我尝试使用networkx来构建网络。为了根据网站的分数将其分组,我只使用了分数作为公共节点(但可能有更好的方法来表示它)。
我想根据标签栏给网站上色,但我不知道怎么做。
我的代码是:
import networkx as nx
G = nx.from_pandas_edgelist(df, 'url', 'score')
nodes = G.nodes()
plt.figure(figsize=(40,50))
pos = nx.draw(G, with_labels=True,
nodelist=nodes,
node_size=1000)
我希望你能给我一些提示。如果你想把
分数也作为一个节点,分区图可能是个好主意。您可以像以前一样,从\u pandas\u edgelist
创建带有nx.的图形,并将节点属性更新为:
B = nx.from_pandas_edgelist(df, source='url', target='score')
node_view = B.nodes(data=True)
for partition_nodes, partition in zip((df.url, df.score), (0,1)):
for node in partition_nodes.to_numpy():
node_view[node]['bipartite'] = partition
现在我们有了每个节点的分区属性:
B.nodes(data=True)
NodeDataView({'web1': {'bipartite': 0}, 5: {'bipartite': 1}, 'web2':
{'bipartite': 0}, 10: {'bipartite': 1}, 'web3': {'bipartite': 0},
'web4': {'bipartite': 0}, 2: {'bipartite': 1}})
该图可用分区布局表示:
part1_nodes = [node for node, attr in B.nodes(data=True) if attr['bipartite']==0]
fig = plt.figure(figsize=(12,8))
plt.box(False)
nx.draw_networkx(
B,
pos = nx.drawing.layout.bipartite_layout(B, part1_nodes),
node_color=[]
node_size=800)
答案有用吗?别忘了你可以投票并接受答案。看,谢谢!抱歉延迟接受和投票!