共计 1512 个字符,预计需要花费 4 分钟才能阅读完成。
问题背景
在使用 CiteSpace 进行文献聚类分析时,用户经常会发现生成的聚类标签序号出现不连续现象(例如 1,2,4,7…)。这种断层会带来两个显著问题:

- 影响结果的可读性,难以快速判断聚类总数
- 干扰后续统计分析(如计算聚类规模分布)
原因分析
从算法实现角度看,序号断层主要源于 CiteSpace 的聚类机制:
- 模块度优化过程:CiteSpace 默认使用 Louvain 算法,在迭代合并社区时可能丢弃小型聚类(节点数 <5)
- 显著性过滤:系统会自动过滤轮廓系数(Silhouette)<0.3 的弱聚类
- 索引重建延迟:删除聚类后未及时重整序号,保留原始运算编号
解决方案
方案 1:调整聚类参数
通过修改算法参数保留更多聚类:
# 在 CiteSpace 的 Project 界面设置:Network Configuration →
- Modularity (Q): 0.3~0.7 (默认 0.5)
- Silhouette: 0.1~0.3 (默认 0.3)
参数调整建议:
- 降低 Modularity 会增加聚类数量,但可能降低区分度
- 降低 Silhouette 会保留更多边缘聚类,但质量可能下降
方案 2:手动修正方法
操作步骤:
- 导出聚类结果:
Export → Cluster Summary - 用 Excel 打开 CSV 文件
- 新增一列 ”NewID”,使用公式生成连续序号:
=IF(A2="","",COUNTIF($A$2:A2,"<>"&"")) - 替换原 ClusterID 列数据
方案 3:Python 自动化处理
完整处理脚本(需安装 pandas 和 networkx):
import pandas as pd
import networkx as nx
def fix_cluster_ids(input_csv, output_csv):
"""
修正聚类标签序号不连续问题
:param input_csv: CiteSpace 导出的聚类文件
:param output_csv: 输出文件路径
"""
df = pd.read_csv(input_csv)
# 获取有效聚类(非空值)valid_clusters = df[df['ClusterID'].notna()]
# 生成连续编号
cluster_map = {
old_id: new_id + 1
for new_id, old_id
in enumerate(valid_clusters['ClusterID'].unique())
}
# 映射新 ID
df['NewClusterID'] = df['ClusterID'].map(cluster_map)
# 保存结果
df.to_csv(output_csv, index=False)
print(f"已修正 {len(cluster_map)} 个聚类标签")
# 使用示例
fix_cluster_ids("cluster_summary.csv", "fixed_clusters.csv")
性能对比
| 方案 | 处理时间 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 参数调整 | 即时 | 前期分析 | 无需后处理 | 可能降低聚类质量 |
| 手动修正 | 5-10min | 小型数据集 | 可视化操作 | 易出错,不可复用 |
| Python 自动化 | <1s | 批量处理 / 编程环境 | 可集成到分析流程 | 需基础编程能力 |
避坑指南
- 参数过载问题:
- 同时调整多个参数可能导致聚类特征混乱
-
建议每次只修改一个参数并观察变化
-
编号冲突风险:
- 手动修正时注意保留原 ID 映射关系
-
推荐使用方案 3 的字典映射方法
-
网络拓扑保持:
- 任何修改都不应改变原始网络结构
- 可通过检查模块度 Q 值验证(变化应 <0.05)
结语
通过本文介绍的三种方法,研究者可以根据实际场景选择最适合的解决方案。对于需要频繁处理聚类结果的用户,推荐将 Python 脚本集成到分析流程中,实现一键化修正。后续研究可探索 CiteSpace 的 API 直接接入方案,实现更底层的参数控制。
正文完
