我是使用 Python 处理图形的新手:NetworkX。到目前为止,我一直在使用 Gephi。那里的标准步骤(但不是唯一可能的)是:
- 从表格/电子表格加载节点信息;其中一列应该是 ID,其余列是关于节点的元数据(节点是人,所以性别,组……通常用于着色)。喜欢:
id;NormalizedName;Gender
per1;Jesús;male
per2;Abraham;male
per3;Isaac;male
per4;Jacob;male
per5;Judá;male
per6;Tamar;female
...
- 然后也从表/电子表格加载边,使用与节点电子表格的列 ID 中相同的节点名称,通常有四列(目标、源、权重和类型):
Target;Source;Weight;Type
per1;per2;3;Undirected
per3;per4;2;Undirected
...
这是我拥有的两个数据框,我想在 Python 中加载它们。阅读有关 NetworkX 的文章,似乎不太可能将两个表(一个用于节点,一个用于边)加载到同一个图中,我不确定什么是最好的方法:
我是否应该仅使用来自 DataFrame 的节点信息创建一个图形,然后添加(追加)来自其他 DataFrame 的边?如果是这样,并且由于 nx.from_pandas_dataframe() 需要有关边缘的信息,我想我不应该使用它来创建节点……我应该只将信息作为列表传递吗?
我是否应该仅使用来自 DataFrame 的边信息创建一个图形,然后将来自其他 DataFrame 的信息作为属性添加到每个节点?有没有比遍历 DataFrame 和节点更好的方法呢?
原文由 José 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
nx.from_pandas_dataframe
从边缘表创建加权图:然后使用
set_node_attributes
添加字典中的节点属性:或者遍历图形以添加节点属性:
更新:
自
nx 2.0
nx.set_node_attributes
参数顺序已 更改:(G, values, name=None)
使用上面的示例:
从
nx 2.4
,G.node[]
被替换为G.nodes[]
。