一、任务
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:第二次打卡完成,坚持,爱上学习爱上写博客