CiteSpace 关键词共现图谱:从数据清洗到可视化分析的完整实践指南
2026/6/6 22:20:29 网站建设 项目流程


背景痛点:新手最容易踩的“三座大山”

  1. 数据导入:从 WOS 导出的“全记录与引文”txt 文件,字段分隔符混乱,关键词列里混着分号、逗号甚至换行符,CiteSpace 直接读取会报“empty node”或“time slice error”。
  2. 时间切片:默认 1 年一段看似省事,但遇到 2000 篇以下的小样本,切片过细会导致网络碎片化;反之,3 年一段又可能把真正的研究热点“抹平”。
  3. 网络修剪:勾了 Pathfinder 觉得高大上,结果 8G 内存跑 3 小时不出图;换 MST 又发现关键节点被“剪秃”,热点词消失。

技术对比:CiteSpace vs VOSviewer 怎么选?

维度CiteSpaceVOSviewer
共现权重支持 TF-IDF、突现(Burst Detection)、中介中心性(Betweenness Centrality)主要用共现频次,TF-IDF 需手动外挂
网络修剪Pathfinder、MST、Pruning Slice 混合策略仅 MST+聚类,参数少
时间动态可以生成时区演化动画,捕捉研究前沿静态图为主,时间轴需手动切片
上手曲线参数多、易踩坑,但可玩性高拖拽式操作,5 分钟出图
适合场景想发 SCI,需要“故事线”与“突现词”快速做组会汇报,图好看即可

一句话总结:想写论文深挖热点——CiteSpace;临时做文献综述——VOSviewer。

核心实现:从脏数据到干净网络

1. WOS 原始数据清洗(pandas 版)

import pandas as pd import re def load_wos_txt(path): """一次性读入 WOS 全记录 txt,返回 DataFrame""" with open(path, 'r', encoding='utf-8') as f: txt = f.read() # 用 ER 标记拆每条记录 records = [r.strip() for r in txt.split('ER\n') if r.strip()] rows = [] for rec in records: row = {} for line in rec.split('\n'): if line.startswith('DE '): row['DE'] = line[3:].strip() # 作者关键词 if line.startswith('ID '): row['ID'] = line[3:].strip() # 增补关键词 if line.startswith('PY '): row['PY'] = int(line[3:].strip()) rows.append(row) return pd.DataFrame(rows) def merge_keywords(df): """合并 DE 与 ID,统一分隔符""" df['keywords'] = (df['DE'].fillna('') + '; ' + df['ID'].fillna('')) df['keywords'] = df['keywords'].str.lower().str.split(r'[;\s]+') return df def synonym_map(kw_list, mapping): """同义词归并,mapping 为 dict: {'covid-19':'covid19'}""" return [mapping.get(k, k) for k in kw_list] # 示范:读数据 -> 合并 -> 去重 df = load_wos_txt('wos.txt') df = merge_keywords(df) syn_dict = {'machine learning':'ml', 'artificial intelligence':'ai'} df['keywords'] = df['keywords'].apply(lambda x: synonym_map(x, syn_dict)) df.to_csv('clean.csv', index=False, encoding='utf-8-sig')

2. 网络简化算法选择策略

  • 样本 <500 节点,想保留全局结构:用 Pathfinder,最大保留强相关边,但计算复杂度 O(n^4),内存 16G 起步。
  • 样本 500–2000 节点,兼顾速度与可视化:MST(Minimum Spanning Tree)(O(n^2)),节点不重叠,图最清爽。
  • 样本 >2000 节点,先 Pruning the sliced networks(按时间段先剪),再跑 MST,可防止“ spaghetti ”现象。

经验:先跑 MST 看热点骨架,再跑一次 Pathfinder 做补充,对比两次图谱,能发现被 MST 误剪的“桥梁关键词”。

代码示例:TF-IDF 加权共现矩阵

import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 1. 构造语料:每篇文献的关键词用空格拼接 docs = df['keywords'].apply(lambda x: ' '.join(x)).tolist() # 2. TF-IDF 向量化 vectorizer = TfidfVectorizer(token_pattern=r'\b\S+\b', lowercase=False) tfidf_mat = vectorizer.fit_transform(docs) terms = vectorizer.get_feature_names_out() # 3. 共现权重 = 余弦相似度 * 共现频次 co_mat = (tfidf_mat.T @ tfidf_mat) co_mat.setdiag(0) # 去掉自连 np.save('tfidf_co_matrix.npy', co_mat.toarray())

把生成的tfidf_co_matrix.npy在 CiteSpace 里用 “Import Matrix” 功能直接读入,即可得到带权网络,节点大小反映 TF-IDF 重要性,而非单纯频次。

避坑指南:让图谱既美又真

1. 节点重叠的 Layout 参数组合

  • Node Shape:Circle 比 Cross 更省空间;
  • Font Size:先统一 10 号,出图后再手动调大热点词;
  • Merger Overlapping Nodes:勾选后阈值设 0.02(默认 0.01 太保守,容易叠);
  • 手动拖拽:CiteSpace 支持“Kamada-Kawai”+“Drag”双模式,先自动布局,再人工微调 5 分钟,比纯算法更顺眼。

2. 识别虚假强连接

  • 显著性检验:在“Network Summary” 勾选 “Compute Q & S”,跑完后看模块度 Q 值 >0.3 且轮廓系数 S>0.5,聚类可信;
  • 随机重布线:用 Python 把矩阵随机重排 100 次,记录最大边权分布,真实边权若 <5% 分位,可视为“随机强连”,在可视化里降灰度或隐藏。

延伸思考:用中介中心性挖“跨界金矿”

中介中心性(Betweenness Centrality)衡量一个节点作为“桥梁”的能力。在 CiteSpace 里,勾选 “Compute Centrality” 后,节点外圈会出现紫色圈,圈越厚,跨界潜力越大。

实操小技巧:

  1. 把紫色圈节点列表导出 CSV,按中心性排序;
  2. 用突现检测(Burst Detection)再筛一轮,保留既有紫色圈又有红色“突现条”的词;
  3. 在知网或 Scopus 里二次检索这些“紫红”关键词,看它们近两年是否开始出现在不同学科 TOP 期刊,如果答案为“是”,恭喜你找到潜在跨学科热点。

案例:笔者在“碳中和”领域发现“carbon pricing”兼具高中心性+突现,追踪后发现该词 2023 年突然出现在能源政策与金融学期刊,顺势设计交叉课题,成功拿到校级跨学科培育基金。

写在最后

CiteSpace 像一台手动挡赛车,参数多、离合难踩,但熟悉之后,弯道超车的感觉真香。把数据清洗、网络修剪、TF-IDF 权重、中心性解读这几步跑通,你会发现关键词共现图谱不再是一堆五颜六色的“毛线球”,而是一张能讲故事的“研究地形图”。下次组会,当导师问“你怎么证明这是热点?” 你大可以放大紫色圈,再甩出 Q 值和突现条——有理有据,就这么简单。祝各位新手都能早日把 CiteSpace 玩成自己的“科研导航仪”。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询