python - 基于另一列连接节点列
问题描述
我需要建立一个节点是网站的网络,并且应该根据分配的分数进行分组。如果网站是新网站,则标签为 1,否则为 0。
数据示例:
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)
我希望你能给我一些建议。
解决方案
score
如果您也想将 包含为节点,则分区图可能是一个好主意。您可以像以前一样创建图表nx.from_pandas_edgelist
,然后将节点属性更新为:
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)
推荐阅读
- html - 怎么改变身高
- crash - 使用画外音时崩溃
- amazon-web-services - 亚马逊 lex 响应中的反序列化错误
- excel - 根据单元格中的值将一系列单元格移动到另一个工作表
- ios - 如何在 iOS 13 上获取给定网络接口的当前网络信息
- javascript - 根据层次结构中元素的存在向祖先元素添加类
- python - Casefold() 不适用于 python 3.7.0 mac AttributeError: 'str' object has no attribute 'casefold'
- python - 解析制表符分隔的字符串会导致在未引用字段中看到换行符
- c# - 如何解决错误 CS1003:语法错误,'(' 预期和错误 CS1031:预期类型?
- python - 如何删除数字(字符串)之间的框模式?