在 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)
我正在处理社交网络分析问题,其中我有一个有向图。当我将边导入我的图形文件时出现问题,由于某种原因,这使得它无向,从而无法测量中心性,例如 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)