共计 1819 个字符,预计需要花费 5 分钟才能阅读完成。
CiteSpace 聚类结果无序性解析
作为一个刚接触 CiteSpace 的新手,第一次看到聚类结果时,我满脑子都是问号:为什么这些聚类编号是乱序的?3 号聚类旁边挨着 8 号,而 1 号却跑到了角落?经过反复实践和查阅资料,终于搞明白这是算法特性而非软件 bug。下面分享我的学习笔记,希望能帮到有同样困惑的朋友。

一、核心概念:两种聚类模式的本质差异
-
时序聚类(Timeline)
像整理时间线照片一样严格按年份排列,2010 年的研究节点绝不会跑到 2009 年前面。算法强制保持时间先后顺序,代价是可能拆散高相似度节点。 -
相似度聚类(Cluster)
根据节点间的共现 / 耦合强度计算距离,采用谱聚类或 K -means 等算法分组。就像把相似颜色的积木堆在一起,但积木堆之间没有固定顺序——这就是我们看到编号混乱的根本原因。
关键点:相似度聚类使用的模块度 (Modularity) 优化只关心组内连接紧密程度,对簇间排列顺序没有任何约束条件(参考 CiteSpace 手册第 8 章)。
二、为什么无序聚类会误导人?
去年分析新冠疫情文献时就踩过坑:
-
错误推断演进路径
把空间上临近的聚类 3(2020)和聚类 7(2022)当成连续发展,实际两者间隔着其他研究方向 -
误判研究热度
默认视图下较大的聚类容易被优先关注,但编号靠后的聚类可能包含更多关键文献 -
跨年对比失真
2015-2018 年的聚类如果被分散显示,会低估该时间段的实际研究规模
三、3 招驯服无序聚类
方案 1:可视化参数调整法
操作步骤:
- 在
Visualization标签页勾选Layout > Cluster by Time Slicing - 将
Node Color映射改为Publication Year - 调整
Node Size使用Sigma值突出高重要性节点
效果:虽然聚类编号仍无序,但通过颜色梯度能直观识别时间分布规律(示例图来自 WoS 冠状病毒数据集)
方案 2:Python 自定义排序
import networkx as nx
import matplotlib.pyplot as plt
# 导出 CiteSpace 的 network 文件
G = nx.read_gexf('citespace_network.gexf')
# 按节点平均年份排序
cluster_order = sorted(nx.community.greedy_modularity_communities(G),
key=lambda nodes: np.mean([G.nodes[n]['year'] for n in nodes])
)
# 可视化
pos = nx.spring_layout(G)
for i, cluster in enumerate(cluster_order):
nx.draw_networkx_nodes(G, pos, nodelist=cluster, node_color=[plt.cm.tab10(i)])
方案 3:Pandas 后处理技巧
import pandas as pd
df = pd.read_csv('citespace_clusters.csv')
# 按聚类平均被引量排序
df['cluster_rank'] = df.groupby('cluster')['citations'].transform('mean').rank()
# 保存为 TXT 供 CiteSpace 重新导入
df.to_csv('sorted_clusters.txt', sep='\t', index=False)
四、新手避坑指南
-
空间位置≠关联强度
中间位置不一定是核心主题,可能是多个聚类的过渡区域 -
时间切片建议
分析 10 年以上文献时,窗口宽度建议 2 - 3 年;短周期研究可用 1 年 -
Sigma 阈值
社会科学设 1.0-1.5,自然科学设 1.5-2.0,可通过Burstness面板校准
实践互动
我整理了一个测试数据集(含 2010-2020 年 AI 领域文献),大家可以尝试:
- 将
Time Slicing从 2 年调整为 1 年 - 观察聚类数量如何变化
- 比较
Cluster View和Timeline View的节点分布差异
思考题
当发现两个强关联但年代间隔大的节点时(比如 2005 年和 2018 年的文献在同一聚类),可能的原因是:
1. 开创性工作与后续里程碑研究的呼应
2. 研究方法论跨期传承
3. 数据噪声(建议检查引文上下文)
遇到这种情况,我会优先查看共被引频次和中介中心性,确认是否真实存在知识关联。
小贴士:CiteSpace 的
Pathfinder网络修剪功能能减少偶然连接干扰(参数路径设为 3 - 5 效果较佳)
