Python, ciencia de datos y elecciones: parte 1

La serie de 5 publicaciones para principiantes es una remezcla del primer capítulo de un libro de 2015 llamado Clojure for Data Science. El autor del libro, Henry Garner, ha aceptado amablemente utilizar los materiales del libro para esta remezcla utilizando el lenguaje Python.





El libro fue escrito como una invitación a la llamada "ciencia de datos", que ha recibido un fuerte impulso en los últimos años debido a la necesidad de un procesamiento rápido y oportuno de grandes conjuntos de datos a nivel local y en un entorno distribuido.





El material del libro se presenta en un lenguaje vivo y se presenta en un estilo orientado a tareas, principalmente con énfasis en el análisis de datos utilizando algoritmos y plataformas informáticas apropiados, con explicaciones breves y directas proporcionadas a lo largo del camino.





Es injusto cuando un excelente material educativo acumula polvo sin reclamar simplemente por el hecho de que está implementado en un lenguaje bastante académico, si no de élite, como el lenguaje de programación funcional Clojure. Por lo tanto, se deseaba contribuir con sus cinco kopeks para que el material del libro estuviera disponible para un público más amplio.





Tres capítulos del libro se adaptaron para Python durante el año siguiente después de la publicación del libro, es decir, en 2016. La publicación de la remezcla del libro en la Federación de Rusia no funcionó por varias razones, pero una de las principales quedará clara al final de esta serie de publicaciones. Al final de la publicación final, puede votar a favor o en contra de la siguiente serie de publicaciones. Mientras tanto ...





La publicación n. ° 1 trata sobre la preparación del entorno y los datos.





Estadísticas

 Es importante no quién vota, sino quién cuenta los votos.





- Joseph Stalin





, , , . , , , « » « 80/20». . : .





, Python- pandas. , , , numpy . — 2010 . 2011 . — , .





SciPy: SciPy - , pandas , , NumPy .





. SciPy , NumPy , pandas -, - . R Python, REPL, . , .





. - , , :





import numpy as np
import scipy as sp
import pandas as pd
      
      



, Python . , , random , collections , Counter.





pandas , DataFrame



, .. , , . , pandas , . , , . pandas , , , , :





  • (.csv) (.tsv), read_csv







  • Excel (, .xls .xlsx), read_excel







  • ( , -, , JSON-, HTML- . .)





– Series, .. . , , .





Excel, read_excel



. — — , . . . , :





pd.read_excel('data/ch01/UK2010.xls')
      
      



, . load_uk



:





def load_uk():
    '''   '''
    return pd.read_excel('data/ch01/UK2010.xls') 
      
      



DataFrame



pandas, . , .





UK2010.xls . pandas read_excel



. — columns , (.



):





def ex_1_1():
    '''    '''
    return load_uk().columns
      
      



pandas:





Index(['Press Association Reference', 'Constituency Name', 'Region',
       'Election Year', 'Electorate', 'Votes', 'AC', 'AD', 'AGS', 'APNI',
       ...
       'UKIP', 'UPS', 'UV', 'VCCA', 'Vote', 'Wessex Reg', 'WRP', 'You',
       'Youth', 'YRDPL'],
       dtype='object', length=144)
      
      



, 144 . ; :





  • : , ( )





  • : ,





  • : ,





  • : ,





  • : ,





  • :





, , , . . , , 2010 ., Election Year.





pandas () () . , . :





def ex_1_2():
    '''   " "'''
    return load_uk()['Election Year']
      
      



:





0      2010.0
1      2010.0
2      2010.0
...
646    2010.0
647    2010.0
648    2010.0
649    2010.0
650       NaN
Name: Election Year, dtype: float64
      
      



. , . , , , unique . pandas , , Python. :





def ex_1_3():
    '''    " "  '''
    return load_uk()['Election Year'].unique()
      
      



[ 2010.    nan]
      
      



2010 , 2010 . , nan, . not a number, .. , , .





, , , , . Counter



Python collections



. , , .. :





def ex_1_4():
    '''    " " 
       (   )'''
    return Counter( load_uk()['Election Year'] )
      
      



Counter({nan: 1, 2010.0: 650}) 
      
      



, , 2010 . 650 . , , . , , nan , . , , .





, 80% . .





nan , . , pandas , . pandas.





pandas, , . , . , , :





def ex_1_5():
    '''    " " 
           (  )'''
    df = load_uk()
    return df[ df['Election Year'].isnull() ]
      
      



 









Press Association Reference





Constituency Name





Region





Election Year





Electorate





Votes





AC





AD





AGS





...





650





NaN





NaN





NaN





NaN





NaN





29687604





NaN





NaN





NaN





...





dt['Election Year'].isnull()



, , , False



, . SQL, , WHERE



.





ex_1_5, , ( ) NaN



. , Excel. . notnull()



, , NaN



:





    df = load_uk()
    return df[ df[ 'Election Year' ].notnull() ]
      
      



. , load_uk_scrubbed



:





def load_uk_scrubbed():
    '''     '''
    df = load_uk()
    return df[ df[ 'Election Year' ].notnull() ]
      
      



, : load_uk



load_uk_scrubbed



. 650 , .





, . — — , . , , , , , .





Los ejemplos de código fuente para esta publicación están en mi repositorio de Github.





La siguiente parte, la Parte 2 , de la serie de publicaciones Python, Data Science y Choices se centra en las estadísticas descriptivas, la agrupación de datos y la distribución normal. Toda esta información sentará las bases para un mayor análisis de los datos electorales.








All Articles