如何基于用户组关联关系用Python绘制用户关联图
Python实现用户组关联图绘制
实现思路
- 读取CSV数据,解析每个用户所属的分组
- 对每个分组,生成组内用户的两两关联边(自动避免重复边)
- 使用
networkx构建图结构,matplotlib完成可视化绘制
所需依赖
先安装必要的库:
pip install pandas networkx matplotlib
完整代码
import pandas as pd import networkx as nx import matplotlib.pyplot as plt from itertools import combinations # 读取CSV数据(如果是本地文件,替换为pd.read_csv('你的文件路径.csv')) data = pd.DataFrame({ 'User': ['First', 'Second', 'Third'], 'Group': ['A,B,C', 'B', 'C,D'] }) # 初始化无向图 G = nx.Graph() # 添加所有用户作为节点 G.add_nodes_from(data['User']) # 遍历每个分组,生成用户间的关联边 for groups in data['Group']: # 拆分当前用户的多个分组 for group in groups.split(','): # 找出当前分组下的所有用户 group_members = data[data['Group'].str.contains(group)]['User'].tolist() # 生成组内用户的两两配对,添加边(无向图自动去重) for pair in combinations(set(group_members), 2): G.add_edge(*pair) # 绘制图形 plt.figure(figsize=(8, 6)) # 用弹簧布局让节点分布更合理,seed固定布局方便复现 pos = nx.spring_layout(G, seed=42) # 绘制节点、边和标签 nx.draw_networkx_nodes(G, pos, node_size=2000, node_color='lightblue') nx.draw_networkx_edges(G, pos, width=2, edge_color='gray') nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold') # 隐藏坐标轴 plt.axis('off') plt.title('User Group Association Graph') plt.show()
代码说明
- 用
pandas处理CSV数据,示例中直接用DataFrame模拟了你的表格内容,实际使用时替换为读取本地文件即可 itertools.combinations负责生成组内用户的两两配对,set()避免同一用户重复出现在组合里networkx.Graph是无向图结构,会自动忽略重复添加的边,无需手动去重- 弹簧布局(
spring_layout)让节点间的距离更符合视觉逻辑,设置seed可以固定每次绘图的布局样式
运行代码后,就能得到以用户为节点、同组用户间有边连接的可视化图,和你预期的效果一致。
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

