話不多說 開干~
一解恰、單樣本T檢驗
## 先把數(shù)據(jù)搞一搞
import pandas as pd
##首先是原始數(shù)據(jù)和檢驗的值
data = pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
mean = 20
#這里短短的兩行代碼银室,就是一個T檢驗了
#是不是很簡單呢
from scipy import stats
t,p = stats.ttest_1samp(data,mean)
def ptest(x):
if x < 0.05:
if mean > data.mean():
a = "20顯著性高于原數(shù)據(jù)"
else:
a = "20顯著性低于原數(shù)據(jù)"
else:
a = "統(tǒng)計沒有顯著性差異"
return a
ptest(p)
二枕面、獨立樣本T檢驗
group data
1 34
1 37
1 28
1 36
1 30
2 43
2 45
2 47
2 49
2 39
# 首先依舊是原始數(shù)據(jù)
#數(shù)據(jù)如上
dat = pd.read_excel("/home/kesci/input/demo3784/demo.xlsx")
#看一下數(shù)據(jù)長啥樣
dat
##這里只是用這個數(shù)據(jù)集做一個demo
#所以數(shù)據(jù)很少
##導(dǎo)入T檢驗
from scipy.stats import ttest_ind
## 把數(shù)據(jù)分成兩組
group1 = dat[dat.group == 1]["data"]
group2 = dat[dat.group == 2]["data"]
tt,pp = ttest_ind(group1, group2)
def ptesttwo(x):
if x < 0.05:
if group1.mean() > group2.mean():
a = "G1顯著性高于G2"
else:
a = "G2顯著性高于G1"
else:
a = "G1和G2沒有顯著性差異"
return a
ptesttwo(pp)
三蝎抽、相關(guān)樣本T檢驗
現(xiàn)在 假裝這個樣本是不獨立的 是相關(guān)的
##導(dǎo)入T檢驗
from scipy.stats import ttest_rel
## 把數(shù)據(jù)分成兩組
group1 = dat[dat.group == 1]["data"]
group2 = dat[dat.group == 2]["data"]
ttt,ppp = ttest_rel(group1, group2)
def ptestthree(x):
if x < 0.05:
if group1.mean() > group2.mean():
a = "G1顯著性高于G2"
else:
a = "G2顯著性高于G1"
else:
a = "G1和G2沒有顯著性差異"
return a
ptestthree(ppp)
四政钟、單因素方差分析
##還是用那個數(shù)據(jù)吧
#首先對數(shù)據(jù)進(jìn)行一個方差齊性檢驗路克,判斷方差是否齊性
w,p = stats.levene(group1, group2)
if p < 0.05:
print("方差不齊")
else:
print("方差齊性")
f,p = stats.f_oneway(group1, group2)
if p < 0.05:
print("有顯著性差異")
else:
print("沒有顯著性差異")
五、多因素方差分析
變量1 變量2 結(jié)果
a1 b1 20
a1 b2 22
a1 b3 24
a1 b4 16
a1 b5 26
數(shù)據(jù)如上
anova = pd.read_excel(r"/home/kesci/work/anova.xlsx")
anova.head()
##導(dǎo)入所需要的模塊
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
#對變量1和變量2進(jìn)行方差分析
formula = '結(jié)果~ 變量1 + 變量2 '
anova_results = anova_lm(ols(formula,anova).fit())
print(anova_results)
#變量1有顯著性差異
#變量1有五個維度养交,哪兩個之間才是有顯著性差異的呢
#用這個包來試一試
from statsmodels.stats.multicomp import pairwise_tukeyhsd
print(pairwise_tukeyhsd(anova['結(jié)果'], anova['變量1']))
六精算、數(shù)據(jù)的標(biāo)準(zhǔn)化
當(dāng)數(shù)據(jù)的范圍跨度比較大的時候,用標(biāo)準(zhǔn)化的方法把數(shù)據(jù)映射到一個正態(tài)分布(0碎连,1)上灰羽,即均值為0,方差為1的一個正太分布上鱼辙。
這樣更加方便后期的計算以及判斷不同數(shù)據(jù)之間的關(guān)系廉嚼。
from sklearn.preprocessing import StandardScaler
# reshape(-1,1) 將anova["結(jié)果"]變成只有一列,行數(shù)不限定的np.array
#這樣接下來才能做一個正態(tài)分布的映射
anova["結(jié)果"] = StandardScaler().fit_transform(anova["結(jié)果"].values.reshape(-1,1))