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