在 Python 中将边导入 networkx 库

Importing edges to networkx library in Python

我正在处理社交网络分析问题,其中我有一个有向图。当我将边导入我的图形文件时出现问题,由于某种原因,这使得它无向,从而无法测量中心性,例如 in/out 度等

正在导入边和节点 pandas 数据帧

edges = pd.read_csv("./edges.csv", sep = ";")
nodes = pd.read_csv("./nodes_coordinates.csv", sep = ";")

设置有向图

G = nx.DiGraph()
nx.is_directed(G)

输出:真

G = nx.from_pandas_edgelist(edges, "from", "to")
nx.is_directed(G)

输出:假

如果这很重要,这也是我绘制节点的方式,但它起作用了,如果我只做了这一部分,它仍然是定向的:

data = nodes.set_index("node").to_dict("index").items()
G.add_nodes_from(data)
nx.is_directed(G)

输出:真

一切都完美地绘制图表等,但它不再是定向的,我不知道为什么。感谢您的帮助!

edge csv file

node file

您需要在 from_pandas_edgelist 中指定 create_using 参数。所以替换

G = nx.from_pandas_edgelist(edges, "from", "to")

G = nx.from_pandas_edgelist(edges, "from", "to", create_using=nx.DiGraph)

这为您提供了一个新的 DiGraph 实例,这意味着您不需要以下几行

G = nx.DiGraph()
nx.is_directed(G)

查看docs,可以添加一个create_using关键字:

create_using (NetworkX graph constructor, optional (default=nx.Graph)) – Graph type to create. If graph instance, then cleared before populated.

默认情况下确实使用无向nx.Graph

您的解决方案是:

G = nx.from_pandas_edgelist(edges, "from", "to", create_using=nx.DiGraph)