Python实现分类因变量与数值变量的相关性及组间差异分析
Python实现方案
你只需要用到pandas和scipy两个常用库即可完成需求,核心分两步:先做分组描述性统计直观查看差异,再用统计检验验证差异的显著性。
前置准备
默认你已经将数据集读取为pandas DataFrame,变量名为df。
步骤1:直观查看分组差异
直接按Category分组统计三个数值字段的核心指标,就能初步看到不同类别的数值差异:
df.groupby('Category')[['Value1', 'Value2', 'Value3']].agg(['mean', 'std', 'count'])
运行后直接可以看到A类的Value1均值是否高于其他类别。
步骤2:统计检验验证显著性
场景1:验证某数值字段在所有类别间是否存在整体差异化
如果你的数值字段基本符合正态分布、各组方差齐,用单因素方差分析(ANOVA);否则用非参数的Kruskal-Wallis H检验,以Value1为例:
from scipy import stats # 提取四个类别的Value1数据 g_a = df[df['Category'] == 'A']['Value1'] g_b = df[df['Category'] == 'B']['Value1'] g_c = df[df['Category'] == 'C']['Value1'] g_d = df[df['Category'] == 'D']['Value1'] # ANOVA检验 f_stat, anova_p = stats.f_oneway(g_a, g_b, g_c, g_d) print(f"ANOVA检验p值:{anova_p:.4f}") # p<0.05则说明Value1在不同类别间存在显著差异 # 非正态场景用Kruskal-Wallis检验 h_stat, kw_p = stats.kruskal(g_a, g_b, g_c, g_d) print(f"Kruskal-Wallis检验p值:{kw_p:.4f}")
场景2:专门验证A类的Value1是否显著高于其他所有类别
直接将非A类的所有数据合并为一组,做单侧检验即可:
g_non_a = df[df['Category'] != 'A']['Value1'] # 正态+方差齐用单侧独立样本t检验(alternative='greater'表示验证前者大于后者) t_stat, t_p = stats.ttest_ind(g_a, g_non_a, alternative='greater', equal_var=True) print(f"单侧t检验p值:{t_p:.4f}") # p<0.05则A类Value1显著高于其他类别 # 非正态场景用单侧Mann-Whitney U检验 u_stat, u_p = stats.mannwhitneyu(g_a, g_non_a, alternative='greater') print(f"单侧Mann-Whitney U检验p值:{u_p:.4f}")
批量处理三个字段
如果要对Value1/Value2/Value3都做上述检验,写个循环遍历字段名即可,不用重复写代码。
内容的提问来源于stack exchange,提问作者Aiden Blake
相关产品推荐
相关产品推荐

