利用觀測資料判斷總體是否服從正態分佈的檢驗稱為正態性檢驗,它是統計判決中重要的一種特殊的擬合優度假設檢驗。
直方圖初判 / qq圖判斷 / k-s檢驗
#直方圖初判
s = pd.dataframe(np.random.randn(1000)+10,columns = ['
value'])
(s.head())
#建立隨機資料
fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1) #
建立子圖1
ax1.scatter(s.index, s.values)
plt.grid()
#繪製資料分布圖
ax2 = fig.add_subplot(2,1,2) #
建立子圖2
s.hist(bins=30,alpha = 0.5,ax =ax2)
s.plot(kind = '
kde', secondary_y=true,ax =ax2)
plt.grid()
#繪製直方圖
#呈現較明顯的正太性
#qq圖判斷
#qq圖通過把測試樣本資料的分位數與已知分布相比較,從而來檢驗資料的分布情況
#qq圖是一種散點圖,對應於正態分佈的qq圖,就是由標準正態分佈的分位數為橫座標,樣本值為縱座標的散點圖##
繪製思路
#① 在做好資料清洗後,對資料進行排序(次序統計量:x(1)#
② 排序後,計算出每個資料對應的百分位p,即第i個資料x(i)為p(i)分位數,其中p(i)=(i-0.5)/n (pi有多重演算法,這裡以最常用方法為主)
#③ 繪製直方圖 + qq圖,直方圖作為參考
s = pd.dataframe(np.random.randn(1000)+10,columns = ['
value'])
(s.head())
#建立隨機資料
mean = s['
value
'].mean()
std = s['
value
'].std()
print('
均值為:%.2f,標準差為:%.2f
' %(mean,std))
print('
------')
#計算均值,標準差
s.sort_values(by = '
value
', inplace = true) #
重新排序
s_r = s.reset_index(drop = false) #
重新排序後,更新index
s_r['
p'] = (s_r.index - 0.5) /len(s_r)
s_r['q
'] = (s_r['
value
'] - mean) /std
(s_r.head())
print('
------')
#計算百分位數 p(i)
#計算q值
st = s['
value
'].describe()
x1 ,y1 = 0.25, st['
25%'
]x2 ,y2 = 0.75, st['
75%'
]print('
四分之一位數為:%.2f,四分之三位數為:%.2f
' %(y1,y2))
print('
------')
#計算四分之一位數、四分之三位數
fig = plt.figure(figsize = (10,9))
ax1 = fig.add_subplot(3,1,1) #
建立子圖1
ax1.scatter(s.index, s.values)
plt.grid()
#繪製資料分布圖
ax2 = fig.add_subplot(3,1,2) #
建立子圖2
s.hist(bins=30,alpha = 0.5,ax =ax2)
s.plot(kind = '
kde', secondary_y=true,ax =ax2)
plt.grid()
#繪製直方圖
ax3 = fig.add_subplot(3,1,3) #
建立子圖3
ax3.plot(s_r['
p'],s_r['
value
'],'
k.',alpha = 0.1)
ax3.plot([x1,x2],[y1,y2],'-r
')plt.grid()
#繪製qq圖,直線為四分之一位數、四分之三位數的連線,基本符合正態分佈
#ks檢驗,理論推導
data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
76,80,81,75,77,72,81,72,84,86,80,68,77,87,
76,77,78,92,75,80,78]
#樣本資料,35位健康男性在未進食之前的血糖濃度
df = pd.dataframe(data, columns =['
value'])
u = df['
value
'].mean()
std = df['
value
'].std()
print("
樣本均值為:%.2f,樣本標準差為:%.2f
" %(u,std))
print('
------')
#檢視資料基本統計量
s = df['
value
'].value_counts().sort_index()
df_s = pd.dataframe()
#建立頻率資料
df_s[
'累計次數
'] = df_s['次數'
].cumsum()
df_s[
'累計頻率
'] = df_s['
累計次數
'] /len(data)
df_s[
'標準化取值
'] = (df_s['
血糖濃度
'] - u) /std
df_s[
'理論分布
'] =[0.0244,0.0968,0.2148,0.2643,0.3228,0.3859,0.5160,0.5832,0.7611,0.8531,0.8888,0.9803] #
通過查閱正太分布表
df_s['
d'] = np.abs(df_s['
累計頻率
'] - df_s['
理論分布'])
dmax = df_s['d'
].max()
print("
實際觀測d值為:%.4f
" %dmax)
#d值序列計算結果**
df_s[
'累計頻率
'].plot(style = '
--k.')
df_s[
'理論分布
'].plot(style = '
--r.')
plt.legend(loc = '
upper left')
plt.grid()
#密度圖表示
df_s
#直接用演算法做ks檢驗
from scipy import
stats
#scipy包是乙個高階的科學計算庫,它和numpy聯絡很密切,scipy一般都是操控numpy陣列來進行科學計算
data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
76,80,81,75,77,72,81,72,84,86,80,68,77,87,
76,77,78,92,75,80,78]
#樣本資料,35位健康男性在未進食之前的血糖濃度
df = pd.dataframe(data, columns =['
value'])
u = df['
value
'].mean() #
計算均值
std = df['
value
'].std() #
計算標準差
stats.kstest(df['
value
'], '
norm
', (u, std))
#.kstest方法:ks檢驗,引數分別是:待檢驗的資料,檢驗方法(這裡設定成norm正態分佈),均值與標準差
#結果返回兩個值:statistic → d值,pvalue → p值
#p值大於0.05,為正態分佈
資料特徵分析 概述
一 6個基礎分析思路 1 分布分析 2 對比分析 3 統計分析 4 帕累託分析 5 正態性檢驗 6 相關性分析 二 分布分析 分布分析 研究資料的分布特徵和分布型別,分定量資料 定性資料區分基本統計量。三 對比分析 對比分析 兩個互相聯絡的指標進行比較 四 統計分析 統計分析 統計指針對定量資料進行...
資料探索 資料特徵分析
對於資料的特徵分析是十分重要的,可以讓我們更加的了解資料的資訊,在下一步的資料分析 資料建模能幫助我們做出更好的決策。同時能給我們在解決問題上提供靈感。資料特徵分析可以分為如下幾類 1.分布分析 2對比分析 3.統計量分析 4.週期性分析 5.貢獻度分析 6.相關度分析 下面我就來大致介紹一下上面六...
資料探索 資料特徵分析
對於資料的特徵分析是十分重要的,可以讓我們更加的了解資料的資訊,在下一步的資料分析 資料建模能幫助我們做出更好的決策。同時能給我們在解決問題上提供靈感。資料特徵分析可以分為如下幾類 1.分布分析 2對比分析 3.統計量分析 4.週期性分析 5.貢獻度分析 6.相關度分析 下面我就來大致介紹一下上面六...