文章目录

  • 一、任务说明
  • 二、具体代码实现以及讲解
    • 1.导入package并读取原始数据
    • 2.数据预处理
    • 3.数据分析及可视化

一、任务说明

任务主题:论文数量统计,即统计2019年全年计算机各个方向论文数量
任务内容:赛题的理解、使用 Pandas 读取数据并进行统计
任务成果:学习 Pandas 的基础操作

二、具体代码实现以及讲解

1.导入package并读取原始数据

# 导入所需的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 #画图工具
# 读入数据data  = [] #初始化
#使用with语句优势:1.自动关闭文件句柄;2.自动显示(处理)文件读取数据异常
with open("arxiv-metadata-oai-snapshot.json", 'r') as f: for line in f: data.append(json.loads(line))data = pd.DataFrame(data) #将list变为dataframe格式,方便使用pandas进行分析
data.shape #显示数据大小
data.head() #显示数据的前五行

2.数据预处理

'''
count:一列数据的元素个数;
unique:一列数据中元素的种类;
top:一列数据中出现频率最高的元素;
freq:一列数据中出现频率最高的元素的个数;
'''data["categories"].describe()

这里使用了 split 函数将多类别使用 “ ”(空格)分开,组成list,并使用 for 循环将独立出现的类别找出来,并使用 set 类别,将重复项去除得到最终所有的独立paper种类。

# 所有的种类(独立的)unique_categories = set([i for l in [x.split(' ') for x in data["categories"]] for i in l])
len(unique_categories)
unique_categories

我们的任务要求对于2019年以后的paper进行分析,所以首先对于时间特征进行预处理,从而得到2019年以后的所有种类的论文:

data["year"] = pd.to_datetime(data["update_date"]).dt.year #将update_date从例如2019-02-20的str变为datetime格式,并提取处year
del data["update_date"] #删除 update_date特征,其使命已完成
data = data[data["year"] >= 2019] #找出 year 中2019年以后的数据,并将其他数据删除
# data.groupby(['categories','year']) #以 categories 进行排序,如果同一个categories 相同则使用 year 特征进行排序
data.reset_index(drop=True, inplace=True) #重新编号
data #查看结果

这里我们就已经得到了所有2019年以后的论文,下面我们挑选出计算机领域内的所有文章:

#爬取所有的类别
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})#按照 "group_name" 进行分组,在组内使用 "archive_name" 进行排序
df_taxonomy.groupby(["group_name","archive_name"])
df_taxonomy

3.数据分析及可视化

接下来我们首先看一下所有大类的paper数量分布

_df = data.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()_df

下面统计在计算机各个子领域2019年后的paper数量:

group_name="Computer Science"
cats = data.merge(df_taxonomy, on="categories").query("group_name == @group_name")
cats.groupby(["year","category_name"]).count().reset_index().pivot(index="category_name", columns="year",values="id")

数据分析:论文数据统计相关推荐

  1. 数据分析---论文数据统计

    数据分析-论文数据统计 目录 1.1任务说明 1.2数据集介绍 1.3arxiv论文类别介绍 1.4具体代码实现 1.4.1导入package并读取原始数据 1.4.2数据预处理 1.4.3数据分析及 ...

  2. 数据分析之学术前沿分析 任务1:论文数据统计

    任务1:论文数据统计 1.1 任务说明 1.2 数据集介绍 1.3 arxiv论⽂文类别介绍 1.4 具体代码实现以及讲解 1.4.1 导⼊入package并读取原始数据 1.4.2 数据预处理理 1 ...

  3. 数据分析---arXiv论文数据统计

    这里写目录标题 1.论文数据统计 1.1 任务说明 1.2 数据集介绍 1.3 arxiv论文类别介绍 1.4 具体代码实现以及讲解 1.4.1 导入package并读取原始数据 1.4.2 数据预处 ...

  4. 论文数据分析-1(论文数据统计)

    这是在学习数据分析的一个实例,论文数据分析,这是第一部分,笔者刚学习此项内容,有问题大家提出来,不喜勿喷. 任务1:论文数据统计1 1.1 任务说明 任务主题:论文数量统计,即统计2019年全年计算机 ...

  5. 【竞赛算法学习】学术前沿趋势分析-论文数据统计

    任务1:论文数据统计 1.1 任务说明 任务主题:论文数量统计,即统计2019年全年计算机各个方向论文数量: 任务内容:赛题的理解.使用 Pandas 读取数据并进行统计: 任务成果:学习 Panda ...

  6. 论文数据统计Task1

    论文数据统计Task1 数据集 具体代码实现 导入所需包 读入数据并查看数据大小 显示数据的前五行 进行数据预处理 查看所有论文的种类 特征处理 筛选数据 数据分析及可视化 心得体会 数据集 链接:数 ...

  7. 【学术前沿分析】1 论文数据统计

    论文数据统计 1.1 任务说明 读取json数据.爬取数据: 论文数量统计,即统计2019年全年计算机各个方向论文数量: 1.2 数据集介绍 数据集来源:数据集链接: 数据集的格式如下: id:arX ...

  8. 组队学习笔记Task1:论文数据统计

    数据分析第一次组队学习笔记--Lizzy @Datawhale Task1:论文数据统计 学习主题:论文数量统计(数据统计任务),统计2019年全年,计算机各个方向论文数量: 学习内容:赛题理解.Pa ...

  9. 学术前沿趋势分析_学习_论文数据统计Task1

    论文数据统计学习记录 任务说明 分析说明 1. 获得方法:**==使用python 爬虫爬取数据集==** 2. 这里**==使用正则化加以限制==** 3. 判断数据是否存在 4. json文件的设 ...

最新文章

  1. cocos lua 创建替换图片
  2. 问题 | Matlab:Fatal Error on startup(致命错误)
  3. webpack打包测试_webpack入门笔记(一)
  4. Java程序员春招三面蚂蚁金服,丹丹丹学妹哭着对我说:学长
  5. python函数chr_python函数之chr(i)
  6. slam特征点深度 svd_【干货】视觉SLAM面试题汇总(第二部分)
  7. java 小球运动轨迹_java怎么实现小球的运动轨迹
  8. [转载]jQuery操作Table学习总结
  9. 关于DLL中的哪段代码被执行的处理方法
  10. java fileupload_java组件fileupload
  11. 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
  12. Recommending What Video to Watch Next: A Multitask Ranking System
  13. minio-operator部署minio服务,并用Java客户端访问minio
  14. Java爬虫之批量下载LibreStock图片(可输入关键词查询下载)
  15. 阿里云硬盘挂载与扩容
  16. oracle10g数据库复制,windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...
  17. 年薪80W的大数据开发【1024G全套资源】都在这儿!
  18. .jar.LASTUPDATED问题解决
  19. 自定义View——弹性滑动
  20. UG\NX二次开发 Visual Studio平台工具集介绍

热门文章

  1. C++基础和STL(习题)
  2. 商汤科技2018笔试
  3. js/javascript正则表达式中/g /i /m的用法,以及实例
  4. 市场红利!这家公司4D成像雷达取得重大技术突破
  5. 维宁尔将以约1.76亿美元出售在日本和中国的制动系统合资业务
  6. cfc 教程_通用开发人员第2部分的CFC
  7. MOS管入门----只谈应用,不谈原理
  8. 计算机一级可以积分入深户吗,计算机软考中级能入深户吗?怎样报名考取
  9. C语言游戏开发第一课:数字华容道
  10. centos搭建USDT omni钱包节点