如何在Networkx中将节点和边添加到网络分析图中?

2024-09-27 07:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习网络分析,所以我用希拉里·克林顿的电子邮件在线查看谁给谁发了邮件。在

我的数据在一个叫做hrc_dict的字典中,我有一个发送者和接收者的元组,然后是电子邮件的频率。这是字典的一部分:

{('Hillary Clinton', 'Cheryl Mills'): 354, ('Hillary Clinton', 'l'): 1, ('Linda Dewan', 'Hillary Clinton'): 1, ('Hillary Clinton', 'Capricia Marshall'): 9, ('Phillip Crowley', 'Hillary Clinton'): 2, ('Cheryl Mills', 'Anne-Marie Slaughter'): 1}

我在Jupyter中使用Networkx来创建一个图形。我的代码如下:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()

G.add_nodes_from(hrc_dict)

for s, r in hrc_dict:
    G.add_edge((s,r), hrc_dict[(s,r)])

G.add_edge((s,r), hrc_dict[(s,r)])

我打电话的时候nx.图形(),没有输出任何内容,当我调用G.nodes()时,并不是所有的节点都显示出来。我在这里粘贴了一些输出:

[1, 2, 3, 4, 5, 6, 7, 8, 'Mark Penn', 10, ('Todd Stern', 'Hillary Clinton'), 12,]

当我调用G.edges()时,会得到下面的结果,这似乎是对的

[(1, ('Hillary Clinton', 'l')), (1, ('Linda Dewan', 'Hillary Clinton')), (1, ('Hillary Clinton', 'Thomas Shannon')), (1, ('Cheryl Mills', 'Anne-Marie Slaughter')), (1, ('Christopher Butzgy', 'Hillary Clinton’))]

有人知道如何正确地将节点添加到我的图中吗。我假设每个人都需要是一个节点,那么如何分解元组并分别添加名称?边缘显示正确还是需要以不同的方式输入?在


Tags: add字典节点电子邮件dict元组nxlinda
2条回答

要将每个人添加为一个节点,还需要更改add_nodes_from的用法。在

像这样:

srcs, dests = zip(* [(fr, to) for (fr, to) in hrc_dict.keys()])
G.add_nodes_from(srcs+dests)

现在意味着来自G.nodes()的节点列表将是:

^{pr2}$

(您不会得到任何重复项,因为networkx将图形存储为字典)。在

注意:如果您使用下面的方法来添加边,则不需要首先添加节点,但如果有某些原因导致节点没有邻居(或者只有节点很重要的另一个原因),此代码将执行此操作。在

然后基本上按照Joel的答案添加边;但也要注意属性“weight”的使用,这样布局可以直接利用信息。在

^{3}$

我们可能会看到:

Example output - note that because the HC/A-MS edge is so strong it is very short

你的问题基本上就在这一点上:

G.add_edge((s,r), hrc_dict[(s,r)])

networkx将其解释为“在第一个参数(s,r)和第二个参数hrc_dict[(s,r)]之间添加一条边。”因此,例如,('Hillary Clinton', 'Cheryl Mills'): 354将成为节点{}和节点{}之间的一条边。不如试试看

^{pr2}$

相关问题 更多 >

    热门问题