美文网首页
python从入门到入土教程(7)——用python实现SPSS

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

作者: 孙小灰灰 | 来源:发表于2020-01-16 15:49 被阅读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))
    

    相关文章

      网友评论

          本文标题:python从入门到入土教程(7)——用python实现SPSS

          本文链接:https://www.haomeiwen.com/subject/apwfzctx.html