作者:李攀,北航硕士,Datawhale优秀学习者
arXiv是重要的学术公开网站,也是搜索、浏览和下载学术论文的重要工具。它涵盖的范围非常广,涉及物理学的庞大分支和计算机科学的众多子学科,如数学、统计学、电气工程、定量生物学和经济学等等。
本文使用arXiv公开的论文数据集,聚焦2008年-2020年计算机各个方向论文数据,对其进行了数据探索性分析和可视化分析,什么是2020年最火的方向,排名前五的又是哪些呢?一起来看看结论和数据分析过程。
本文数据下载地址:https://tianchi.aliyun.com/competition/entrance/531866/information
从json中读取数据
# 导入所需的package
import seaborn as sns #用于画图
from bs4 import BeautifulSoup #用于爬取arxiv的数据
import re #用于正则表达式,匹配字符串的模式
import requests #用于网络连接,发送网络请求,使用域名获取对应信息
import json #读取数据,我们的数据为json格式的
import pandas as pd #数据处理,数据分析
import matplotlib.pyplot as plt #画图工具
def readArxivFile(path, columns=['id', 'submitter', 'authors', 'title', 'comments', 'journal-ref', 'doi','report-no', 'categories', 'license', 'abstract', 'versions','update_date', 'authors_parsed'], count=None):
data = []
with open(path, 'r') as f:
for idx, line in enumerate(f):
if idx == count:
break
d = json.loads(line)
d = {col : d[col] for col in columns}
data.append(d)
data = pd.DataFrame(data)
return data
data = readArxivFile('D:/Code/Github/data/arxiv-metadata-oai-snapshot.json', ['id', 'categories', 'authors','title','update_date'])
#爬取所有的类别
website_url = requests.get('https://arxiv.org/category_taxonomy').text #获取网页的文本数据
soup = BeautifulSoup(website_url,'lxml') #爬取数据,这里使用lxml的解析器,加速
root = soup.find('div',{'id':'category_taxonomy_list'}) #找出 BeautifulSoup 对应的标签入口
tags = root.find_all(["h2","h3","h4","p"], recursive=True) #读取 tags
#初始化 str 和 list 变量
level_1_name = ""
level_2_name = ""
level_2_code = ""
level_1_names = []
level_2_codes = []
level_2_names = []
level_3_codes = []
level_3_names = []
level_3_notes = []
#进行
for t in tags:
if t.name == "h2":
level_1_name = t.text
level_2_code = t.text
level_2_name = t.text
elif t.name == "h3":
raw = t.text
level_2_code = re.sub(r"(.*)\((.*)\)",r"\2",raw) #正则表达式:模式字符串:(.*)\((.*)\);被替换字符串"\2";被处理字符串:raw
level_2_name = re.sub(r"(.*)\((.*)\)",r"\1",raw)
elif t.name == "h4":
raw = t.text
level_3_code = re.sub(r"(.*) \((.*)\)",r"\1",raw)
level_3_name = re.sub(r"(.*) \((.*)\)",r"\2",raw)
elif t.name == "p":
notes = t.text
level_1_names.append(level_1_name)
level_2_names.append(level_2_name)
level_2_codes.append(level_2_code)
level_3_names.append(level_3_name)
level_3_codes.append(level_3_code)
level_3_notes.append(notes)
#根据以上信息生成dataframe格式的数据
df_taxonomy = pd.DataFrame({
'group_name' : level_1_names,
'archive_name' : level_2_names,
'archive_id' : level_2_codes,
'category_name' : level_3_names,
'categories' : level_3_codes,
'category_description': level_3_notes
})
df_taxonomy.head()
抽取数据的5%进行分析,否则数据量太大,处理时间太长。
#存储转换后的原始数据
data.to_csv('D:/Code/Github/data/data.csv',index = False)
df_taxonomy.to_csv('D:/Code/Github/data/categories.csv',index = False)
#对数据进行抽样
data = data.sample(frac=0.05,replace=False,random_state=1)
data.shape
(89846, 5)
categories列中有很多,一篇论文同时属于很多的类别,只取第一个类别,放弃其他类别。
print(data.categories.nunique())
data['categories'] = data.categories.str.split(' ',expand=True)[0]
data.categories.nunique()
9488
172
data_merge = data.merge(df_taxonomy,how='left',on='categories').sort_values(by = "update_date").drop_duplicates(['id','group_name'],keep = 'first')
data_merge.shape
(89847, 10)
发现比原始抽样数据多了一行,经查明,原来是多了一行空行,进行删除
data_merge.dropna(how='any',subset=['categories'],inplace=True)
data_merge.shape
(89846, 10)
data_merge.to_csv('D:/Code/Github/data/data_subset_merge.csv',index = False)
可以看到group_name之后的部分列,都有缺失数据
data_merge.info()
data_merge.groupby('group_name')['id'].agg('count').sort_values(ascending = False).plot(kind = 'barh')
data_merge.groupby(pd.to_datetime(data_merge.update_date).dt.year)['id'].agg('count').plot(kind = 'bar')
#绘制回归图
data_plot=data_merge.groupby(pd.to_datetime(data_merge.update_date).dt.year)['id'].agg('count').reset_index()
sns.regplot(data_plot.iloc[:,0],data_plot.iloc[:,1])
data_merge.groupby(pd.to_datetime(data_merge.update_date).dt.month)['id'].agg('count').plot(kind = 'bar')
data_merge.groupby('category_name')['id'].agg('count').sort_values(ascending = False).head(20).plot(kind = 'barh')
<matplotlib.axes._subplots.AxesSubplot at 0x1cba5d5ec10>
可以看到计算机领域最火的领域一直在发生着变换,2014年-2016年都是信息理论方面的论文最多,而2017-2019是计算机视觉最火,到了2020年,机器学习则和计算机视觉并驾齐驱。
可以看到论文的数量都呈现出上升的趋势,但是2014年是一个节点,2014年之后,计算机视觉和机器学习两个领域的论文数量都开始了非常迅速的增长,这两个方向依然是计算机领域目前论文中的最火的方向,至于今年比较热的新方向,如可复现性、差分隐私、几何深度学习、神经形态计算、强化学习是否成为新增长点,来一个预测吧。