networkx:从关系列表中添加边

时间:2018-01-11 09:24:11

标签: python pandas networkx

我有一个由"用户"组成的数据集(pandas frame)。和"用户之间的互动",如:

user, interactions
1, 2 7 9 4
2, 7 1 5 7 8 3
4, 9 5 3

每个数字对应于用户的ID。每个用户可以有N个交互,其中N> = 0。

逗号后面的值是用户的邻居。

如何以执行方式从这些数据创建networkx图?

我在分割字符串后尝试了一些循环,但性能非常差。

谢谢!

1 个答案:

答案 0 :(得分:1)

Networkx具有从边缘列表(.add_edges_from())添加边缘的功能。

import networkx as nx
import matplotlib.pyplot as plt

user = [1,2,4]
interactions = [
 [2, 7, 9, 4],
 [7, 1, 5, 7, 8, 3],
 [9, 5, 3]
]

# create the edge list
elist = []
for v1,v2 in zip(user,interactions):
    elist.extend([(v1,v) for v in v2])

# create graph from edge list
G = nx.Graph()
G.add_edges_from(elist)

# plot graph
nx.draw(G, with_labels=True)
plt.show()

enter image description here