Postingan # 3 untuk pemula dikhususkan untuk menghasilkan distribusi, propertinya, dan grafik untuk analisis komparatifnya.
Tukang roti dan Poincaré
Ada sebuah legenda, hampir pasti apokrif, yang memungkinkan untuk mempertimbangkan secara lebih rinci pertanyaan tentang bagaimana teorema batas pusat memungkinkan seseorang untuk bernalar tentang prinsip pembentukan distribusi statistik. Ini menyangkut polymath Prancis abad ke-19 yang terkenal, Henri Poincaré, yang, menurut legenda, menghabiskan satu tahun setiap hari menimbang sepotong roti segar.
Pada saat itu, memanggang diatur oleh negara, dan Poincaré menemukan bahwa meskipun hasil penimbangan roti mematuhi distribusi normal, puncaknya bukan pada 1 kg yang diiklankan secara publik, tetapi pada 950 g. Dia memberi tahu pihak berwenang tentang tukang roti tempat dia biasa membeli roti, dan dia didenda. Ini adalah legenda ;-).
Tahun berikutnya, Poincaré terus menimbang roti dari pembuat roti yang sama. Ia menemukan bahwa mean sekarang 1 kg, tetapi distribusinya tidak lagi simetris disekitar mean. Sekarang telah digeser ke kanan. Ini sesuai dengan fakta bahwa tukang roti itu sekarang hanya memberi Poincaré roti terberatnya. Poincare kembali melaporkan tukang roti itu kepada pihak berwenang dan tukang roti itu didenda untuk kedua kalinya.
Benar-benar ada atau tidak tidak penting di sini; contoh ini hanya berfungsi untuk mengilustrasikan poin kunci - distribusi statistik dari urutan angka dapat memberi tahu kita sesuatu yang penting tentang proses yang membuatnya.
Menghasilkan distribusi
, , 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, » .