我是新手,正在使用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 的信息,似乎不太可能将两个表(一个用于节点,一个用于边)加载到同一图形中,我不确定什么是最好的方法:1. 我应该只使用来自 DataFrame 的节点信息创建一个图形,然后从另一个 DataFrame 添加(附加)边缘吗?如果是这样,并且因为 nx.from_pandas_dataframe() 需要有关边缘的信息,我想我不应该使用它来创建节点... 我应该只传递信息作为列表吗?
2. 我应该仅使用来自 DataFrame 的边缘信息创建图形,然后将另一个 DataFrame 中的每个节点信息添加为属性吗?是否有比迭代 DataFrame 和节点更好的方法?
entities_edges = sorted(list(set(edges["Target"].tolist()+edges["Source"].tolist()))); nodes = pd.read_csv(input_folder+file_nodes, encoding="utf-8", sep="\t"); nodes = nodes[nodes['id'].isin(entities_edges)];
然后我遵循了你的建议。你觉得怎么样?非常感谢你的回答! - Joséset_node_attributes
的字典方法,您就不需要担心不包含在entities_edges
中的节点。未连接的节点可以随后使用G.remove_nodes_from(nx.isolates(G))
从图中删除。 - harryscholesnx.set_node_attributes
方法,或者我只能使用for循环吗? - LancelotHolmesfrom_pandas_dataframe
。 - user7851115- Wey Gu