美文网首页Python
两变量之间分析方法选用总结

两变量之间分析方法选用总结

作者: 走二仙桥丶 | 来源:发表于2020-05-24 17:13 被阅读0次
    共勉

    写在最前面:

    请看下面几个问题,如果你能轻松的知道问题的答案,那么可以不再阅读本文或快速浏览一下本文,如果不是很轻松就能知道答案,那么建议花一点时间读一下本文。

    数据分析师在实际工作中经常遇见以下的情形:

    1.一个变量是否对另一个变量有影响?用什么方法?这个方法适合我的数据吗?
    2.EDA探索性数据分析除了描述单变量的分布,还能做些什么。
    3.在用机器学习做分类或回归问题时,都说数据决定精度的上界,模型只是去逼近这个上界,那么在对数据进行探索时,可以用哪些方法来做。

    目录

    1.一个实际案例引发的思考
    2.实际工作中常见的数据类型
    3.两个连续型数值变量之间的关系探究
    4.一个连续型数值变量与一个分类变量之间的关系探究
    5.两个分类变量之间的关系探究
    6.思考:我们说的AB Test原理是什么

    一、一个实际案例引发的思考

    在看这个案例之前,有下面几个问题,请带着这些问题边看案例边思考:
    1.如果你在工作中会怎么做这个分析?
    2.他这样分析对吗?
    3.如果不对,问题出在哪里,应该怎么修改?
    4.如果回答不上来上述1-3问题,再看完这篇文章后,你是否可以回答1-3

    【注】该案例来自知乎上的书:《活用数据:驱动业务的数据分析实战》,若有侵权,联系必删!
    我们想对服装进行精准营销 案例来自书--《活用数据:驱动业务的数据分析实战》
    案例来自书--《活用数据:驱动业务的数据分析实战》 案例来自书--《活用数据:驱动业务的数据分析实战》

    二、实际工作中常见的数据类型

    要做分析,那么必然要清楚分析的数据是什么类型,不同类型的数据分析方法与处理方式是不同的,因此有必要清楚实际工作中常见的数据类型。
    什么是数据?我认为凡是可以电子化记录的都是数据。因此,数据范围会随着科技进步和计算机发展不断扩充变大。就目前技术水平与计算机发展,个人认为数据可以做如下分类:

    个人理解的目前数据类型分类 啰嗦几句题外话:现在很多人对深度学习很迷信崇拜,觉得用深度学习高大上,效果会很好,但是就目前来看深度学习还有很长的路要走;虽然目前深度学习在非结构化数据处理上一骑绝尘,但是我们要知道深度学习的训练,参数的调整,可解释性,对计算机性能的要求,这些东西对于个人工作中是很难去满足的,深度学习没有那么神秘,也不是干什么都是最好的,综合考虑各种因素找到可解决的办法就行。

    三、两个连续型数值变量之间的关系探究

    对于两个连续型数值变量之间的关系探究,我们比较容易想到相关关系(回归先不探讨),日常工作中,我们常把相关关系和因果关系(常用回归分析探索)弄混,这里简单说一下:
    相关变量的关系也可分为两种:
    两个变量间相互影响——平行关系
    一个变量变化受另一个变量的影响——依存关系
    它们对应的分析方法:
    相关分析是研究呈平行关系的相关变量之间的关系
    回归分析是研究呈依存关系的相关变量之间的关系
    回归分析和相关分析都是研究变量之间关系的方法,两种分析方法相互结合和渗透;可以总结为:用相关分析不一定要用回归分析;用回归分析,必先用相关分析探索一下变量之间的关系。

    使用相关分析探究两个连续型数值变量之间的关系步骤:

    1.绘制散点图
    2.计算相关系数并完成相关系数显著性检验

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import scipy.stats as stats   #Python中做统计检验的库
    # 导入数据
    data = pd.DataFrame(np.random.randn(200,4)*100, columns = ['A','B','C','D'])
    data.head()
    
    data.head()
    #研究变量A和变量B之间的相关关系
    #第一步:画出变量A与变量B的散点图
    plt.figure(figsize = (3,3))  # 图片像素大小
    plt.scatter(data.A, data.B,color="blue")  # 散点图绘制
    plt.grid()  # 显示网格线
    plt.show()  # 显示图片
    
    变量A与B之间的散点图

    从散点图来看,变量A与变量B之间可能不存在线性相关关系。

    #第二步:计算相关系数与显著性检验
    #方法一:使用pandas中的corr()方法
    print(data.corr()) #如果由数据框调用corr函数,那么将会计算每个列两两之间的相似度,返回DataFrame
    print(data['A'].corr(data['B']))  #如果由序列调用corr方法,那么只是该序列与传入的序列之间的相关度,返回一个数值型,大小为相关度
    
    使用pandas的corr方法做相关分析

    可以看到使用pandas中的corr()方法求相关分析是只会给出相关系数,不会给出相关系数对应的显著性水平值的,因此如果想更严谨的话还是使用scipy.stats库比较好。

    r,p = stats.pearsonr(data.A,data.B)  # 相关系数和P值
    if p<0.05:
        print("P=%.3f,应拒绝原假设,可以认为变量之间相关关系显著。"%p)
        if r>0:
            print("变量之间存在显著正相关关系,相关系数r=%.3f"%r)
        else:
            print("变量之间存在显著负相关关系,相关系数r=%.3f"%r)
    else:
        print("P=%.3f,我们没有理由拒绝原假设,可以认为变量之间不存在相关关系显著。"%p)
    
    在显著性为0.05的水平下,检验结果

    可以看到,在0.05的置信水平下,认为变量A和变量B是不存在显著相关关系的;但看P=0.099,其实P值不算大,如果在0.1的置信水平下,就可以认为变量A和变量B是存在显著相关关系的,这时是可以说相关系数为多少。


    四、一个连续型数值变量与一个分类变量之间的关系探究


    统计检验方法:
    1.单因素方差分析(若分类变量下类别水平为2,此时单因素方差分析等价于独立样本T检验,两者可以统计量互相转换)
    2.独立样本T检验(仅适用于分类变量下类别水平为2的情况)


    因此为了篇幅考虑,就以单因素方差分析适用案例作为本文的内容。


    使用单因素方差分析的步骤:

    1.对数据是否符合正态分布和组间方差是否一致做检验(完成单因素方差分析的前提假设)
    2.描述性分析;建议使用箱线图来进行
    3.采用单因素方差分析判断分类变量是否对连续型变量有显著影响
    4.若不同组间有差异,通过多重检验来判断哪个处理间存在差异


    在日常工作中,我们经常碰到这样的问题,就是一个分类变量对一个连续型变量是否有影响,以植物生长作为一个案例,探究施肥是否会促进植株生成(植株生长以树高作为指标来衡量),采用控制变量的方法,采取清水作为对照组,实验组以某肥料四个浓度梯度,分别是A,B,C,D,施肥一段时间之后测量树高(要控制其他变量保持一致,比如施肥之前的树高要基本保持一致,生长势基本保持一致等等)。

    import numpy as np
    import pandas as pd
    df = {'ctl':list(np.random.normal(10,5,100)),
          'treat1':list(np.random.normal(15,5,100)),\
          'treat2':list(np.random.normal(20,5,100)),\
          'treat3':list(np.random.normal(30,5,100)),\
          'treat4':list(np.random.normal(31,5,100))}
    df = pd.DataFrame(df)
    df.head()
    
    data.head()

    数据中的teat1-4代表的就是A-D四个化肥浓度。

    #第一步:正态性检验
    import scipy.stats as stats
    #Shapiro检验(常用Shapiro检验和K-S检验来检验数据是否服从正态分布,若数据量低于5000,则使用Shapiro检验比较合理,否则使用K-S检验)
    print(stats.shapiro(df['ctl']))
    print(stats.shapiro(df['treat1']))
    print(stats.shapiro(df['treat2']))
    print(stats.shapiro(df['treat3']))
    print(stats.shapiro(df['treat4']))
    
    正态检验结果
    #第二步:方差齐性检验
    d1=df['ctl']
    d2=df['treat1']
    d3=df['treat2']
    d4=df['treat3']
    d5=df['treat4']
    args = [d1,d2,d3,d4,d5]
    #levene test
    w,p=stats.levene(*args)
    if p<0.05:
        print("警告:Levene test 显示方差齐性假设不成立(p=%.2f)"%p)
    else:
        print("通过齐性检验")
    
    #方差分析
    f,p=stats.f_oneway(*args)
    print(f,p)
    
    方差齐性检验结果
    #第三步:绘制箱线图
    df_melt=df.melt()
    df_melt.columns=['Treat','Value']
    import seaborn as sns
    sns.boxplot(x='Treat',y='Value',data=df_melt)
    
    箱线图
    #第四步:单因素方差分析
    from statsmodels.formula.api import ols
    from statsmodels.stats.anova import anova_lm
    model = ols('Value~C(Treat)',data=df_melt).fit()
    anova_table=anova_lm(model,typ=2)
    print(anova_table)
    
    单因素方差分析结果
    #第五步:邓肯多重检验(Tukey HSD test)
    from statsmodels.stats.multicomp import MultiComparison
    mc =MultiComparison(df_melt['Value'],df_melt['Treat'])
    tukey_result = mc.tukeyhsd(alpha=0.5)
    print(tukey_result)
    
    多重检验结果

    通过上述分析,可以看到不同化肥水平对应的植株生长存在显著影响,并且通过箱线图和多重检验可以看到,treat3和treat4对应的植株生长是和其他对照组显著差异,treat3和trea4对应的植株生长更好,因此可以建议采用treat3下的化肥水平,treat4的植株生长相较于treat3并没有太明显差异;甚至可以再继续采取一些化肥水平来判断是否当化肥水平超过treat3的水平后,化肥的提升不会再进一步影响植物生长。

    五、两个分类变量之间的关系探究


    统计检验方法:
    卡方检验
    (卡方检验是针对自变量和因变量都是分类数据,也就是说带有属性的数据)


    使用美国人口收入数据作为案例,研究性别与收入之间的关系。 data.head()
    pivot_table = pd.crosstab(
        data['sex'],
        data['income'],
        margins = True #总计
    )
    pivot_table
    
    列联表
    Female_income = pivot_table.iloc[0][0:2].values
    Male_income = pivot_table.iloc[1][0:2].values
    #画图
    fig = plt.figure(figsize=(5, 5))
    sns.set(font_scale=1.8)
    categories = ["<=50K",">50K"]
    p1 = plt.bar(categories, Female_income, 0.55, color='#d62728')
    p2 = plt.bar(categories, Male_income, 0.55, bottom=Female_income)
    plt.legend((p1[0],p2[0]), ('Female', 'Male'))
    plt.ylabel('Count')
    plt.show()
    
    做图
    f_obs = np.array([Female_income,
                      Male_income])
    from scipy import stats
    stats.chi2_contingency(f_obs)[1]    #得出的是卡方检验的P值
    
    卡方检验结果

    通过卡方检验,可以看到P值趋近于0,小于0.05,我们可以认为男性和女性在收入上是存在显著差异的;结合列联表和做出的图,我们可以看到在高收入人群中,男性占比较大。

    六.思考:我们说的AB Test原理是什么

    现在回顾第一部分的那个案例,研究的是性别和颜色偏好之间的关系,这是两个分类变量之间的关系,应该使用卡方检验而不应该使用单因素方差分析。
    在本文中,没有具体交代方法论的原理,如果感兴趣可以自行查阅。现在我们可以思考下AB Test原理到底使用的方法论到底是什么? AB Test怎么选择指标更加合理,怎么设计方案更可行,得到的数据怎么分析才正确,下周会做一个关于AB Test的总结。

    参考文献:
    https://zhuanlan.zhihu.com/p/36441826 简单相关性分析(两个连续型变量)
    https://www.cnblogs.com/jiaxin359/p/7995073.html 统计学当中关于变量的分类

    相关文章

      网友评论

        本文标题:两变量之间分析方法选用总结

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