【发布时间】:2021-06-25 10:38:07
【问题描述】:
我是 python 新手,正在尝试从类似于以下的数据创建二分网络:
| User | Text |
| -------- | ------------------- |
| user1 |[ 'abc','xyz','def' ]|
| user2 |[ 'lmo','gf' ] |
| user3 |[ 'lmn','gf' ] |
| user4 |['abc','xyz','def' ] |
当我创建一个网络时,代表文本列的节点将有一个列表作为节点的值,如下所示:
我想为 abc、xyz 等创建单独的节点,然后将这些节点与其各自的用户连接起来,而不是在节点上创建列表。例如 user1 将分别在 abc、xyz 和 def 之间有一条边。我怎样才能打破列表,使列表中的每个值都可以作为一个单独的节点。我被困在这里。提前感谢您的帮助。到目前为止,我的代码如下:
sub_data = pd.read_csv('E:\\users.csv')
edges = [tuple(x) for x in sub_data[['user','text']].values.tolist()]
B = nx.Graph()
B.add_nodes_from(sub_data['user'].unique(), bipartite=0, label='user')
B.add_nodes_from(sub_data['text'].unique(), bipartite=1, label='hashtag')
B.add_edges_from(edges, label='rating')
left_or_top = sub_data['user'].unique()
pos = nx.bipartite_layout(B, left_or_top)
nx.draw(B,pos,node_color='#A0CBE2',edge_color='#00bb5e',width=1,
edge_cmap=plt.cm.Blues,with_labels=True)
【问题讨论】:
-
这个问题:Pandas expand rows from list data available in column 和
from_pandas_edgelist应该可以解决您的问题。 -
我会尽量说得更具体一些。我认为基于@Sparky05 的链接
sub_data = sub_data.explode('text1').reset_index(drop=True),对你有用。 -
我已经尝试过该链接,但不幸的是它不起作用。它没有破坏列表,而是按原样显示数据。我不明白为什么它无法分离数据。:(
标签: python-3.x networkx