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

如何用Pandas、Scipy分析DataFrame同列分类变量的关联及统计显著性

报错原因说明

  • 第一次报错:你筛选得到的pageviews和clicks是两个独立的子DataFrame,行数、索引都不匹配,无法逐行对应计算相关性
  • 第二次报错:corr()方法需要传入两个数值型序列作为计算对象,你直接传入分类字符串类型的event列,且只传了一个参数,不符合方法要求

分析前置步骤:数据格式转换

你的原始表是每行对应一条事件记录的长表,要计算两种事件的关联,需要先按观测维度(比如链接url、会话id、用户id,根据你的分析场景选择)聚合为宽表,每个观测单元对应一行,不同事件的发生次数作为单独列:

import pandas as pd
import numpy as np
from scipy import stats

# 示例按链接url分组,统计每个url下三类事件的发生次数,可替换为你实际的分组字段
event_count = df.groupby(['url', 'event']).size().unstack(fill_value=0).reset_index()
# 输出的event_count包含字段:url、click、pageview、preview,每一行对应一个链接的三类事件计数

线性相关性检验(皮尔逊相关)

适合分析click和preview的发生次数之间的线性关联,同时输出相关系数和统计显著性:

# 计算click与preview的皮尔逊相关
pearson_corr, pearson_p = stats.pearsonr(event_count['click'], event_count['preview'])
print(f"皮尔逊相关系数:{pearson_corr:.4f},显著性p值:{pearson_p:.4f}")

# 如需计算click和pageview的相关,替换上述代码中的preview为pageview即可

结果解读:

  • 相关系数范围为[-1,1],绝对值越大线性相关性越强,正负号代表相关方向
  • p值<0.05时可认为相关性具备统计显著性

二元关联检验(卡方检验+phi效应量)

适合分析“是否发生click”和“是否发生preview”两个二分类变量的关联:

# 将计数转换为二值标识:1=发生过该事件,0=未发生
event_count['has_click'] = (event_count['click'] > 0).astype(int)
event_count['has_preview'] = (event_count['preview'] > 0).astype(int)

# 生成混淆矩阵
confusion_matrix = pd.crosstab(event_count['has_click'], event_count['has_preview'])

# 卡方检验
chi2, p_value, dof, expected = stats.chi2_contingency(confusion_matrix)
# 计算phi系数(2x2混淆矩阵的效应量指标)
n = confusion_matrix.sum().sum()
phi_coef = np.sqrt(chi2 / n)

print(f"卡方值:{chi2:.4f},显著性p值:{p_value:.4f},phi效应量:{phi_coef:.4f}")

结果解读:

  • p值<0.05时可认为两个二分类变量存在显著关联
  • phi系数绝对值越大关联效应越强,通常0.1为小效应,0.3为中等效应,0.5为大效应

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08