我正在努力学习网络分析,所以我用希拉里·克林顿的电子邮件在线查看谁给谁发了邮件。在
我的数据在一个叫做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’))]
有人知道如何正确地将节点添加到我的图中吗。我假设每个人都需要是一个节点,那么如何分解元组并分别添加名称?边缘显示正确还是需要以不同的方式输入?在
要将每个人添加为一个节点,还需要更改
add_nodes_from
的用法。在像这样:
现在意味着来自
^{pr2}$G.nodes()
的节点列表将是:(您不会得到任何重复项,因为networkx将图形存储为字典)。在
注意:如果您使用下面的方法来添加边,则不需要首先添加节点,但如果有某些原因导致节点没有邻居(或者只有节点很重要的另一个原因),此代码将执行此操作。在
然后基本上按照Joel的答案添加边;但也要注意属性“weight”的使用,这样布局可以直接利用信息。在
^{3}$我们可能会看到:
你的问题基本上就在这一点上:
networkx将其解释为“在第一个参数}和节点{}之间的一条边。不如试试看
^{pr2}$(s,r)
和第二个参数hrc_dict[(s,r)]
之间添加一条边。”因此,例如,('Hillary Clinton', 'Cheryl Mills'): 354
将成为节点{相关问题 更多 >
编程相关推荐