数据分析入门base——arxiv 数据分析(1)
一、赛题理解
1.1赛题背景介绍:
arXiv
重要的学术公开网站,也是搜索、浏览和下载学术论文的重要工具。arXiv论文涵盖的范围非常广,涉及物理学的庞大分支和计算机科学的众多子学科,如数学、统计学、电气工程、定量生物学和经济学等等。本次赛题将使用arXiv在公开的论文数据集,希望各位选手通过数据分析能够挖掘出最近学术的发展趋势和学术关键词。
二、数据集介绍
2.1 数据集的格式如下:
id:arXiv ID,可用于访问论文;
submitter:论文提交者;
authors:论文作者;
title:论文标题;
comments:论文页数和图表等其他信息;
journal-ref:论文发表的期刊的信息;
doi:数字对象标识符,https://www.doi.org;
report-no:报告编号;
categories:论文在 arXiv 系统的所属类别或标签;
license:文章的许可证;
abstract:论文摘要;
versions:论文版本;
authors_parsed:作者信息(处理后)
2.2 Arxiv论文类别介绍
‘acc-phys hep-ex physics.acc-ph’,
‘acc-phys physics.acc-ph’,
‘adap-org chao-dyn nlin.AO nlin.CD’,
‘adap-org cond-mat.dis-nn nlin.AO’,
‘adap-org nlin.AO’,
‘alg-geom math.AG’,
‘astro-ph’,
‘astro-ph astro-ph.EP physics.geo-ph’,
‘astro-ph astro-ph.HE’,
‘astro-ph astro-ph.SR’,
…
‘stat.OT math.CO’,
‘stat.OT math.HO’,
‘stat.OT math.PR’,
‘stat.OT math.ST physics.data-an stat.TH’,
‘stat.OT physics.soc-ph stat.AP stat.ME’,
‘stat.OT stat.AP’,
‘stat.OT stat.CO’,
‘stat.OT stat.CO stat.ME’,
‘stat.OT stat.ME’,
‘stat.OT stat.ML’
三、数据集描述统计分析——python示例代码
3.1导入相关的库
import pandas as pd
import matplotlib.pyplot as plt
import json
读取数据
data = []
with open('G:/比赛/阿里天池/学术前言趋势分析/arxiv-metadata-oai-2019.json',"r") as f:
for line in f:
data.append(json.loads(line))
3.2 数据概况:
###### 数据概况:
df = pd.DataFrame(data)
df.shape ###(170618, 14)
df.head()
统计类别数量
count:同一个指标的每个类型计数
unique:同一个指标的类型个数
top:同一个指标中出现次数最高的频数
frep:同一个指标中出现次数最高的频率
df["categories"].describe()
count 170618
unique 15592
top cs.CV
freq 5559
Name: categories, dtype: object
categories的类别计数
df["categories"].value_counts()
cs.CV 5559
math.AG 1726
math.OC 1718 cs.IT
cond-mat.soft cond-mat.stat-mech nlin.CD physics.flu-dyn 1
math.DG hep-th math-ph math.MP math.OA 1
…
hep-ex hep-th 1 math.GT math.DG
Length: 15592, dtype: int64
3.3去掉categories所有重复类目
unique_cate = set([ i for l in [x.split(" ") for x in df["categories"]] for i in l])
len(unique_cate) #172
unique_cate
3.4 按照时间顺序处理数据
#根据update_date去除时间数据
df["year"] = pd.to_datetime(df["update_date"]).dt.year
#后续无需使用update_date 可删除该字段
del df["update_date"]
df.groupby(["categories",'year']).count()
df.reset_index(drop=True,inplace=True)
df
3.5 arxiv论文各个领域所占的比重
可通过爬虫获取 df_taxonomy来源 url:https://arxiv.org/category_taxonomy.
#将dfy与df_taxonomy进行merge
data = df.merge(df_taxonomy,on="categories",how="left").drop_duplicates(["id","group_name"]).groupby("group_name").agg({"id":"count"}).sort_values(by="id",ascending=False).reset_index()
data
#通过饼图展示arxiv论文各个领域所占的比重
fig = plt.figure(figsize=(10,8))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.title("pie论文类别分析")
explode= (0, 0, 0, 0.2, 0.3, 0.3, 0.2, 0.1)
plt.pie(data["id"],labels=data["group_name"],autopct='%d%%',startangle=160,explode=explode)
plt.tight_layout()
plt.show()
#对计算机进行分类统计
group_name = "Computer Science"
data1 = df.merge(df_taxonomy,on="categories").query("group_name==@group_name").groupby(["year","category_name"]).count().reset_index().pivot(columns="year",index="category_name",values="id")
data1
#或者可通过以下方式操作
data1 =df.merge(df_taxonomy,on="categories")
data2 = data1[data1["group_name"]=="Computer Science"].groupby(["year","category_name"]).count().reset_index().pivot(columns="year",index="category_name",values=["id","categories"])
data2