Python, science des données et choix: partie 1

La série à 5 publications pour débutants est un remix du premier chapitre d'un livre de 2015 intitulé Clojure for Data Science. L'auteur du livre, Henry Garner, a gentiment accepté d'utiliser les matériaux du livre pour ce remix en utilisant le langage Python.





Le livre a été écrit comme une invitation à la soi-disant «science des données», qui a reçu une forte impulsion ces dernières années en raison de la nécessité de traiter rapidement et en temps opportun de grands ensembles de données localement et dans un environnement distribué.





Le matériel du livre est présenté dans une langue vivante et est présenté dans un style axé sur les tâches, principalement en mettant l'accent sur l'analyse des données à l'aide d'algorithmes et de plates-formes informatiques appropriés, avec des explications courtes et directes fournies en cours de route.





Il est injuste qu'un excellent matériel pédagogique rassemble de la poussière non réclamée simplement parce qu'il est implémenté dans un langage plutôt académique, voire élitiste, comme le langage de programmation fonctionnel Clojure. Par conséquent, il y avait un désir de contribuer leurs cinq kopecks afin de rendre le matériel du livre disponible à un public plus large.





Trois chapitres du livre ont été adaptés pour Python au cours de l'année suivante après la publication du livre, c.-à-d. en 2016. La publication du remix du livre en Fédération de Russie n'a pas fonctionné pour diverses raisons, mais l'une des principales apparaîtra clairement à la fin de cette série d'articles. À la fin du dernier message, vous pouvez voter pour ou contre la prochaine série de messages. En attendant ...





Le message n ° 1 concerne la préparation de l'environnement et des données.





Statistiques

 Il est important non pas qui vote, mais qui compte les votes





- Joseph Staline





, , , . , , , « » « 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 , .





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





Les exemples de code source pour ce poste sont dans mon Github repo .





La partie suivante, la partie 2 , de la série d' articles Python, Data Science et Choices se concentre sur les statistiques descriptives, le regroupement de données et la distribution normale. Toutes ces informations jetteront les bases d'une analyse plus approfondie des données électorales.








All Articles