Datawhale数据分析之学术前沿分析学习笔记(二)


一、任务

1.统计所有论⽂作者出现频率Top10的姓名
2.统计所有论⽂作者姓氏出现频率Top10的姓名

二、使用步骤

1.引入库

# 导入所需的package
import seaborn as sns #用于画图
#from bs4 import BeautifulSoup #用于爬取arxiv的数据
import json #读取数据,我们的数据为json格式的
import pandas as pd #数据处理,数据分析
import matplotlib.pyplot as plt #画图工具

2.读入数据

代码如下(示例):

# 画图能正常显示中文
plt.rcParams['font.sans-serif'] = [u'SimHei']

plt.rcParams['axes.unicode_minus'] = False

data = []

with open('arxiv-metadata-oai-snapshot.json','r') as f:
    for idx,line in enumerate(f):
        if idx > 5000:
            break
        d = json.loads(line)
        d = {'authors': d['authors'],
        'categories': d['categories'],
        'authors_parsed': d['authors_parsed'],}
        data.append(d)

data = pd.DataFrame(data)

读取jaso数据,只选择重点字段做分析

3.数据预处理

all_authors = sum(data['authors_parsed'], []) #把嵌套list转化为list
authors_names =[]
for x in all_authors:
    b = ' '.join(x) #用' '作为分隔符连接字符串数组
    authors_names.append(b)

4.数据统计

# 作者姓名统计
names = authors_names[0].value_counts().index.values[:10]
num_= authors_names[0].value_counts().values[0:10]
# 作者姓氏统计
authors_lastnames = [x[0] for x in all_authors]
authors_lastnames = pd.DataFrame(authors_lastnames)
lastnames = authors_lastnames[0].value_counts().index.values[:10]
lastnames_num_= authors_lastnames[0].value_counts().values[0:10]

5.绘图展示

plt.figure(figsize=(8,8), dpi=80)
plt.figure(1)

ax1 = plt.subplot(221)
ax1.barh(names,num_, color="b")
y1_ticks=range(0, len(names))
_ = ax1.set_yticks(y1_ticks)
# _ = ax1.yticks(range(0, len(names)), names)
ax1.set_xticks([])
for y_1, x_1 in enumerate(num_):
    ax1.text(x_1+0.2, y_1-0.2, "%s" %x_1) # 数据打标签
ax1.set_ylabel('Author')
#ax1.grid(axis='x',linestyle='--', alpha=0.8) #添加网格线
ax1.set_title('作者出现评率Top10的姓名')

ax2 = plt.subplot(222)
ax2.barh(lastnames,lastnames_num_,color="g")
y2_ticks=range(0, len(lastnames))
_ = ax2.set_yticks(y2_ticks)
# _ = ax2.yticks(range(0, len(lastnames)), lastnames)
ax2.set_xticks([])
for y_2, x_2 in enumerate(lastnames_num_):
    ax2.text(x_2+0.2, y_2-0.2, "%s" %x_2) # 数据打标签
ax2.set_ylabel('Author')
ax2.set_title('作者姓氏出现评率Top10的姓名')
plt.show()

排名效果展示
从姓氏看出华人居多


总结

这次任务继续对pandas使用加以熟练,其中有几个用法值得记录:
1、利用sum(data[‘authors_parsed’], [])把嵌套list转成list的用法,非常方便
2、 ’ ‘.join(x),利用’ '作为分隔符连接字符串数组
3、给图标数据打标签,非常实用

PS:第二次打卡完成,坚持,爱上学习爱上写博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值