intellij idea使用教程 Netty checkbox webforms db2 rss vue添加class 外卖系统源码 网盘源码 广告投放系统源码 jquery each js键值对数组 oracle查看数据库 android调试工具 winbox使用教程 oracle给表增加字段 java取绝对值 python中for循环的用法 python调用函数 python传参 java基础入门 java获取当前月份 java对象和类 怎么看java版本 javafloat java获取当前日期 linux入门 javascript案例 高等数学同济第七版 相机权限 ps选择反向快捷键 服务器系统安装 php购物车 abr文件 苏拉玛起义的任务线 看图软件cad 斑驳纹理 上单艾克出装 lol世界第一 汉仪旗黑字体下载
当前位置: 首页 > 学习教程  > 编程语言

零基础入门数据分析

2021/1/13 20:22:32 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

学习笔记-学术前沿趋势分析 论文数据统计 使用pandas读取数据并进行统计,即统计2019年计算机各个方向论文数量。 数据集来源:https://www.kaggle.com/Cornell-University/arxiv 数据读取 #导入所需的package import seaborn as sns from bs4 import …

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

论文数据统计

使用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()

在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_600284.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?