Python, ciência de dados e escolhas: parte 5

O último post # 5 para iniciantes é dedicado à visualização comparativa de dados eleitorais.





Visualização comparativa de dados eleitorais

Agora considere um conjunto de dados de outras eleições gerais, desta vez na Rússia, em 2011. A Rússia é um país muito maior e, portanto, dados muito mais volumosos sobre os eleitores. Para fazer isso, carregamos um grande arquivo TSV na RAM com campos de dados delimitados por tabulação.





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



Vamos ver quais nomes de coluna estão disponíveis nos dados russos:





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



A seguinte lista de colunas será exibida:





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



Os nomes das colunas no conjunto de dados russo são muito descritivos, mas talvez mais longos do que o necessário. Além disso, seria conveniente se as colunas que representassem os mesmos atributos que já vimos nos dados eleitorais do Reino Unido (por exemplo, parcela do vencedor e participação eleitoral) fossem rotuladas da mesma maneira em ambos os conjuntos de dados. Vamos renomeá-los apropriadamente.





Junto com o conjunto de dados, a função da biblioteca do pandas rename



espera um dicionário no qual as chaves com os nomes das colunas atuais sejam mapeadas para os valores com os novos nomes. Se combinarmos isso com os dados que já examinamos, teremos o seguinte:





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