零基础入门数据分析

学习笔记-学术前沿趋势分析

论文数据统计

使用pandas读取数据并进行统计,即统计2019年计算机各个方向论文数量。
数据集来源:https://www.kaggle.com/Cornell-University/arxiv

数据读取

#导入所需的package
import seaborn as sns
from bs4 import BeautifulSoup
import re
import requests
import json
import pandas as pd
import matplotlib.pyplot as plt
#读取数据
data=[]
with open("arxiv-metadata-oai-snapshot.json",'r') as f:
    for line in f:
        data.append(json.loads(line))
data=pd.DataFrame(data)
data.shape
data.head()

数据预处理

首先粗略统计论文的种类信息

'''
count:⼀列数据的元素个数;
unique:⼀列数据中元素的种类;
top:⼀列数据中出现频率最⾼的元素;
freq:⼀列数据中出现频率最⾼的元素的个数;
'''
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_categ
#对时间特征进行预处理,得到2019年以后的所有种类的论文
data["year"] = pd.to_datetime(data["update_date"]).dt.year 
del data["update_date"] 
data = data[data["year"] >= 2019]
# data.groupby(['categories','year']) 
data.reset_index(drop=True, inplace=True) 
data 
#爬取所有的类别
import urllib3
urllib3.disable_warnings()
website_url = requests.get('https://arxiv.org/category_taxonomy',verify=False).text #取消了SSL验证
soup = BeautifulSoup(website_url,'lxml') 
root = soup.find('div',{'id':'category_taxonomy_list'}) 
tags = root.find_all(["h2","h3","h4","p"], recursive=True)
#初始化 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) 
        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
})
#按照 "group_name" 进⾏分组,在组内使⽤ "archive_name" 进⾏排序
df_taxonomy.groupby(["group_name","archive_name"])
df_taxonomy

在这里插入图片描述

数据分析及可视化

使⽤merge函数,以两个dataframe共同的属性 “categories” 进⾏合并,并以 “group_name” 作为类别进⾏统计,统计结果放⼊ “id” 列中并排序。

_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

在这里插入图片描述

#饼图进行可视化
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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值