数据分析方法和数据分析类型 (数据分析八个层次)

前面的假设检验、方差分析基本上都是围绕差异性分析,不论是单个总体还是两个总体及以上,总之都是属于研究“区别”,从本节开始,我们关注“联系”,变量之间的关系分为 函数关系和相关关系。 本节这里重点探讨的是不同类型变量之间的相关性,需要记住一点: 相关性不代表因果性。

变量类型

相关系数计算方法

示例

连续型变量

Pearson(正态)/Spearman(非正态)

商品曝光量和购买转化率

二分类变量(无序)

Point-biserial

性别和疾病指数

无序分类变量

方差分析

不同教育水平的考试成绩

有序分类变量

连续指标离散化后当做有序分类

商品评分与购买转化率

二分类变量

数学公式:检验 联合 Cramer's V

性别和是否吸烟

二分类变量(有序)

Biserial

乐器练习时间与考级是否通过

无序分类变量

数学公式:检验 / Fisher检验

手机品牌和年龄段

有序分类变量

数学公式:检验

满意度和手机品牌

有序分类变量

Spearman /Kendall Tau相关系数

用户等级和活跃程度等级

连续型变量:Pearson(正态)/Spearman(非正态)

Pearson相关系数度量了两个连续变量之间的线性相关程度;Spearman等级相关系数可以衡量非线性关系变量间的相关系数,是一种非参数的统计方法,可以用于定序变量或不满足正态分布假设的等间隔数据。相关示例分别如下

数据分析之特征探索,数据分析方法和数据分析类型

  • Pearson(商品曝光量和购买转化率之间的线性相关程度)
import random 
import numpy as np
import pandas as pd

np.random.seed(10)
df = pd.DataFrame({'商品曝光量':[1233,1333,1330,1323,1323,1142,1231,1312,1233,1123],
     '购买转化率':[0.033,0.034,0.035,0.033,0.034,0.029,0.032,0.034,0.033,0.031]})
print(df)

#Pandas计算Pearson相关系数
pd.Series.corr(df['商品曝光量'], df['购买转化率'],method = 'pearson') # pearson相关系数
# 0.885789300493948

#scipy计算Pearson相关系数
# 假设有两个变量X和Y
X = df['商品曝光量']
Y = df['购买转化率']

# 使用spearmanr函数计算斯皮尔曼相关系数和p值
corr, p_value = stats.pearsonr(X, Y)

print("Pearson相关系数:", corr)
print("p值:", p_value)
# Pearson相关系数: 0.8857893004939478
# p值: 0.0006471519603654732

数据分析之特征探索,数据分析方法和数据分析类型

结论:p = 0.0008<0.05,表明两变量之间的正向关系很显著。

  • Spearman(品牌知名度和售后服务评价之间的相关程度)
  • import random 
    import numpy as np
    import pandas as pd
    
    np.random.seed(10)
    df = pd.DataFrame({'品牌知名度排位':[9,4,3,6,5,8,1,7,10,2],
         '售后服务质量评价排位':[8,2,5,4,7,9,1,6,10,3]})
    print(df)
    
    # Pandas计算spearman相关系数
    pd.Series.corr(df['品牌知名度排位'], df['售后服务质量评价排位'],method = 'spearman') # spearman秩相关
    # 0.8787878787878788
    
    # scipy计算spearman相关系数
    # 假设有两个变量X和Y
    X = df['品牌知名度排位']
    Y = df['售后服务质量评价排位']
    
    # 使用spearmanr函数计算斯皮尔曼相关系数和p值
    corr, p_value = stats.spearmanr(X, Y)
    
    print("斯皮尔曼相关系数:", corr)
    print("p值:", p_value)
    # 斯皮尔曼相关系数: 0.8787878787878788
    # p值: 0.0008138621117322101
    

    数据分析之特征探索,数据分析方法和数据分析类型

    结论:p = 0.0008<0.05,表明两变量之间的正向关系很显著。

    数据分析之特征探索,数据分析方法和数据分析类型

    二分类变量

    • 二分类无序(性别和疾病之间的关系)

    假设我们想要研究性别对于某种疾病是否存在影响。我们有一个二元变量“性别”(男、女)和一个连续型变量“疾病指数”。我们想要计算性别与疾病指数之间的相关系数,就需要用到Point-biserial相关系数。

    import scipy.stats as stats
    
    # 创建一个列表来存储数据
    gender = [0, 1, 0, 1, 1, 0]
    disease_index = [3.2, 4.5, 2.8, 4.0, 3.9, 3.1]
    
    # 使用pointbiserialr函数计算Point-biserial相关系数和p值
    corr, p_value = stats.pointbiserialr(gender, disease_index)
    
    print("Point-biserial相关系数:", corr)
    print("p值:", p_value)
    # Point-biserial相关系数: 0.9278305692406299
    # p值: 0.007624695507848026
    

    结论:p = 0.007<0.05,表明两变量之间的正向关系很显著。即性别与疾病指数正相关

    • 无序分类变量(教育水平和考试成绩关系)

    假设我们想要比较不同教育水平的学生在CDA考试成绩上是否存在显著差异。我们有一个无序分类变量“教育水平”(高中、本科、研究生)和一个连续型变量“考试成绩”。

    import pandas as pd
    import statsmodels.api as sm
    from statsmodels.formula.api import ols
    
    # 创建一个DataFrame来存储数据
    data = pd.DataFrame({
        '教育水平': ['高中', '本科', '本科', '研究生', '高中', '本科', '研究生'],
        '考试成绩': [80, 90, 85, 95, 75, 88, 92]
    })
    
    # 使用ols函数创建一个线性模型
    model = ols('考试成绩 ~ C(教育水平)', data=data).fit()
    
    # 使用anova_lm函数进行方差分析
    anova_table = sm.stats.anova_lm(model, typ=2)
    print(anova_table)
    

    数据分析之特征探索,数据分析方法和数据分析类型

    结论:p = 0.0102<0.05,拒绝原假设,表明两变量之间的正向关系很显著。教育水平与考试成绩正相关

    • 有序分类变量(性别与对待吸烟的态度)

    一项研究调查了不同性别的成年人对在公众场合吸烟的态度,结果如表所示。那么,性别与对待吸烟的态度之间的相关程度

    -

    赞同

    反对

    15

    10

    10

    26

    import numpy as np
    from scipy.stats import chi2_contingency
    
    observed = np.array([[15, 10],
                         [10, 26]])
    print(observed)
    
    chi2, p, dof, expected = chi2_contingency(observed,correction =False) # correction =False
    # 卡方值
    # P值
    # 自由度:
    # 与原数据数组同维度的对应期望值
    
    print("chi2={0:.4f}, p={1:.4f}".format(chi2, p))
    #chi2=6.3335, p=0.0118
    

    结论:p = 0.0118<0.05,拒绝原假设,表明两变量之间的正向关系很显著。

    数据分析之特征探索,数据分析方法和数据分析类型