学术前沿趋势分析(一)

  • 任务说明
  • 数据集
  • 代码实现
  • 数据分析

一、任务说明

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

二、数据集

  1. 来源:https://www.kaggle.com/Cornell-University/arxiv
  2. 格式:数据集的格式如下:

id:arXiv ID,可用于访问论文。
submitter:论文提交者。
authors:论文作者。
title:论文标题。
comments:论文页数和图表等其他信息。
journal-ref:论文发表的期刊的信息。
doi:数字对象标识符。
report-no:报告编号。
categories:论文在 arXiv 系统的所属类别或标签。
license:文章的许可证。
abstract:论文摘要。
versions:论文版本。
authors_parsed:作者的信息。

三、代码实现

  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 #画图
  1. 读取数据
data  = [] #初始化
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 #显示数据大小

with语句优势:a.自动关闭文件句柄; b.自动显示(处理)文件读取数据异常

  1. 数据预处理
    a.统计论文种类【计算独立数据集种类】
    b.预处理时间【提取特定时间范围内的数据(2019年以后论文)】
    c.提取计算机领域论文
#统计论文种类
data["categories"].describe()
# 所有的种类(独立的)
unique_categories = set([i for l in [x.split(' ') for x in data["categories"]] for i in l])
len(unique_categories)
unique_categories
#预处理时间
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 #查看结果
#提取计算机领域论文
#爬取所有的类别
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

四、数据分析

  1. 数据统计
#论文大类数量分布
_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年以后论文分布
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. 数据可视化
#饼图
fig = plt.figure(figsize=(15,12))
explode = (0, 0, 0, 0.2, 0.3, 0.3, 0.2, 0.1)
plt.pie(_df["id"],  labels=_df["group_name"], autopct='%1.2f%%', startangle=160, explode=explode)
plt.tight_layout()
plt.show()

学术前沿趋势分析(一)相关推荐

  1. Datawhale数据分析学习——学术前沿趋势分析 任务1

    数据分析学习--学术前沿趋势分析 任务1 前言 赛题背景 任务1:论文数据统计 1.1 任务说明 1.2 数据集介绍 1.3 arxiv论文类别介绍 1.4 任务整体思路 1.5 具体代码实现以及讲解 ...

  2. 【学术前沿趋势分析 】

    学术前沿趋势分析 Task 01:论文数据统计 Task 02:论文作者统计 Task 03:论文代码统计 Task 04:论文种类分类 Task:5:作者信息关联 Task 01:论文数据统计 任务 ...

  3. 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)

    阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...

  4. 数据分析入门(学术前沿趋势分析)Task1-论文数据统计

    此次赛题是零基础入门数据分析(学术前沿趋势分析),使用公开的arXiv论文完成对应的数据分析操作.赛题内容包括对论文数量.作者出现频率.论文源码的统计,对论文进行分类以及对论文作者的关系进行建模. 目 ...

  5. 数据分析-学术前沿趋势分析一

    数据分析-学术前沿趋势分析 1 简介 1.1 问题背景 1.2 数据说明 2 数据介绍 3 具体代码实现 3.1 导入相关package并读取原始数据 3.2 数据预处理 3.3 数据分析及可视化 总 ...

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

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

  7. Datawhale组队学习21期_学术前沿趋势分析Task2_论文作者统计

    任务说明 任务主题:论文作者统计,统计所有论文作者出现评率Top10的姓名: 任务内容:论文作者的统计.使用 Pandas 读取数据并使用字符串操作: 任务成果:学习 Pandas 的字符串操作: 数 ...

  8. 学术前沿趋势分析Task01

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

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

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

最新文章

  1. 虚拟机红帽linux登陆密码,[操作系统]vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办...
  2. 2013 Multi-University Training Contest 9 1011 Arc of Dream
  3. Core ML介绍 (Apple机器学习框架)
  4. CTR深度学习模型之 DeepFM 模型解读
  5. javascript数组浅谈1
  6. Python资料分享来袭,收下不谢!
  7. P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)
  8. ubuntu安装可加速播放打视频播放器vlc
  9. 基于matlab边缘提取的几种方法的比较
  10. 滴滴披露女司机数据:80后女性过半 24%全年零违章
  11. 设计原则在设计模式的应用
  12. 开源的Linphone SIP 电话存在栈漏洞,可远程使客户端设备崩溃
  13. C# 新特性 操作符单?与??和 ?. 的使用
  14. js 实现 间隙滚动效果
  15. 华为官方解锁工具_渣男为何爱用华为手机?
  16. Axure元件库,Axure元件库下载,Axure Design
  17. Duplicate entry '' for key 'username'
  18. firefox火狐集成idm
  19. TensorFlow Seq2Seq模型样例:实现语言翻译
  20. 在华为手机上查看连接过的wifi密码(不愁记性不好)

热门文章

  1. 利用Java Calendar类打印日历
  2. 一文看懂Echo和Alexa,亚马逊如何用苹果的玩法在玩语音?
  3. 中国计算机信息系统集成行业协会:信息安全服务资质等级划分,你了解吗
  4. 为oracle数据库新增表空间及用户
  5. MSP430之BR0、BR1计算
  6. AC_AttitudeControl_Heli.cpp的AC_AttitudeControl_Heli::rate_target_to_motor_yaw函数代码分析
  7. 周末读书:《红楼梦》
  8. 简单的认识dll授权加密
  9. RFP红色荧光蛋白抗体——Nature、Cell高分文章
  10. 3D可视化智慧档案馆一体建设平台设计的主要依据