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

A postagem 3 para iniciantes é dedicada a gerar distribuições, suas propriedades e gráficos para sua análise comparativa.





Baker e Poincaré

Existe uma lenda, quase certamente apócrifa, que permite considerar mais detalhadamente a questão de como o teorema do limite central permite raciocinar sobre o princípio da formação das distribuições estatísticas. Trata-se do renomado polímata francês do século XIX, Henri Poincaré, que, segundo a lenda, passava um ano todos os dias pesando um pão fresco.





Naquela época, a panificação era regulamentada pelo Estado, e Poincaré constatou que embora os resultados da pesagem dos pães obedecessem a uma distribuição normal, o pico não era de 1 kg publicamente anunciado, mas de 950 g. Ele informou às autoridades sobre o padeiro de quem comprava pão regularmente e foi multado. Esta é a legenda ;-).





No ano seguinte, Poincaré continuou pesando pães do mesmo padeiro. Ele descobriu que a média agora era de 1 kg, mas a distribuição não era mais simétrica em torno da média. Agora foi deslocado para a direita. Isso era consistente com o fato de que o padeiro agora estava dando a Poincaré apenas os pães mais pesados. Poincaré denunciou o padeiro novamente às autoridades e o padeiro foi multado pela segunda vez.





Se realmente foi ou não, não é importante aqui; este exemplo serve apenas para ilustrar um ponto-chave - a distribuição estatística de uma sequência de números pode nos dizer algo importante sobre o processo que a criou.





Gerando distribuições

, , stats.norm.rvs. (rvs . normal variates, .. ). 1000, 1 . , 30.





def honest_baker(mu, sigma):
    '''  '''
    return pd.Series( stats.norm.rvs(loc, scale, size=10000) )

def ex_1_18():
    '''    '''
    honest_baker(1000, 30).hist(bins=25)
    plt.xlabel(' ') 
    plt.ylabel('')
    plt.show()
      
      



, :





, . ( « ») :





def dishonest_baker(mu, sigma):
    '''  '''
    xs = stats.norm.rvs(loc, scale, size=10000) 
    return pd.Series( map(max, bootstrap(xs, 13)) )       

def ex_1_19():
    '''    '''
    dishonest_baker(950, 30).hist(bins=25)
    plt.xlabel(' ') 
    plt.ylabel('')
    plt.show()
      
      



, :





, , , . - 1 , . , .





. , , , . , , , .





Assimetrias positivas e negativas

pandas skew



:





def ex_1_20():
    '''    '''
    s = dishonest_baker(950, 30)
    return { ''   : s.mean(), 
             ''   : s.median(), 
             '': s.skew() }
      
      



{'': 0.4202176889083849,
 '': 998.7670301469957,
 '': 1000.059263920949}
      
      



, 0.4. , .





. , quantile



0 1 . 0.5- .





, . , -, Q-Q, . Q-Q plot. . , , . , .





. qqplot



, :





def qqplot( xs ):
    '''  ( -, Q-Q plot)'''
    d = {0:sorted(stats.norm.rvs(loc=0, scale=1, size=len(xs))),
         1:sorted(xs)}
    pd.DataFrame(d).plot.scatter(0, 1, s=5, grid=True)
    df.plot.scatter(0, 1, s=5, grid=True)
    plt.xlabel('   ')
    plt.ylabel(' ')
    plt.title (' ', fontweight='semibold')

def ex_1_21():
    '''   
           '''
    qqplot( honest_baker(1000, 30) )
    plt.show()
    qqplot( dishonest_baker(950, 30) )
    plt.show()
      
      



:





. :





, , , ; . , :





: , , , , ,





. ( ) .





() . , . , , .





, « », — , . :





def ex_1_22():
    '''  
            '''
    d = {' '  :honest_baker(1000, 30),
         ' ':dishonest_baker(950, 30)} 
    pd.DataFrame(d).boxplot(sym='o', whis=1.95, showmeans=True)
    plt.ylabel('  (.)')
    plt.show()
      
      



:





. — . — . , , . , .





. . , .





(), , . Cumulative Distribution Function (CDF), , , , x. , 0 1, 0 — , 1 — . , , . , 6?





5/6. , , ,  1/6. — 50%.





, — , . , , , .





— . 0.5- 1000, 1000 0.5.





, pandas quantile



, empirical_cdf



0 1. , .. ( ) , , , , .





— , .





. pandas plot



, — — , . plot



, x y . pandas DataFrame



.





, plot



. pandas , . plot



, (ax



) plot



, (ax=ax



). . , . , (tp[1]



tp[3]



) , :





def empirical_cdf(x):
    '''    x'''
    sx  = sorted(x)
    return pd.DataFrame( {0: sx, 1:sp.arange(len(sx))/len(sx)} )

def ex_1_23():
    '''   
            '''
    df  = empirical_cdf(honest_baker(1000, 30))
    df2 = empirical_cdf(dishonest_baker(950, 30))
    ax  = df.plot(0, 1, label=' ')    
    df2.plot(0, 1, label=' ', grid=True, ax=ax)    
    plt.xlabel(' ')
    plt.ylabel('')
    plt.legend(loc='best')
    plt.show()
      
      



:





, -, , . , 0.5, 1000 . , .





Github. .





, 4, «Python, » .








All Articles