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

如何从含节点列表列的Pandas DataFrame构建聚合网络图?

使用NetworkX处理用户节点数据绘制加权网络图

完全可以用NetworkX实现你的需求,核心就是先把现有DataFrame转换成节点权重和边权重的统计数据,再用NetworkX构建并绘图。下面是具体步骤和代码:

1. 数据准备与格式转换

你的DataFrame里,每行代表一个用户关联的节点集合,我们需要统计两个关键数据:

  • 节点权重:每个节点在所有用户列表中出现的总次数(次数越多,节点越显眼)
  • 边权重:每对节点在同一用户列表中共现的次数(次数越多,边越粗/越显眼)

代码实现步骤

首先导入依赖库:

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

构造示例DataFrame(你可以替换成自己的真实数据):

df = pd.DataFrame({
    'user': ['A', 'B', 'C'],
    'nodes': [[0,1,3], [1,2,4], [0,3]]
})

统计节点权重

把所有节点列表摊平,用Counter计数:

# 摊平所有节点
all_nodes = [node for sublist in df['nodes'] for node in sublist]
# 统计每个节点出现次数
node_weights = Counter(all_nodes)

统计边权重

遍历每个用户的节点列表,生成所有两两组合的无向边,再统计每条边的共现次数:

edge_weights = Counter()
for nodes in df['nodes']:
    # 生成当前用户节点的所有两两无序组合
    edges = combinations(nodes, 2)
    edge_weights.update(edges)

2. 构建网络图并绘制

用NetworkX创建无向图,添加节点和边,并把权重作为属性传入:

# 创建无向图
G = nx.Graph()

# 添加节点,附带权重属性
G.add_nodes_from(node_weights.keys(), weight=node_weights.values())

# 添加边,附带权重属性
G.add_edges_from([(u, v, {'weight': w}) for (u, v), w in edge_weights.items()])

接下来设置绘图参数,根据权重调整节点大小和边的粗细:

plt.figure(figsize=(8,6))

# 节点大小:权重*1000(可根据需求调整倍数)
node_sizes = [node_weights[node] * 1000 for node in G.nodes()]
# 边的粗细:权重*2(可根据需求调整倍数)
edge_widths = [G[u][v]['weight'] * 2 for u, v in G.edges()]

# 用弹簧布局(spring_layout)排列节点
pos = nx.spring_layout(G, seed=42, k=0.8)  # seed保证布局固定,k控制节点间距

# 绘制节点
nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color='lightblue', alpha=0.8)
# 绘制边
nx.draw_networkx_edges(G, pos, width=edge_widths, edge_color='gray', alpha=0.6)
# 绘制节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')
# 绘制边权重标签(可选)
nx.draw_networkx_edge_labels(G, pos, edge_labels={(u,v): G[u][v]['weight'] for u,v in G.edges()})

plt.title('加权用户节点网络图', fontsize=14)
plt.axis('off')
plt.show()

关键说明

  • 节点大小和边粗细的倍数可以根据你的数据规模调整,避免节点过大或边过粗
  • 如果你的节点是字符串类型(比如不是数字),代码同样适用,不需要修改
  • 布局算法可以换成circular_layout、kamada_kawai_layout等,按需选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:05:02