python从入门到入土教程(7)——用python实现SPSS

2020-01-16  本文已影响0人  孙小灰灰

话不多说 开干~

一、单样本T检验

## 先把数据搞一搞 
import pandas as pd
##首先是原始数据和检验的值
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显著性高于原数据"
        else:
            a = "20显著性低于原数据"
    else:
        a = "统计没有显著性差异"
    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

# 首先依旧是原始数据
#数据如上
dat = pd.read_excel("/home/kesci/input/demo3784/demo.xlsx")
#看一下数据长啥样
dat
##这里只是用这个数据集做一个demo
#所以数据很少
##导入T检验
from scipy.stats import ttest_ind
## 把数据分成两组
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)

三、相关样本T检验

现在 假装这个样本是不独立的 是相关的

##导入T检验
from scipy.stats import ttest_rel
## 把数据分成两组
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)

四、单因素方差分析

##还是用那个数据吧

#首先对数据进行一个方差齐性检验,判断方差是否齐性
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 结果
a1 b1 20
a1 b2 22
a1 b3 24
a1 b4 16
a1 b5 26

数据如上

anova = pd.read_excel(r"/home/kesci/work/anova.xlsx")
anova.head()
##导入所需要的模块
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

#对变量1和变量2进行方差分析
formula = '结果~ 变量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['结果'], anova['变量1']))

六、数据的标准化

当数据的范围跨度比较大的时候,用标准化的方法把数据映射到一个正态分布(0,1)上,即均值为0,方差为1的一个正太分布上。
这样更加方便后期的计算以及判断不同数据之间的关系。

from sklearn.preprocessing import StandardScaler
# reshape(-1,1) 将anova["结果"]变成只有一列,行数不限定的np.array
#这样接下来才能做一个正态分布的映射
anova["结果"] = StandardScaler().fit_transform(anova["结果"].values.reshape(-1,1))
上一篇下一篇

猜你喜欢

热点阅读