Spanish Wikipedia Heading Frequency

This notebook serves to sort Spanish Wikipedia section headers by frequency as related to this research project.

Part 1

import pandas as pd
import numpy as np
# read in headers file by chunks of 100000 to conserve memory
# https://stackoverflow.com/questions/25962114/how-to-read-a-6-gb-csv-file-with-pandas
tp = pd.read_csv('eswiki_20161101_headings.tsv', sep='\t', header=0, dtype={'page_id': np.int32, 'page_title': object, 'page_ns': np.int16, 'heading_level': np.int8, 'heading_text': object}, iterator=True, chunksize=100000)
# concatenate all rows into a pandas dataframe 
es_DF = pd.concat([chunk for chunk in tp])
es_DF.head()
page_id page_title page_ns heading_level heading_text
0 7 Andorra 0 2 Toponimia
1 7 Andorra 0 2 Símbolos
2 7 Andorra 0 3 Escudo
3 7 Andorra 0 3 Bandera
4 7 Andorra 0 3 Himno
# remove leading and trailing whitespace from heading_text column
es_DF['heading_text'] = pd.core.strings.str_strip(es_DF['heading_text'])
# write this dataframe to a tsv and restart kernel to free up memory
es_DF.to_csv('eswiki_20161101_headings_noWS.tsv', sep='\t')

Part 2

# read in headings w/o whitespace
tp2 = pd.read_csv('eswiki_20161101_headings_noWS.tsv', sep='\t', header=0, dtype={'page_id': np.int32, 'page_title': object, 'page_ns': np.int16, 'heading_level': np.int8, 'heading_text': object}, iterator=True, chunksize=100000)
es_DF2 = pd.concat([chunk for chunk in tp2])
es_DF2.head()
Unnamed: 0 page_id page_title page_ns heading_level heading_text
0 0 7 Andorra 0 2 Toponimia
1 1 7 Andorra 0 2 Símbolos
2 2 7 Andorra 0 3 Escudo
3 3 7 Andorra 0 3 Bandera
4 4 7 Andorra 0 3 Himno
# drop column 0 (index from previous df)
es_DF2.drop('Unnamed: 0', axis=1, inplace=True)
es_DF2.head()
page_id page_title page_ns heading_level heading_text
0 7 Andorra 0 2 Toponimia
1 7 Andorra 0 2 Símbolos
2 7 Andorra 0 3 Escudo
3 7 Andorra 0 3 Bandera
4 7 Andorra 0 3 Himno
# groupby heading_text and count the number of unique page_titles each heading appears in
# sort in descending order
# this returns a pandas series object
article_count = es_DF2.groupby('heading_text')['page_title'].apply(lambda x: len(x.unique())).sort_values(ascending=False)
# turn pandas series into pandas dataframe
es_article_count_DF = pd.DataFrame({'section_title':article_count.index, 'number_of_articles':article_count.values})
# add a column for the percentage of articles that header appears in
es_article_count_DF['article_percentage'] = (es_article_count_DF['number_of_articles']/1250207)*100
# set pandas options to display 100 rows
# round percentage to 2 decimal places and show top 100 results
pd.options.display.max_rows = 100
es_article_count_DF.round({'article_percentage': 2}).head(100)
number_of_articles section_title article_percentage
0 832356 Referencias 66.58
1 710186 Enlaces externos 56.81
2 273686 Véase también 21.89
3 143671 Bibliografía 11.49
4 133542 Historia 10.68
5 114151 Demografía 9.13
6 95259 Biografía 7.62
7 82735 Geografía 6.62
8 54006 Distribución geográfica 4.32
9 42439 Notas 3.39
10 39687 Descripción 3.17
11 31863 Palmarés 2.55
12 30381 Clubes 2.43
13 29044 Taxonomía 2.32
14 24475 Trayectoria 1.96
15 23951 Discografía 1.92
16 21204 Filmografía 1.70
17 20906 Lista de canciones 1.67
18 19805 Carrera 1.58
19 19619 Argumento 1.57
20 18345 Características 1.47
21 17713 Morfología 1.42
22 16471 Hábitat 1.32
23 15416 Obras 1.23
24 14505 Premios 1.16
25 14063 Notas y referencias 1.12
26 13418 Reparto 1.07
27 13174 Sinopsis 1.05
28 12120 Economía 0.97
29 11845 Especies 0.95
30 11359 Obra 0.91
31 11118 Fuentes 0.89
32 10966 Selección nacional 0.88
33 10549 Clasificación 0.84
34 10508 Resultados 0.84
35 9846 Antecedentes 0.79
36 9634 Palmarés internacional 0.77
37 9612 Distribución y hábitat 0.77
38 8987 Televisión 0.72
39 8667 Campeonatos nacionales 0.69
40 8590 Personajes 0.69
41 8045 Clima 0.64
42 7939 Recepción 0.64
43 7914 Distribución 0.63
44 7893 Producción 0.63
45 7882 Galería 0.63
46 7874 Estadísticas 0.63
47 7576 Población 0.61
48 7550 Primeros años 0.60
49 7202 Evolución demográfica 0.58
50 6918 Ubicación 0.55
51 6498 Vida personal 0.52
52 6464 Toponimia 0.52
53 6425 Personal 0.51
54 6163 Teatro 0.49
55 6135 Curiosidades 0.49
56 6128 Premios y nominaciones 0.49
57 6058 Cine 0.48
58 5926 Libros 0.47
59 5885 Honores 0.47
60 5800 Educación 0.46
61 5701 Algunas publicaciones 0.46
62 5574 Etimología 0.45
63 5404 Sencillos 0.43
64 5398 Composición 0.43
65 5164 Publicaciones 0.41
66 5152 Películas 0.41
67 5142 Cultura 0.41
68 5124 Elenco 0.41
69 5080 Música 0.41
70 5024 Miembros 0.40
71 4986 Créditos 0.40
72 4954 Desarrollo 0.40
73 4954 Localización 0.40
74 4752 Final 0.38
75 4742 Designación y nombre 0.38
76 4669 Jugadores 0.37
77 4665 Equipos 0.37
78 4629 Fiestas 0.37
79 4603 Trayectoria deportiva 0.37
80 4594 Inicios 0.37
81 4291 Álbumes 0.34
82 4231 Vida 0.34
83 4151 Reproducción 0.33
84 4149 Servicios 0.33
85 4110 Transporte 0.33
86 4035 Origen 0.32
87 3962 Turismo 0.32
88 3927 Usos 0.31
89 3918 Administración 0.31
90 3885 Universidad 0.31
91 3856 Equipos participantes 0.31
92 3831 Trama 0.31
93 3822 Alimentación 0.31
94 3739 Profesional 0.30
95 3727 Participaciones en Copas del Mundo 0.30
96 3685 Muerte 0.29
97 3684 Referencia 0.29
98 3621 Temporada regular 0.29
99 3476 Lugares de interés 0.28