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

Le dernier post # 5 pour les débutants est consacré à la visualisation comparative des données électorales.





Visualisation comparative des données électorales

Considérons maintenant un ensemble de données d'autres élections générales, cette fois en Russie, en 2011. La Russie est un pays beaucoup plus grand, et donc des données beaucoup plus volumineuses sur les électeurs. Pour ce faire, nous chargeons un gros fichier TSV dans la RAM avec des champs de données délimités par des tabulations.





def load_ru():
    '''   '''
    return pd.read_csv('data/ch01/Russia2011.tsv', '\t')
      
      



Voyons quels noms de colonnes sont disponibles dans les données russes:





def ex_1_29():
    '''    
         '''
    return load_ru().columns
      
      



La liste de colonnes suivante sera affichée:





Index([' ', ' №', ' ',
' ,    ',
...
'   ',
'   - -  ',
'  " "',
'     ',
'  "    ""',
'  " "',
'   " "'],
dtype='object')
      
      



Les noms des colonnes de l'ensemble de données russe sont très descriptifs, mais peut-être plus longs que nécessaire. En outre, il serait pratique que les colonnes représentant les mêmes attributs que ceux que nous avons déjà vus dans les données électorales britanniques (par exemple, la part des gagnants et la participation électorale) soient étiquetées de la même manière dans les deux ensembles de données. Renommons-les de manière appropriée.





pandas rename



, . , , :





def load_ru_victors():
    '''   , 
       ,    '''
    new_cols_dict = {
        ' ,    ':'',
        '   ':
                                             ' ',
        '  " "':''      
        }
    newcols = list(new_cols_dict.values())    
    df = load_ru().rename( columns=new_cols_dict )[newcols]  
    df[' '] = df[''] / df[' '
    df['']            = df[' '] / df['']              
    return df 
      
      



pandas divide



, /



, . (nan



) , fill_value



. nan



, . :





 df[ ' ' ] = \
         df[ '' ].divide( df[ ' ' ], \
                                                        fill_value=1 )
      
      



, ( ). , , , :





def ex_1_30():
    '''  
          '''
    load_ru_victors()[''].hist(bins=20)
    plt.xlabel('  ') 
    plt.ylabel('')
    plt.show()
      
      



:





, . , 80% 100% — , .





, (), . :





def ex_1_31():
    '''   
           '''
    qqplot( load_ru_victors()[' '].dropna() )
    plt.show()
      
      



:





, , S- . , . , , .





, , , : 0.5 1.0 , 0.7 1.0. , 100% , ( , ), 1.0 .





, , 100% . .





, . , , , .





, , :





  • , , ,





  • ,





, , .





(), . Probability Mass Function (PMF), , . , , , , , . , , 0 1, ( 1 ), 1.





, . — , . — ( ).





, , 0 1. , , :





def plot_as_pmf(dt, label, ax):
    '''     
       (   )'''
    s   = pd.cut(dt, bins=40, labels=False)      #   40 
    pmf = s.value_counts().sort_index() / len(s) #    
    newax = pmf.plot(label=label, grid=True, ax=ax)   
    return newax
      
      



, :





def ex_1_32():
    '''      ,
             '''
    ax = plot_as_pmf(load_uk_victors()[''], '', None)
    plot_as_pmf(load_ru_victors()[''], '', ax)
    plt.xlabel('  ')   #  
    plt.ylabel('')
    plt.legend(loc='best')
    plt.show()
      
      



:





. , — , (0.6366 0.6523) — 100%. , . , , , , ( ), .





, , , 50% . (Peter Klimek) , .





, , , . , . , , , , - . , , , .





, , .





, , . : , , , . pandas scatter



, plot



.





def ex_1_33():
    '''   
         '''
    df = load_uk_victors()[ ['', ' '] ]
    df.plot.scatter(0, 1, s=3)
    plt.xlabel('')
    plt.ylabel(' ')
    plt.show()
      
      



:





, . — , , , : , , .





, 2010 . : «» . , «» , , . .





, :





def ex_1_34():
    '''     '''
    df = load_ru_victors()[ ['', ' '] ]
    df.plot.scatter(0, 1, s=3)
    plt.xlabel('')
    plt.ylabel(' ')
    plt.show()
      
      



:





, . , , .





, , , . , , , .





-, pandas alpha



scatter 0 1, 1 , 0 — .





def ex_1_35():
    '''   ( )   '''
    df = load_ru_victors()[ ['', ' '] ]
    rows = sp.random.choice(df.index.values, 10000)
    df.loc[rows].plot.scatter(0, 1, s=3, alpha=0.1)
    plt.xlabel('')
    plt.ylabel(' ')
    plt.axis([0, 1.05, 0, 1.05])
    plt.show()
      
      



:





. « » , 100% 100%- . , . , , 2011 . .





. - - , , .





Github. .





. , .





, , . , Python scipy. , pandas, , . .





. - , . , , .








All Articles