github地址:链接

论文趋势分析

  • 1数据转换
    • 1.1读取原始数据
    • 1.2爬取论文类别数据
    • 1.3取data的子集进行处理
    • 1.4对categories进行处理
    • 1.5数据连接
    • 1.6存储转换后的数据,后面可以直接进行读取
  • 2数据探索性分析
    • 2.1 查看数据的缺失信息
    • 2.2统计不同大类的论文数量
    • 2.3按年度统计论文数量的变化
    • 2.4按月份统计论文发表数量
    • 2.5统计不同小类论文的数量
  • 3使用BI软件进行数据可视化分析
    • 3.1 不同年份计算机领域发表数量前五的领域
    • 3.2计算机领域论文数量对比
    • 3.3CV,ML等领域论文数量变化趋势

1数据转换

# 导入所需的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:breakd = json.loads(line)d = {col : d[col] for col in columns}data.append(d)data = pd.DataFrame(data)return data

1.1读取原始数据

data = readArxivFile('D:/Code/Github/data/arxiv-metadata-oai-snapshot.json', ['id', 'categories', 'authors','title','update_date'])

1.2爬取论文类别数据

#爬取所有的类别
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.textlevel_2_name = t.textelif t.name == "h3":raw = t.textlevel_2_code = re.sub(r"(.*)\((.*)\)",r"\2",raw) #正则表达式:模式字符串:(.*)\((.*)\);被替换字符串"\2";被处理字符串:rawlevel_2_name = re.sub(r"(.*)\((.*)\)",r"\1",raw)elif t.name == "h4":raw = t.textlevel_3_code = re.sub(r"(.*) \((.*)\)",r"\1",raw)level_3_name = re.sub(r"(.*) \((.*)\)",r"\2",raw)elif t.name == "p":notes = t.textlevel_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()
group_name archive_name archive_id category_name categories category_description
0 Computer Science Computer Science Computer Science Artificial Intelligence cs.AI Covers all areas of AI except Vision, Robotics...
1 Computer Science Computer Science Computer Science Hardware Architecture cs.AR Covers systems organization and hardware archi...
2 Computer Science Computer Science Computer Science Computational Complexity cs.CC Covers models of computation, complexity class...
3 Computer Science Computer Science Computer Science Computational Engineering, Finance, and Science cs.CE Covers applications of computer science to the...
4 Computer Science Computer Science Computer Science Computational Geometry cs.CG Roughly includes material in ACM Subject Class...

1.3取data的子集进行处理

否则数据量太大,处理时间太长**
抽取数据的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)

1.4对categories进行处理

categories列中有很多,一篇论文同时属于很多的类别,只取第一个类别,放弃其他类别

print(data.categories.nunique())
data['categories'] = data.categories.str.split(' ',expand=True)[0]
data.categories.nunique()
9488172

1.5数据连接

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)

1.6存储转换后的数据,后面可以直接进行读取

data_merge.to_csv('D:/Code/Github/data/data_subset_merge.csv',index = False)

2数据探索性分析

2.1 查看数据的缺失信息

可以看到group_name之后的部分列,都有缺失数据

data_merge.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 89846 entries, 77522 to 41836
Data columns (total 10 columns):#   Column                Non-Null Count  Dtype
---  ------                --------------  ----- 0   id                    89846 non-null  object1   categories            89846 non-null  object2   authors               89846 non-null  object3   title                 89846 non-null  object4   update_date           89846 non-null  object5   group_name            84229 non-null  object6   archive_name          84229 non-null  object7   archive_id            84229 non-null  object8   category_name         84229 non-null  object9   category_description  84229 non-null  object
dtypes: object(10)
memory usage: 7.5+ MB

2.2统计不同大类的论文数量

  • 可以看到物理学领域的论文数量最多,数学和计算机科学的其次,其他领域的论文数量都相对较少
  • 说明arxiv网站的论文大部分仍然集中在“物理学,数学,计算机科学”领域
data_merge.groupby('group_name')['id'].agg('count').sort_values(ascending = False).plot(kind = 'barh')

2.3按年度统计论文数量的变化

  • 可以看到论文数量大体上呈现递增的趋势
  • 2009年和2015年的数据偏高,有可能是抽样的随机因素,也有可能这两年的论文数量本来就比较高
data_merge.groupby(pd.to_datetime(data_merge.update_date).dt.year)['id'].agg('count').plot(kind = 'bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1cba2249dc0>

#绘制回归图
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])
<matplotlib.axes._subplots.AxesSubplot at 0x1cbc0bcd760>

2.4按月份统计论文发表数量

  • 比较发现一年中5,6,10,11月份是论文出产最多的月份
