从数据框生成网络图

Generate Network plot from dataframe

假设我有这个数据框,其中列 a-number 表示具有指向 b-number 中节点的边的节点:

    a_number    b_number
0   343              991
1   991              633
2   343              633
3   633              628
4   343              633
5   628              916
6   697              886
7   916              572
8   697              884
9   886              125

如何生成此图的图像表示,如下所示:

您还可以使用 graphviz 库:

from graphviz import Digraph
dot = Digraph()

for i, (a, b) in df.iterrows():
    dot.edge(str(a), str(b))
    
dot.render('graph.gv', view=True)

Networkx 是 python 中图的 go-to 库: https://networkx.org/documentation/stable/index.html

首先进行导入:

import networkx as nx

要启动这样的图,请声明一个初始化有向图(有向图):

G = nx.DiGraph()

然后添加一些节点:

G.add_node(343)
G.add_node(991)
G.add_node(633)

然后是一些边:

G.add_edge(343,991)
G.add_edge(991,633)
G.add_edge(343,633)

最后画出图G:

nx.draw(G, with_labels = True, font_size=14 , node_size=2000)

使用 with_labels = True 这样你就可以获得节点号,node_size=2000 使节点更大,font_size=14 使字体也更大

这是代码的输出:

现在要从数据框中读取数据,只需执行如下循环:

for  i, (x, y) in df.iterrows():
    G.add_node(x)
    G.add_node(y)
    G.add_edge(x,y)

如果节点或边已经存在,它不会添加新的,因此您无需担心