Análisis de datos y análisis de tendencias de la frontera académica de aprendizaje, tarea 2 (estadísticas de los autores de artículos)

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 Pandasdatos leídos y uso de operaciones con cadenas;
  • Resultado de la tarea: Pandasoperación de cadena aprendida ;

2.2 Pasos del procesamiento de datos

  1. Lectura de datos

    Seleccione authors(autor), categories(tipo de artículo), authors_paresd(información del autor) tres campos para leer;

  2. 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_parsedcampos 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')

La frecuencia de aparición de los nombres de los autores de artículos en lenguaje informático en 2019 es Top 10


A continuación, cuente authors_parsedla 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')

Los 10 apellidos del autor de artículos en lenguaje informático más utilizados en 2019

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')

Las 10 primeras letras más frecuentes del apellido del autor en artículos en lenguaje informático en 2019

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

  1. x, y: escalares donde colocar el texto
  2. s : texto de contenido str
  3. fontdict : diccionario, opcional, predeterminado: Ninguno Un dictado que define el formato s
  4. withdash: booleano, opcional, predeterminado: falso. Si es True, cree una instancia de TextWithDash.

Los siguientes son otros parámetros de uso común:

  1. fontsizeEstablecer el tamaño de fuente, predeterminado 12, parámetros opcionales ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']
  2. fontweightEstablecer el grosor de la fuente, parámetros opcionales ['claro', 'normal', 'medio', 'semibold', 'negrita', 'pesado', 'negro']
  3. fontstyleConfigure el tipo de fuente, parámetros opcionales ['normal' | 'cursiva' | 'oblicua'], cursiva cursiva, oblicua oblicua
  4. verticalalignmentEstablecer la alineación horizontal, parámetros opcionales: 'centro', 'superior', 'inferior', 'línea de base'
  5. horizontalalignmentEstablecer la alineación vertical, parámetros opcionales: izquierda, derecha, centro
  6. rotation(Ángulo de rotación) Los parámetros opcionales son: vertical, horizontal también puede ser un número
  7. alphaTransparencia, valor de parámetro entre 0 y 1
  8. backgroundcolorColor de fondo del título
  9. bboxAgregue un marco al título. Los parámetros comunes son los siguientes:
    1. boxstyleForma de caja
    2. facecolor(Fc abreviado) color de fondo
    3. edgecolor(Ec abreviado) color de la línea del borde
    4. edgewidthTamañ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)

Inserte la descripción de la imagen aquí

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.CLfrecuencia 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.

Supongo que te gusta

Origin blog.csdn.net/weixin_37700945/article/details/112689416
Recomendado
Clasificación