数据特征分析-正太分布
期望值,即在一個離散性隨機變量試驗中每次可能結(jié)果的概率乘以其結(jié)果的總和。
若隨機變量X服從一個數(shù)學(xué)期望為μ、方差為σ^2的正態(tài)分布,記為N(μ,σ^2),其概率密度函數(shù)為正態(tài)分布的期望值μ決定了其位置,其標(biāo)準(zhǔn)差σ決定了分布的幅度。當(dāng)μ = 0、σ = 1時的正態(tài)分布是標(biāo)準(zhǔn)正態(tài)分布。正態(tài)分布的圖示如下:
在實際場景中,數(shù)據(jù)可能不完全符合正態(tài)分布,因此需要對數(shù)據(jù)進(jìn)行檢驗,驗證是否符合正態(tài)分布。
一、通過直方圖初步判斷
df = pd.DataFrame(np.random.randn(1000)+2,columns=['value']) fig,axes = plt.subplots(1,2,figsize = (10,4)) ax1 = axes[0] ax1.scatter(df.index,df.values)ax2 = axes[1] df.hist(bins = 20,alpha = 0.7,ax = ax2) df.plot(kind = 'kde',secondary_y = True,ax = ax2) #使用y軸作為副坐標(biāo)軸?
二、通過qq圖判斷
qq圖通過把測試樣本數(shù)據(jù)的分位數(shù)與已知分布進(jìn)行比較,從而檢驗數(shù)據(jù)的分布情況。
qq圖是一種散點圖,對應(yīng)于正態(tài)分布的qq圖,就是有標(biāo)準(zhǔn)正態(tài)分布的分位數(shù)為橫坐標(biāo)、樣本值為縱坐標(biāo)的散點圖。
參考直線:四分之一分位點和四分之三分位點,看散點是否落在這條線附近。
qq圖繪制思路:
①數(shù)據(jù)清洗后進(jìn)行排序(x(1)<x(2)<...<x(n))
②排序后,計算出每個數(shù)據(jù)對應(yīng)的百分位p(i),即第i個數(shù)據(jù)x(i)為p(i)分位數(shù),其中p(i) = (i-0.5)/n(pi有多種算法,該種最常用)
③繪制直方圖 + qq 圖,直方圖作為參考
# qq圖判斷 df = pd.DataFrame(np.random.randn(1000)+2,columns=['value']) mean = df['value'].mean() std = df['value'].std() print('平均值為%.2f,標(biāo)準(zhǔn)差為%.2f'%(mean,std)) df.sort_values('value',inplace = True) df_r = df.reset_index(drop = False) #t變?yōu)镈ataFrame df_r['p'] = (df_r.index-0.5)/len(df_r) df_r['q'] = (df_r['value']-mean)/std print(df_r.head()) fig,axes = plt.subplots(1,3,figsize = (20,4)) des = df['value'].describe() # x1,y1 = 0.25,des['25%'] # x2,y2 = 0.75,des['75%'] ax1 = axes[0] ax1.scatter(df.index,df['value'])ax2 = axes[1] df['value'].hist(bins = 20,ax = ax2) df['value'].plot(kind='kde',secondary_y = True,ax = ax2)ax3 = axes[2] ax3.plot(df_r['p'],df_r['value'],'b') # ax3.plot([x1,x2],[y1,y2],'r') ax3.plot([0.25,0.75],[des['25%'],des['75%']],'r')?
?
三、k-s檢驗
k-s是比較一個頻率分布f(x)與理論分布g(x)的檢測方法,將樣本數(shù)據(jù)的累計頻率分布與特定的理論分布(比如正態(tài)分布)進(jìn)行比較,如果兩者差距小,則推論樣本分布取自某特定分布。
H0:樣本的總體分布 服從 某特定分布
H1:樣本的總體分布 不服從 某特定分布
f(x):樣本的累計分布函數(shù)
g(x):理論分布的分布函數(shù)
D:f(x)-g(x)的絕對值的最大值,即max(abs(f(x)-g(x)))
根據(jù)D與D(u,a)比較,如果p>0.05則接受H0,p<0.05則拒絕H0接受H1.
from scipy import stats data = np.random.randint(70,80,100) df = pd.DataFrame(data,columns=['value']) u = df['value'].mean() #求均值 std = df['value'].std() #求標(biāo)準(zhǔn)差 stats.kstest(df['value'],'norm',(u,std)) # KstestResult(statistic=0.12748380545258786, pvalue=0.07085249921876394) # 結(jié)果中pvalue=0.07,大于0.05?
k-s檢驗的推導(dǎo)過程
df = pd.DataFrame(data,columns=['value']) u = df['value'].mean() #求均值 std = df['value'].std() #求標(biāo)準(zhǔn)差 print('樣本均值%.2f,標(biāo)準(zhǔn)差%.2f'%(u,std)) s = df['value'].value_counts().sort_index() df_s = pd.DataFrame({'血糖濃度':s.index,'頻數(shù)':s.values}) df_s['累計頻數(shù)'] = df_s['頻數(shù)'].cumsum() df_s['累計頻率'] = df_s['累計頻數(shù)']/df_s['頻數(shù)'].sum() df_s['標(biāo)準(zhǔn)化取值'] = (df_s['血糖濃度'] - u)/std df_s['理論分布'] = [0.0764,0.1314,0.2090,0.3085,0.4247,0.5438,0.6628,0.7673,0.8508,0.9099] #根據(jù)標(biāo)準(zhǔn)化取值查詢正態(tài)分布表得到 df_s['D'] = abs(df_s['累計頻率'] - df_s['理論分布']) dmax = df_s['D'].max() print('實際觀測D值為%.4f'%dmax) df_s['累計頻率'].plot(style = '--r') df_s['理論分布'].plot(style = '--g') plt.legend(loc = 'upper left') #紅色虛線表示累計頻率、綠色虛線表示理論分布的注釋位置 # 樣本均值74.64,標(biāo)準(zhǔn)差3.23 # 實際觀測D值為0.1110根據(jù)D值為0.11,查詢顯著性水平表,可得知p>0.1,即滿足正態(tài)分布。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Forever77/p/11355131.html
總結(jié)
以上是生活随笔為你收集整理的数据特征分析-正太分布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到好多蛇围着自己是什么意思
- 下一篇: 数据特征分析-相关性分析