基于NetworkX的Python评分量表数据聚类分析及可视化技术问询
数据重构与NetworkX可视化实现方案
一、数据重构步骤
你的原始数据是长格式(每行对应一个项目的一次评分),首先需要转成宽格式(每行对应一个完整的观测样本,列是各个症状项目),方便计算项目间的关联度:
- 给每个观测样本分组:原始数据每5行是一个样本,添加
Sample_ID列标记分组(比如Sample_1、Sample_2、Sample_3)。 - 用pandas的
pivot方法转成宽格式,最终结构如下:
| Sample_ID | Happy | Depressed | Anxious | Irritated | Confused |
|---|---|---|---|---|---|
| Sample_1 | 1 | 3 | 4 | 2 | 0 |
| Sample_2 | 1 | 5 | 3 | 4 | 1 |
| Sample_3 | 0 | 4 | 4 | 3 | 1 |
- 计算两个核心指标:每个症状的平均评分(用于设置节点直径)、症状间的关联度(比如皮尔逊相关系数,用于设置边的权重/粗细)。
二、NetworkX网络构建与可视化代码示例
import pandas as pd import networkx as nx import matplotlib.pyplot as plt # 1. 加载并重构数据 data = pd.DataFrame({ "Item": ["Happy", "Depressed", "Anxious", "Irritated", "Confused"]*3, "Rating": [1,3,4,2,0, 1,5,3,4,1, 0,4,4,3,1] }) # 添加样本ID分组 data["Sample_ID"] = ["Sample_1"]*5 + ["Sample_2"]*5 + ["Sample_3"]*5 # 转换为宽格式 wide_data = data.pivot(index="Sample_ID", columns="Item", values="Rating") # 2. 计算节点属性:平均评分(放大后作为节点直径) mean_ratings = wide_data.mean().to_dict() node_sizes = [v * 1000 for v in mean_ratings.values()] # 3. 计算边的权重:症状间的皮尔逊相关系数绝对值 corr_matrix = wide_data.corr() items = wide_data.columns.tolist() edges = [] for i in range(len(items)): for j in range(i+1, len(items)): edge_weight = abs(corr_matrix.loc[items[i], items[j]]) edges.append((items[i], items[j], edge_weight)) # 4. 构建图并可视化 G = nx.Graph() G.add_nodes_from(items) G.add_weighted_edges_from(edges) # 用弹簧布局让关联强的节点更靠近 pos = nx.spring_layout(G, k=0.5, weight='weight') # 绘制元素 nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color='lightblue') nx.draw_networkx_edges(G, pos, width=[w*5 for (u,v,w) in edges], edge_color='gray') nx.draw_networkx_labels(G, pos, font_size=12) plt.title("Symptom Clustering Network") plt.axis('off') plt.show()
三、实用资源
- NetworkX基础操作:优先看官方文档的「Tutorial」和「Reference」,重点掌握图的创建、节点/边属性设置、各类布局算法(spring_layout、circular_layout等)。
- 聚类分析(社区检测):NetworkX内置多种社区检测算法,比如
nx.community.louvain_communities(Louvain方法,适合无向图)、nx.community.girvan_newman(基于边介数的划分),可直接用于提取症状聚类。 - 数据处理技巧:熟练掌握pandas的
pivot、groupby、corr方法,是处理这类评分数据的核心。 - 可视化优化:可结合matplotlib调整颜色映射、节点样式,或用
pyvis生成交互式网络(适合大样本数据)。
内容的提问来源于stack exchange,提问作者B.Nin
相关产品推荐
相关产品推荐

