Python, Data Science und Auswahlmöglichkeiten: Teil 5

Der letzte Beitrag Nr. 5 für Anfänger ist der vergleichenden Visualisierung von Wahldaten gewidmet.





Vergleichende Visualisierung von Wahldaten

Betrachten Sie nun einen Datensatz anderer Parlamentswahlen, diesmal in Russland im Jahr 2011. Russland ist ein viel größeres Land und daher viel umfangreichere Daten zu Wählern. Dazu laden wir eine große TSV-Datei mit tabulatorgetrennten Datenfeldern in den RAM.





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



Mal sehen, welche Spaltennamen in russischen Daten verfügbar sind:





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



Die folgende Liste von Spalten wird angezeigt:





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



Die Spaltennamen im russischen Datensatz sind sehr aussagekräftig, aber möglicherweise länger als nötig. Es wäre auch praktisch, wenn Spalten, die dieselben Attribute darstellen, die wir bereits in den britischen Wahldaten gesehen haben (z. B. Gewinneranteil und Wahlbeteiligung), in beiden Datensätzen auf dieselbe Weise gekennzeichnet wären. Benennen wir sie entsprechend um.





Zusammen mit dem Datensatz rename



erwartet die Pandas-Bibliotheksfunktion ein Wörterbuch, in dem die Schlüssel mit den aktuellen Spaltennamen den Werten mit den neuen Namen zugeordnet werden. Wenn wir dies mit den Daten kombinieren, die wir bereits betrachtet haben, erhalten wir Folgendes:





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