合并WOS文献数据,并对关键词进行词频分析_Python实践

合并WOS文献数据,并对关键词进行词频分析_Python实践

  • 需求
  • 下载文献
  • 构建原始数据集
  • 关键词词频分析
  • 最后

需求

想要对所在学科(Public Administration)近十年都在做什么有一个基本的认识,其中一个最直观的办法是看主要期刊都在发什么领域的文章。任务拆解为三步:1)下载文献;2)整理文献数据,以一篇期刊文章为一个观测点,以关键词为主要变量,构建以供词频分析的原始数据集;3)对关键词进行词频分析。(注1:这三步应该可以用一篇代码打通解决,但出于学习的目的,我将任务分解了,每个任务对应一部分代码。注2: 我做这项工作的目的并非是用于文献分析,而是让自己对所在学科有一个直观感觉,做决策参考用。如果要做专门的文献分析以及生成可视化结果,CiteSpace等专业软件可以帮上忙。)

下载文献

通过WOS,我们首先在2021年3月4日下载了所在学科近十年主要期刊上的7500条左右文献数据。这一步骤记录如下。
WOS 高级搜索—>时间选择2010-2021,语言选择English,类型选择article—>搜索框内输入:

SO=(Public Administration Review) OR
SO=(Journal of Public Administration Research and Theory) OR
SO=(Public Management Review) OR
SO=(International Journal of Public Administration) OR
SO=(International Public Management Journal) OR
SO=(Public Administration) OR
SO=(Governance-An International Journal of Policy Administration and Institution) OR
SO=(International Review of Administrative Science) OR
SO=(Journal of Human Resources) OR
SO=(Administrative Science Quarterly) OR
SO=(American Review of Public Administration) OR
SO=(Review of Public Personnel Administration) OR
SO=(Local Government Studies) OR
SO=(Social Policy & Administration) OR
SO=(Public Policy and Administration) OR
SO=(Nonprofit Management & Leadership) OR
SO=(Administration & Society)

构建原始数据集

这一步的任务是合并统一制式的15个excel表。主要原因是,WOS每次只能保存500条文献,因此我们得到了15个excel表格。要想构建包含7500条数据的原始数据集,就需要合并15个表格。代码如下:

import os
import pandas as pd

#将文件读取出来放一个列表里
pwd = "./0304"
#新建列表存放每个文件数据(依次读取多个相同结构的excel文件并创建dataframe
dfs=[]
for root, dirs, files in os.walk(pwd):
	for file in files:
		file_path = os.path.join(root, file)
		#print(file_path) #因为报错了“xlrd.biffh.XLRDError: Unsupported format, or corrupt file”,所以这一步print看看,结果发现有一个.DS_Store的隐藏文件,所以xlrd读不出来会报错,于是在下一步加一个判断
		if "xls" in file_path: #加一个判断解决xlrd报错的问题
			df = pd.read_excel(file_path)
			dfs.append(df)
df = pd.concat(dfs)
df.to_excel("./0304/raw_data.xls", index=False)

关键词词频分析

观察WOS生成的文献数据发现,有的期刊并不会要求作者提供关键词,因此存在缺失值的问题。但同时,发现在“author_keywords"这个变量旁边还有一个“keywords_plus”变量。这个变量是基于每一篇文献所引用文献的标题生成的关键词。因此任务分为两步:1)对缺少“author_kewords”观测值的文献,将其“keywords_plus”下的观测值补过来。2)对“author_kewords”进行词频分析。基于步骤二,准备好一个仅有“author_keywords"和“keywords_plus”的excel表 Book1.xlsx之后, Book1.xls长这样:

发现以下一些坑:
1)如果“author_keywords"值为空,则将“keywords_plus”的值补给“author_keywords";
2)大小写
3)关键词之间是用semicolon 和space隔开的。

import xlrd
from collections import Counter
from operator import itemgetter

# step 0. 读excel文件
file_path = "./Book1.xlsx"
table = xlrd.open_workbook(file_path).sheets()[0] # 读取表
nrow, ncol = table.nrows, table.ncols # 记录行数和列数,第一行是表头

results = Counter()
# 对每行处理
for index in range(1, nrow): #第0行是表头
	# step 1. 获取value
	value = table.cell_value(index, 0)  #index是行的参数(第12行),0是指表格的第一列
	if value == "":
		value = table.cell_value(index, 1) 	# 如果为空,则取“keywords_plus”这一列的值
	# step 2. 分割并统计
	keywords = []
	for word in value.split(";"):
		if word.strip() != "":
			keywords.append(word.strip().lower())
	# keywords = [word.strip().lower() for word in value.split(";") if word.strip() != ""] #这一行可以代替第19-22行,是一样的效果,这一行代码更简洁且更高级
	results.update(keywords)

# step 3. 对结果排序
ordered_results = sorted([(key, value) for key, value in results.items()], key=itemgetter(1), reverse=True) #(key 和reverse是sorted函数的参数,如果key=itemgetter(0), 那么就是按照关键词的首字母进行排序)

# step 4. 输出结果
save_file_path = "./frequency.txt"
with open(save_file_path, "w") as f:
	for key, value in ordered_results:
		f.write(f"{key} : {value}\n")

最终呈现结果如下:
合并WOS文献数据,并对关键词进行词频分析_Python实践_第1张图片


最后

基础语法需要系统学习一下,代码规范也要加强。感谢王老师的帮助


最后编辑于2021年3月7日。

你可能感兴趣的:(python)