数据分析学习-学术前沿趋势分析Task1(阿里云)

最近放假了,在家时无聊发现数据分析挺有意思,感觉应该也挺有用的,就想着学习一下。看到阿里云数据分析方面的任务挺多,就边学习边实践一下。赛题链接:学术前沿趋势分析
本数据集是使用arXiv在公开的论文数据集,数据集主要有一下格式

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

本赛题一共有5个task,如下:

任务1:论文数量统计(数据统计任务):统计2019年全年,计算机各个方向论文数量;
任务2:论文作者统计(数据统计任务):统计所有论文作者出现评率Top10的姓名;
任务3:论文代码统计(数据统计任务):统计所有论文类别下包含源代码论文的比例;
任务4:论文分类(数据建模任务):利用已有数据建模,对新论文进行类别分类;
任务5:作者关联(数据建模任务):对论文作者关系进行建模,统计最常出现的作者关系;

我本次是完成的task1,就是统计2019全年计算机各个方向的论文。通过对原始数据观察发现还多了一个updataData,不过全是2019年的就以为着我不用对数据的年份进行筛选,所有数据都是2019的,现在需要做的就是选出所有计算机方向的论文。
所以在本次task中,我只需要用到ID和categories项,categories项的格式是通过空格隔开不同学科,然后通过’.'隔开方向。如(a.x b.y)这种。本次task比较简单只需要对categories进行拆分然后统计就行了,但由于初学,还是废了一些时间的。
源码:

import pandas as pd
import matplotlib.pyplot as plt


def get_data():
    df = pd.read_json('arxiv-metadata-oai-2019.json', lines=True)
    statistics_categories = {}
    tables = {'id': [], 'categories': []}
    for i in range(len(df['id'])):
        categories = df['categories'][i].split(' ')
        flag = False    #防止重复统计
        for types in categories:
            type = types.split('.')
            if type[0] == 'cs':
                if flag == False:
                    tables['id'].append(df['id'][i])
                    tables['categories'].append(df['categories'][i])
                    flag = True
                if type[1] not in statistics_categories:
                    statistics_categories[type[1]] = 1
                else:
                    statistics_categories[type[1]] += 1
    tables = pd.DataFrame.from_dict(tables)
    print(tables)
    return statistics_categories


# 显示高度
def auto_label(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2.- 0.2, 1.03*height, '%s' % int(height))


def draw_graph(statistics_categories):
    #柱状图
    name_list = list(statistics_categories.keys())
    name1 = name_list[:int(len(name_list) / 2)]
    name2 = name_list[int(len(name_list) / 2):]
    num_list = list(statistics_categories.values())
    num1 = num_list[:int(len(num_list) / 2)]
    num2 = num_list[int(len(num_list) / 2):]
    plt.subplot(211)
    auto_label(plt.bar(range(len(name1)), num1, color='rgb', tick_label=name1))
    plt.subplot(212)
    auto_label(plt.bar(range(len(name2)), num2, color='rgb', tick_label=name2))
    plt.show()
    plt.close()
    
    #饼状图
    plt.axes(aspect=1)
    plt.pie(x=num_list, labels=name_list, autopct='%3.1f %%')
    plt.show()


if __name__ == '__main__':
    statistics_categories = get_data()
    draw_graph(statistics_categories)

实验结果如下:
柱状图:
在这里插入图片描述
饼状图:
在这里插入图片描述
由于第一次具体接触数据分析这一类,所以图画得比较粗糙,还需要慢慢的学习。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值