任务说明
- 任务主题:论文作者统计,统计所有论文作者出现评率Top10的姓名;
- 任务内容:论文作者的统计、使用 Pandas -取数据并使用字符串操作;
- 任务成果:学习 Pandas 的字符串操作;
数据处理步骤
在原始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
字符串处理
Python中字符串是最常用的数据类型,使用 **’ 或 " 来创建字符串,[]截取字符串 **。
var1 = 'Hello Datawhale!'
var2 = "Python Everwhere!"
print("var1[-10:] \: ",var1[-10:])
print("var2[0:7]: ",var2[:7])
转义字符
符号 | 含义 |
---|---|
\ | 反斜杠符号 |
’ | 单引号 |
" | 双引号 |
\n | 换行符 |
\t | 制表符 |
一些内置函数
方法 | 含义 |
---|---|
string.capitalize() | 把字符串的第一个个字符大写 |
string.isaipha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
string.title() | 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
string.upper() | 转换 string 中的字母为大写 |
string.lower() | 转换 string 中的字母为小写 |
string.istitle() | 判断字符串是否"标题化" |
string.isupper() | 判断 string 中的字母是否均大写 |
string.islower() | 判断 string 中的字母是否均小写 |
sum 函数展开二层嵌套列表将子元素合并1
★将嵌套列表中的 子元素 合并,可以用sum函数,第二个参数传入一个空列表[]即可
注意:sum函数的参数包括两个(iterable可迭代对象,start求和的初始值),sum会把可迭代对象内的元素加在start参数传入的初始值上。
因此,如果初始值是个列表,那么可迭代对象也必须要是个列表,且必须是嵌套列表,因为只有这个列表元素也是列表时,这些元素才能跟初始值列表相加
如:
data2['authors_parsed'][:7]
531 [[Pal, Mahesh, ]]
1408 [[Mokhov, Serguei A., , for the MARF R&D Group...
3231 [[Aholt, Chris, ], [Sturmfels, Bernd, ], [Thom...
Name: authors_parsed, dtype: object
sum(data2['authors_parsed'][:7],[])
[['Pal', 'Mahesh', ''],
['Mokhov', 'Serguei A.', '', 'for the MARF R&D Group'],
['Sinclair', 'Stephen', '', 'for the MARF R&D Group'],
['Clément', 'Ian', '', 'for the MARF R&D Group'],
['Nicolacopoulos', 'Dimitrios', '', 'for the MARF R&D Group'],
['Aholt', 'Chris', ''],
['Sturmfels', 'Bernd', ''],
['Thomas', 'Rekha', '']]
data2['authors_parsed']
是可迭代对象,sum
函数将data2['authors_parsed']
的子元素进行合并。
join函数
函数:string.join() 具体作用如下:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。
如:
print('join前:',all_authors[:3])
# 拼接
authors_names = [' '.join(x) for x in all_authors[:3]]
print('\njoin后:',authors_names)
join前: [['Pal', 'Mahesh', ''], ['Mokhov', 'Serguei A.', '', 'for the MARF R&D Group'], ['Sinclair', 'Stephen', '', 'for the MARF R&D Group']]
join后: ['Pal Mahesh ', 'Mokhov Serguei A. for the MARF R&D Group', 'Sinclair Stephen for the MARF R&D Group']
value_counts函数
pandas包的内置函数,根据value进行计数
画图
- 设置图的大小
plt.figure(figsize=(10, 6))
- 设置坐标刻度
names = authors_names[0].value_counts().index.values[:10]
plt.yticks(range(0, len(names)), names)
- 设置坐标轴名称
plt.ylabel('Author')
plt.xlabel('Count')
- 画图
authors_names[0].value_counts().head(10).plot(kind='barh')
- 结果
https://www.cnblogs.com/oceanicstar/p/9517159.html ↩︎