data_merge.groupby(pd.to_datetime(data_merge.update_date).dt.month)['id'].agg('count').plot(kind = 'bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1cbd97ce970>

2.5统计不同小类论文的数量

  • 只绘制了前20种
  • 高能物理,量子力学领域的论文数量最多
data_merge.groupby('category_name')['id'].agg('count').sort_values(ascending = False).head(20).plot(kind = 'barh')
<matplotlib.axes._subplots.AxesSubplot at 0x1cba5d5ec10>

3使用BI软件进行数据可视化分析

3.1 不同年份计算机领域发表数量前五的领域

可以看到计算机领域最火的领域一直在发生着变换,2014年-2016年都是信息理论方面的论文最多,而2017-2019是计算机视觉最火,到了2020年,机器学习则和计算机视觉并驾齐驱。

3.2计算机领域论文数量对比

排名前五的是计算机视觉、机器学习、信息理论、自然语言处理、人工智能五个方面

3.3CV,ML等领域论文数量变化趋势

可以看到论文的数量都呈现出上升的趋势,但是2014年是一个节点,2014年之后,计算机视觉和机器学习两个领域的论文数量都开始了非常迅速的增长

论文趋势分析——数据理解与分析相关推荐

  1. 网络游戏运营中的数据理解及流量转化

    网络游戏运营中数据的作用不可忽视,从商业理解到数据理解的过程中,各类数据将游戏运营规律和现象,以独特的方式呈现,尝试从基础概念的简要说明. 网络游戏运营过程是一个用户行为转化的过程,从用户行为操作角度 ...

  2. 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布

    图数据交互可视化分析框架 InteractiveGraph 日前发布 v0.3 版本,下载地址:https://github.com/grapheco/InteractiveGraph/release ...

  3. 阿里大规模数据中心性能分析

    郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化.CCF 系统软件专委和软件工程专委的委员.曾主持国家自然科学基金面上项目.入选上海市浦江人才计划A类.获得 ACMS ...

  4. 网站分析实战——如何以数据驱动决策,提升网站价值(大数据时代的分析利器)

    网站分析实战--如何以数据驱动决策,提升网站价值(大数据时代的分析利器) 王彦平吴盛峰  编著 ISBN 978-7-121-19312-5 2013年1月出版 定价:59.00 316页 16开 编 ...

  5. 最新最全论文合集——多模态情感分析

    AMiner平台(https://www.aminer.cn)由清华大学计算机系研发,拥有我国完全自主知识产权.平台包含了超过2.3亿学术论文/专利和1.36亿学者的科技图谱,提供学者评价.专家发现. ...

  6. java按秒查询数据_ClickHouse留存分析工具十亿数据秒级查询方案

    作者:陈璐,腾讯 CSIG 高级数据分析师本文实践了对于千万级别的用户,操作总数达万级别,每日几十亿操作流水的留存分析工具秒级别查询的数据构建方案.同时,除了留存分析,对于用户群分析,事件分析等也可以 ...

  7. 【深度学习】【物联网】深度解读:深度学习在IoT大数据和流分析中的应用

    作者|Natalie 编辑|Emily AI 前线导读:在物联网时代,大量的感知器每天都在收集并产生着涉及各个领域的数据.由于商业和生活质量提升方面的诉求,应用物联网(IoT)技术对大数据流进行分析是 ...

  8. 食品安全大数据可视化关联分析

    点击上方蓝字关注我们 食品安全大数据可视化关联分析 陈谊, 孙梦, 武彩霞, 孙小然 北京工商大学计算机学院食品安全大数据技术北京市重点实验室,北京 100048 摘要:随着检测技术的提高和互联网技术 ...

  9. 图数据交互可视化分析框架InteractiveGraph v0.3版本发布

    图数据交互可视化分析框架 InteractiveGraph日前发布v0.3版本,下载地址:https://github.com/grapheco/InteractiveGraph/releases/t ...

最新文章

  1. flume写入mysql_Flume高级之自定义MySQLSource
  2. 如何重装Domino服务器或者将Domino服务器从一台机器迁移到另外一台
  3. 使用WinSCP在WIndows与树莓派之间传递文件
  4. 51nod 1836:战忽局的手段(期望)
  5. 5、(字符串类型)CHAR、VARCHAR、TEXT、ENUM、SET
  6. php header x-auth-token,使用Angular 2正确设置Header X-Auth-Token
  7. OpenCV reshape函数需要注意的细节
  8. Appium安装过程
  9. mysql主从复制及问题解决
  10. 云起作者认证大神_2020网络文学“白金大神”名单出炉!顶级作家是怎样炼成的?...
  11. 结构体01:结构体的定义和使用
  12. 汇编语言Loop指令
  13. java+nanomsg(jnanomsg)
  14. 2015阿里巴巴实习生招聘客户端开发试题
  15. 第19节 简单扫描技术—基于windows系统
  16. archLinux安装记录
  17. 进程管理工具-Supervisord +CeSi
  18. win10系统没什么用的微软账户登陆
  19. 在Oracle中使用脏读,ORACLE 事务处理
  20. Http之referer详解

热门文章

  1. 高位字节与低位字节简单介绍
  2. 用Excel理解神经网络
  3. java播放器使用教程_[Java教程]Java音乐播放器
  4. B2C之淘宝商城,图穷匕见
  5. 图片标签,超链接标签
  6. 运行veins示例步骤
  7. 高等代数 二次型与矩阵的合同(第6章)2 正定二次型与正定矩阵
  8. cesium底图切换
  9. 虚拟机的三种网络模式
  10. linux下cat命令,关于cat >file 、cat <file <<EOF、cat <<-EOF的区别