![](/img/trans.png)
[英]Python CSV Reader - Compare Each Row with Each Other Row Within One Column
[英]csv to networkx: each row as one node, each column as edge
我想从存储在 CSV 文件中的数据中可视化 a.network with.networkx 和 matplotlib。 CSV 文件中的数据由 15 列和大约 150 行组成。 csv 文件中的数据类似于下面的玩具示例。 索引列由名称列表组成。 每个名称都应该是一个节点。 每个列名代表一个组织。 “x”表示此人是该组织的成员。 目标是将两个人之间的所有直接关系显示为边缘 - 关系越多,视觉中的节点就越大。 感谢帮助!
作为文本:
(a)
Name Org A Org B Org C Org D Org F ...
Person 1 x x x x
Person 2 x x
Person 3 x
Person 4 x
Person 5 x x
Person 6
Person 7 x x x
Person 8 x x
Person 9 x
Person 10 x x x
...
IIUC,你想要这样的东西:
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.DataFrame({'Name':[f'person {f}' for f in range(1,11)],
'Org A':['x']+[np.nan]*7+['x']+[np.nan],
'Org B':['x']+[np.nan]*3+['x']+[np.nan]+['x']*2+[np.nan]*2,
'Org C':['x',np.nan,'x']+[np.nan]*3+['x']+[np.nan]*2+['x'],
'Org D':['x', 'x', np.nan, 'x']+[np.nan]*2+['x']+[np.nan]*2+['x'],
'Org F':[np.nan]+['x']+[np.nan]*2+['x']+[np.nan]*2+['x']+[np.nan, 'x']})
dfm = df.melt('Name').dropna()
df_net= dfm.merge(dfm, on = 'variable').query('Name_x != Name_y')
G = nx.from_pandas_edgelist(df_net, 'Name_x', 'Name_y')
fig, ax = plt.subplots(figsize=(10,8))
nx.draw_networkx(G, ax=ax)
Output:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.