You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python创建以用户为节点、共享人员度数为边的NetworkX网络图

解决NetworkX创建用户共享人员网络图的问题

1. 读取并整理CSV数据

先通过pandas读取CSV,把每个用户对应的关联人员整理成集合,方便后续计算交集:

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
from itertools import combinations

# 替换为你的CSV文件路径,假设列名为User(用户)和Person(关联人员)
df = pd.read_csv('your_data.csv')
# 按用户分组,将每个用户对应的关联人员转为集合
user_related_persons = df.groupby('User')['Person'].apply(set).to_dict()

2. 创建图并添加节点

直接把所有用户作为节点加入图中:

G = nx.Graph()
# 添加所有用户节点
G.add_nodes_from(user_related_persons.keys())

3. 计算共享人员数并添加边

遍历所有用户对,计算他们关联人员集合的交集大小(即共享人员数),大于0时添加边,边的权重设为共享人数:

# 用combinations生成所有不重复的用户对
for user1, user2 in combinations(user_related_persons.keys(), 2):
    shared_count = len(user_related_persons[user1] & user_related_persons[user2])
    if shared_count > 0:
        G.add_edge(user1, user2, weight=shared_count)

4. 绘制带权重的网络图

可以根据边的权重设置边的粗细,节点大小用度数(或加权度数)区分:

# 获取节点的普通度数(连接的边数)
node_degrees = dict(G.degree())
# 获取边的权重,用来设置边的粗细
edge_weights = [d['weight']*2 for (u, v, d) in G.edges(data=True)]
# 节点大小基于度数缩放
node_sizes = [deg*150 for deg in node_degrees.values()]

# 固定布局种子,保证每次画图位置一致
pos = nx.spring_layout(G, seed=123)
# 绘制节点、边、标签
nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color='#87CEEB')
nx.draw_networkx_edges(G, pos, width=edge_weights, alpha=0.6)
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')
# 显示边的共享人数标签
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=10)

plt.axis('off')
plt.show()

5. 获取图中的度数

  • 普通度数:指节点连接的边的数量(即该用户和多少其他用户有共享人员)
# 所有节点的普通度数
print("普通度数:", dict(G.degree()))
# 单个用户的普通度数,比如用户A
print("用户A的普通度数:", G.degree('A'))
  • 加权度数:指该用户所有连接边的权重之和(即该用户总共共享的人员总数)
# 所有节点的加权度数
print("加权度数:", dict(G.degree(weight='weight')))
# 单个用户的加权度数
print("用户A的加权度数:", G.degree('A', weight='weight'))

内容的提问来源于stack exchange,提问作者hansa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:22:41