You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:54:05