Análisis de datos, aprendizaje-frontera académica, análisis de tendencias, tarea 2
Tarea 2: Estadísticas de autores
Para obtener detalles de los datos, consulte la [Tarea 1 de análisis de tendencias de frontera académica de aprendizaje de análisis de datos de Datawhale]. (https://blog.csdn.net/weixin_37700945/article/details/112550261)
2.1 Descripción de las estadísticas de la tarea
- Tema de la tarea: estadísticas de los autores del artículo, los nombres de los 10 principales autores de los artículos utilizados en las estadísticas;
- Contenido de la tarea: estadísticas del autor del artículo, uso de
Pandas
datos leídos y uso de operaciones con cadenas; - Resultado de la tarea:
Pandas
operación de cadena aprendida ;
2.2 Pasos del procesamiento de datos
-
Lectura de datos
Seleccione
authors
(autor),categories
(tipo de artículo),authors_paresd
(información del autor) tres campos para leer; -
Estadísticas
- Cuente las 10 principales frecuencias de aparición de los nombres de todos los autores;
- Top 10 que cuenta la frecuencia de aparición de los apellidos de todos los autores (la última palabra de sus nombres);
- Cuente la frecuencia del primer carácter de los apellidos de todos los autores;
Nota: Debido a la capacidad limitada de mi computadora para procesar una gran cantidad de datos, para mejorar la eficiencia de la práctica, la muestra estadística selecciona la categoría de papel “categories”
como lenguaje de computadora “cs.CL”
.
2.3 Implementación de código específico
2.3.1 Lectura de datos
#导入所需的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 #画图工具
import os
os.chdir("D:\数据分析\Datawhale项目")
data = []
with open("arxiv-metadata-oai-2019.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()
autores | categorias | autores_parsed | |
---|---|---|---|
0 | Sung-Chul Yoon, Philipp Podsiadlowski y Step ... | astro-ph | [[Yoon, Sung-Chul,], [Podsiadlowski, Philipp, ... |
1 | B. Dugmore y PP. Ntumba | matemáticas.AT | [[Dugmore, B.,], [Ntumba, PP.,]] |
2 | TV Zaqarashvili y K Murawski | astro-ph | [[Zaqarashvili, TV,], [Murawski, K,]] |
3 | Sezgin Aygun, Ismail Tarhan, Husnu Baysal | gr-qc | [[Aygun, Sezgin,], [Tarhan, Ismail,], [Baysa ... |
4 | Antonio Pipino (1,3), Thomas H. Puzia (2,4), a... | astro-ph | [[Pipino, Antonio, ], [Puzia, Thomas H., ], [M... |
2.3.2 Estadísticas de datos
Los authors_parsed
campos del conjunto de datos original ya han procesado la información del autor para nosotros, y puede utilizar este campo directamente para completar estadísticas posteriores. Trate todos los nombres de los autores como una lista, donde cada elemento es el nombre de un autor.
Primero, complete las estadísticas de frecuencia de nombres.
#拼接所有作者
data_p = data[data['categories'].apply(lambda x :'cs.CL' in x)]
all_authors = sum(data_p['authors_parsed'],[])
#拼接所有作者
authors_names = [' '.join(x) for x in all_authors]
authors_names = pd.DataFrame(authors_names)
print(authors_names)
0
0 Mokhov Serguei A. for the MARF R&D Group
1 Sinclair Stephen for the MARF R&D Group
2 Clément Ian for the MARF R&D Group
3 Nicolacopoulos Dimitrios for the MARF R&D Group
4 Ferrer-i-Cancho Ramon
... ...
20480 Rodriguez Horacio Universitat Politecnica de ...
20481 Goerz Guenther
20482 Spilker Joerg
20483 Strom Volker
20484 Weber Hans
[20485 rows x 1 columns]
#根据作者频率绘制直方图
plt.figure(figsize = (10,6))
authors_names[0].value_counts().head(10).plot(kind = 'barh')
print(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')
Nakov Preslav 48
Neubig Graham 36
Liu Ting 31
Gao Jianfeng 31
Zhao Hai 28
Gurevych Iryna 27
Liu Zhiyuan 25
Yu Dong 23
Wang William Yang 23
Watanabe Shinji 22
Name: 0, dtype: int64
Text(0.5, 0, 'Count')
A continuación, cuente authors_parsed
la frecuencia de la primera palabra de los apellidos de todos los autores (autores en el campo):
authors_lastnames = [x[0] for x in all_authors]
authors_lastnames = pd.DataFrame(authors_lastnames)
print(authors_names[0].value_counts().head(10))
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')
print(sum(authors_lastnames[0].value_counts().head(10).tolist()))
Wang 529
Zhang 485
Li 427
Liu 426
Chen 337
Huang 191
Wu 181
Zhou 172
Yang 161
Xu 158
Name: 0, dtype: int64
Text(0.5, 0, 'Count')
3067
Finalmente, cuente la frecuencia del primer carácter de los apellidos de todos los autores:
authors_lastnames_FL =[i[0] for i in [y[0] for y in all_authors]] #利用嵌套循环获取作者姓的第一个字符
authors_lastnames_FL = pd.DataFrame(authors_lastnames_FL)
print(authors_lastnames[0].value_counts().head(10))
plt.figure(figsize=(10, 6))
authors_lastnames_FL[0].value_counts().head(10).plot(kind='barh')
lastnames_FL = authors_lastnames_FL[0].value_counts().index.values[:10]
_lastnames_FL = plt.yticks(range(0, len(lastnames_FL)), lastnames_FL)
plt.ylabel('Author')
plt.xlabel('Count')
S 1934
L 1919
C 1444
M 1245
Z 1193
W 1174
H 1115
B 1085
K 1083
G 1046
Name: 0, dtype: int64
Text(0.5, 0, 'Count')
2.3.3 Ejercicio ampliado: agregar etiquetas a los gráficos de barras
Puede usar Python para visualizar la función text ().
matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
Parámetro detallado
x
,y
: escalares donde colocar el textos
: texto de contenido strfontdict
: diccionario, opcional, predeterminado: Ninguno Un dictado que define el formato swithdash
: booleano, opcional, predeterminado: falso. Si es True, cree una instancia de TextWithDash.
Los siguientes son otros parámetros de uso común:
fontsize
Establecer el tamaño de fuente, predeterminado 12, parámetros opcionales ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']fontweight
Establecer el grosor de la fuente, parámetros opcionales ['claro', 'normal', 'medio', 'semibold', 'negrita', 'pesado', 'negro']fontstyle
Configure el tipo de fuente, parámetros opcionales ['normal' | 'cursiva' | 'oblicua'], cursiva cursiva, oblicua oblicuaverticalalignment
Establecer la alineación horizontal, parámetros opcionales: 'centro', 'superior', 'inferior', 'línea de base'horizontalalignment
Establecer la alineación vertical, parámetros opcionales: izquierda, derecha, centrorotation
(Ángulo de rotación) Los parámetros opcionales son: vertical, horizontal también puede ser un númeroalpha
Transparencia, valor de parámetro entre 0 y 1backgroundcolor
Color de fondo del títulobbox
Agregue un marco al título. Los parámetros comunes son los siguientes:boxstyle
Forma de cajafacecolor
(Fc abreviado) color de fondoedgecolor
(Ec abreviado) color de la línea del bordeedgewidth
Tamaño de la línea de borde
Operación específica
Tomemos como ejemplo los datos de los autores de los artículos Top10:
#根据作者频率绘制直方图
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')
counts = name_top10.tolist()#获取各数据横向坐标点
axis_x = list(range(0,10))#获取各数据纵向坐标点
#给图像打标签
for x,y in zip(counts,axis_x_coo):
plt.text(x+0.5,y,x)
2.4 Conclusión del análisis
Mediante el proceso de análisis anterior y la gráfica de barras obtenida, podemos conocer la siguiente información sobre la cs.CL
frecuencia del autor:
- La mayoría de los autores de los artículos Top10 son de ascendencia asiática, incluidos 6 chinos y 1 japonés;
- Solo hay un autor chino entre los tres primeros con la frecuencia más alta, que está en el tercer lugar;
- El autor con mayor frecuencia es Nakov Preslav, con 48 apariciones;
- En las estadísticas de apellidos del autor, los 10 primeros apellidos son todos apellidos chinos, con la mayoría de los apellidos chinos, y los diez primeros apellidos aparecen 3067 veces;
- En las estadísticas de la primera letra del apellido del autor, el número que comienza con S es el más, con 1.934 ocurrencias.