媒体价格 威客任务   业务咨询: 合作: 732055019

数据分析入门(基于python)——学术前沿趋势分析——Task2:论文作者统计_我的名字叫做

贵客云 2021-01-14 15:32 阅读 17

Task2:论文作者统计

  • 任务背景
  • 任务描述
  • 数据集介绍
  • 具体思路以及代码实现
    • 导入package并读取原始数据
    • 数据处理步骤
    • 字符串相关处理
    • 数据统计
  • 总结

任务背景

本任务的背景为使用公开的arXiv论文完成相应的数据分析操作,并且完成具体的可视化分析。

任务描述

论文作者统计,即统计所有论文作者出现频率Top10的姓名。

数据集介绍

数据集来源:数据集链接
数据集的各个特征的含义如下:
在这里插入图片描述
通过以上字段含义信息,可以发现,在本任务中,我们关心的字段有’authors’,‘categories’,以及’authors_parsed’。

具体思路以及代码实现

导入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 open("arxiv-metadata-oai-snapshot.json", 'r') as f: 
    for idx, line in enumerate(f): 
        d = json.loads(line)
        d = {'authors': d['authors'], 'categories': d['categories'], 'authors_parsed': d['authors_parsed']}
        data.append(d)
        
data = pd.DataFrame(data)
data.head() #显示数据的前五行

在这里插入图片描述

数据处理步骤

在原始arxiv数据集中论文作者authors字段是一个字符串格式,其中每个作者使用逗号进行分隔分,所以我们我们首先需要完成以下步骤:

  • 使用逗号对作者进行切分;
  • 剔除单个作者中非常规的字符;

具体操作可以参考以下例子:

C. Bal\\'azs, E. L. Berger, P. M. Nadolsky, C.-P. Yuan

# 切分为,其中\\为转义符

C. Ba'lazs
E. L. Berger
P. M. Nadolsky
C.-P. Yuan

当然在原始数据集中authors_parsed字段已经帮我们处理好了作者信息,可以直接使用该字段完成后续统计。

字符串相关处理

在Python中字符串是最常用的数据类型,字符串可以进行索引切片,以得到我们想要的字符串。
具体语法可以参考以下例子:

var1 = 'Hello Datawhale!'
var2 = "Python Everwhere!"
 
print("var1[-10:]: ", var1[-10:])
print("var2[1:5]: ", var2[0:7])

结果如下:
在这里插入图片描述

数据统计

接下来我们将完成以下统计操作:

  • 统计所有作者姓名出现频率的Top10;
  • 统计所有作者姓(姓名最后一个单词)的出现频率的Top10;
  • 统计所有作者姓第一个字符的频率;

为了节约计算时间,下面选择部分类别下的论文进行处理:

# 选择类别为cs.CV下面的论文
data2 = data[data['categories'].apply(lambda x: 'cs.CV' in x)]

# 拼接所有作者
all_authors = sum(data2['authors_parsed'], [])

处理完成后all_authors变成了所有一个list,其中每个元素为一个作者的姓名。我们首先来完成姓名频率的统计。

# 拼接所有的作者
authors_names = [' '.join(x) for x in all_authors]
authors_names = pd.DataFrame(authors_names)

# 根据作者频率绘制直方图
plt.figure(figsize=(10, 6))
authors_names[0].value_counts().head(10).plot(kind='barh')

# 修改图配置
names = authors_names[0].value_counts().index.values[:10]
_ = plt.yticks(range(0, len(names)), names)
plt.ylabel('Author')
plt.xlabel('Count')

绘制得到的结果:
在这里插入图片描述
接下来统计姓名姓,也就是authors_parsed字段中作者第一个单词:

authors_lastnames = [x[0] for x in all_authors]
authors_lastnames = pd.DataFrame(authors_lastnames)

plt.figure(figsize=(10, 6))
authors_lastnames[0].value_counts().head(10).plot(kind='barh')

names = authors_lastnames[0].value_counts().index.values[:10]
_ = plt.yticks(range(0, len(names)), names)
plt.ylabel('Author')
plt.xlabel('Count')

绘制结果如下:
在这里插入图片描述
接下来统计姓名姓的第一个字符:

authors_lastnames = [x[0][0] for x in all_authors]
authors_lastnames = pd.DataFrame(authors_lastnames)

plt.figure(figsize=(10, 6))
authors_lastnames[0].value_counts().head(10).plot(kind='barh')

names = authors_lastnames[0].value_counts().index.values[:10]
_ = plt.yticks(range(0, len(names)), names)
plt.ylabel('Author')
plt.xlabel('Count')

结果如下:
在这里插入图片描述

总结

本次任务对论文作者进行了相关描述统计,即统计论文数量Top10的作者姓名,以及通过字符串操作,进一步统计论文数量Top10的作者的姓和作者姓的第一个字符的情况。

分类: 科技 关键词: 统计分析系统
原文 投诉 置顶 分享
推荐
快讯
剧透网 展会网 影视投资
游戏运营 营销软件 行业信息

营销 微信营销 QQ营销 网络营销 自媒体营销 产品推广 营销策划 媒体投放 电商营销 抖音营销 科技 大数据 人工智能 统计分析 智能硬件 工业互联网 物联网

版权所有©贵客云    QQ732055019 鲁ICP备08109250号-1

鲁公网安备 37020302371242号