資料特徵分析(5) 正太性檢驗

2022-05-05 09:42:10 字數 4570 閱讀 2574

利用觀測資料判斷總體是否服從正態分佈的檢驗稱為正態性檢驗,它是統計判決中重要的一種特殊的擬合優度假設檢驗。

直方圖初判 / qq圖判斷 / k-s檢驗

#

直方圖初判

s = pd.dataframe(np.random.randn(1000)+10,columns = ['

value'])

print

(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'])

print

(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

print

(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.相關度分析 下面我就來大致介紹一下上面六...