本文目录导读:

- 案例背景
- 步骤1:模拟数据(模拟两支球队的抢断数据)
- 步骤2:基础统计量
- 步骤3:统计显著性检验(确定差距是否“真实”)
- 步骤4:可视化分析(观察差距大小)
- 步骤5:效应量(衡量差距的实际“大小”)
- 如何判断“差距大不大”?
案例背景
假设你有一份包含多场比赛的抢断数据,数据分为两个队伍(或两个球员),我们需要:
- 加载数据
- 计算总抢断、场均抢断
- 进行显著性检验(如T检验)来判断差距是否“统计显著”
- 通过可视化直观展示分布差异
步骤1:模拟数据(模拟两支球队的抢断数据)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 设置随机种子以便复现结果
np.random.seed(42)
# 模拟两支球队的抢断数据(20场比赛)
team_a = np.random.poisson(lam=7.5, size=20) # 平均抢断7.5次
team_b = np.random.poisson(lam=8.2, size=20) # 平均抢断8.2次
# 创建DataFrame
df = pd.DataFrame({
'球队': ['A队']*20 + ['B队']*20,
'抢断次数': np.concatenate([team_a, team_b])
})
print(df.head())
步骤2:基础统计量
# 分组汇总
summary = df.groupby('球队')['抢断次数'].agg(['mean', 'std', 'median', 'sum'])
print("基础统计:\n", summary)
# 输出总抢断差值
diff_total = summary.loc['B队','sum'] - summary.loc['A队','sum']
print(f"\n两队在20场比赛中总抢断差值为:{diff_total:.0f} 次(B队- A队)")
输出示例:
基础统计:
mean std median sum
球队
A队 7.450000 2.500178 7.0 149
B队 7.800000 2.412646 8.0 156
步骤3:统计显著性检验(确定差距是否“真实”)
使用独立样本T检验(假设双方方差相等),若p值小于0.05则认为差距显著。
t_stat, p_value = stats.ttest_ind(team_a, team_b, equal_var=True)
print(f"T统计量:{t_stat:.3f}, P值:{p_value:.4f}")
alpha = 0.05
if p_value < alpha:
print("两队的抢断次数存在显著差异(差距在统计意义上显著)。")
else:
print("没有足够证据表明两队抢断次数有显著差异(差距可能由随机波动引起)。")
输出示例(假设数据):
T统计量:-0.449, P值:0.6562
没有足够证据表明两队抢断次数有显著差异。
注意:这里P值>0.05,说明虽然样本均值相差0.35次/场,但变异较大,不能排除误差导致,因此统计上差距不显著。
步骤4:可视化分析(观察差距大小)
plt.figure(figsize=(10, 5))
# 箱线图展示分布
plt.subplot(1, 2, 1)
sns.boxplot(x='球队', y='抢断次数', data=df)'抢断次数箱线图比较')
plt.ylabel('抢断次数')
# 直方图+密度曲线
plt.subplot(1, 2, 2)
sns.histplot(data=df, x='抢断次数', hue='球队', kde=True, alpha=0.5)'抢断次数分布比较')
plt.xlabel('抢断次数')
plt.tight_layout()
plt.show()
步骤5:效应量(衡量差距的实际“大小”)
仅看P值不够,计算Cohen’s d(效应量),判断差距的实际影响大小:
n1, n2 = len(team_a), len(team_b)
pooled_std = np.sqrt(((n1-1)*np.var(team_a, ddof=1) + (n2-1)*np.var(team_b, ddof=1)) / (n1+n2-2))
cohen_d = (np.mean(team_b) - np.mean(team_a)) / pooled_std
print(f"Cohen‘s d 效应量:{cohen_d:.3f}")
# 效应大小解释(经验法则)
if abs(cohen_d) < 0.2:
print("差距很小(几乎无差别)")
elif abs(cohen_d) < 0.5:
print("差距较小")
elif abs(cohen_d) < 0.8:
print("差距中等")
else:
print("差距很大")
如何判断“差距大不大”?
你在实际使用中,可结合:
- 业务角度:比如一场比赛差0.3次抢断对比赛影响大吗?
- 统计显著:P<0.05 说明差异可能不是随机,但样本小也可能不显著。
- 效应量:Cohen’s d >0.8 通常认为大效果。
建议:如果绝对差值小(如场均差<1),且效应量小、不显著,结论往往是“差距不大,属正常波动”,如果绝对差值大,且P<0.05、d>0.8,则可以明确说差距明显。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播