【发布时间】:2016-10-28 05:41:01
【问题描述】:
我正在尝试使用 networkx 库在 Python 中实现图论概念的第一步。
所以我上传了 xlsx 文件,其中包含 pandas 数据框中的两列。有相互喜欢的用户(例如,在某些社交网络中)。
然后,创建了图形结构,计算了主要度量(度、页面排名、介数)并绘制了图。
这是交易:
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
users=pd.read_excel('users.xlsx')
users.head()
user1 user2
Bob Adam
Adam John
John Bob
g=nx.Graph()
a=g.add_edges_from(zip(users.user1,users.user2))
cc=sorted(nx.connected_components(g),key=len, reverse=True)
G = g.subgraph(cc[0])
centrality = pd.DataFrame({'user':G.nodes()})
centrality['degree'] = centrality.user.map(nx.degree(G))
centrality['pagerank'] = centrality.user.map(nx.pagerank(G))
centrality['betweenness'] = centrality.user.map(nx.betweenness_centrality(G))
nx.draw(G)
plt.show()
plt.savefig("path.png")
所以,到目前为止一切都很好。但我的目标是创建更复杂的结构。例如,我的想法是在linkedin中做一些类似的事情,例如因为相同的工作地点,user1连接到user2。
换句话说,我认为我应该以某种方式将第三列添加到数据框并将其附加到图表中。但是当尝试这样做并使用 zip 函数(如两列)时,方法 add_edges_from 给我一个错误,并说它只能处理两个参数。
您能帮我理解如何将图表应用到这样的结构:
User1 User2 Company
Bob Adam Vilco
Adam John Darrel
John Bob Vilco
【问题讨论】:
-
请给我们重现您的错误所需的代码
-
g=nx.Graph() a=g.add_edges_from(zip(users.user1,users.user2, users.user3))。当我在用户数据框和 zip 函数中添加第三列时,错误就开始了