统计犯规次数会决定胜负吗?
下面用 Python 分析一场篮球比赛中"犯规次数"与"比赛胜负"的关系,这是一个完整的数据分析案例。

数据准备
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 模拟 20 场比赛数据(真实场景可替换为 NBA/ CBA 数据)
np.random.seed(42)
n = 20
data = pd.DataFrame({
'match_id': range(1, n + 1),
'team_A_fouls': np.random.randint(15, 30, n),
'team_B_fouls': np.random.randint(15, 30, n),
'team_A_score': np.random.randint(85, 120, n),
'team_B_score': np.random.randint(85, 120, n),
})
# 计算胜负:A 队胜=1,B 队胜=0
data['winner'] = (data['team_A_score'] > data['team_B_score']).astype(int)
data['foul_diff'] = data['team_A_fouls'] - data['team_B_fouls'] # 犯规差
data['score_diff'] = data['team_A_score'] - data['team_B_score'] # 分差
print(data.head())
核心分析
犯规少的队是否更容易赢?
# 胜方犯规数 vs 负方犯规数
win_fouls = data.apply(
lambda r: r['team_A_fouls'] if r['winner'] == 1 else r['team_B_fouls'], axis=1)
lose_fouls = data.apply(
lambda r: r['team_B_fouls'] if r['winner'] == 1 else r['team_A_fouls'], axis=1)
print(f"胜方平均犯规:{win_fouls.mean():.1f}")
print(f"负方平均犯规:{lose_fouls.mean():.1f}")
# 配对 t 检验
t, p = stats.ttest_rel(win_fouls, lose_fouls)
print(f"t={t:.3f}, p={p:.4f}")
犯规差与分差的相关性
corr, p = stats.pearsonr(data['foul_diff'], data['score_diff'])
print(f"犯规差 vs 分差 相关系数 r = {corr:.3f}, p = {p:.4f}")
解读:r 显著为负 → 犯规越多分差越差(犯规多会输);若 r 接近 0 → 犯规次数与胜负无显著关系。
可视化
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 胜方 vs 负方犯规数
axes[0].boxplot([win_fouls, lose_fouls], labels=['胜方', '负方'])
axes[0].set_title('胜方 vs 负方犯规次数')
# 犯规差 vs 分差
axes[1].scatter(data['foul_diff'], data['score_diff'])
axes[1].axhline(0, color='gray', ls='--')
axes[1].axvline(0, color='gray', ls='--')
axes[1].set_xlabel('犯规差 (A - B)')
axes[1].set_ylabel('分差 (A - B)')
axes[1].set_title(f'犯规差与分差关系 (r={corr:.2f})')
plt.tight_layout()
plt.show()
逻辑回归:犯规次数能预测胜负吗?
from sklearn.linear_model import LogisticRegression
X = data[['foul_diff']]
y = data['winner']
model = LogisticRegression().fit(X, y)
print(f"准确率:{model.score(X, y):.2%}")
print(f"系数:{model.coef_[0][0]:.4f}")
典型结果)
运行以上代码后,你通常会看到:
| 观察 | |
|---|---|
| 胜方和负方犯规次数差异是否显著 (p<0.05) | 显著则说明犯规与胜负有关 |
| 犯规差与分差的相关系数 | |r|>0.3 才算中等相关 |
| 逻辑回归准确率 | 仅靠犯规预测胜负,准确率通常不高(60-70%) |
一般情况下答案:
犯规次数本身不是决定胜负的直接原因,但它常与胜负相关联。
- 犯规多往往意味着防守被动、罚球送分、核心球员离场 → 间接导致输球;
- 但强队也可能"战术犯规"或"垃圾时间犯规",所以不能简单用犯规数判断胜负;
- 影响因素还包括命中率、篮板、失误等,需多元回归综合判断。
进阶建议
- 加入更多变量:投篮命中率、篮板、助攻、失误,做多元逻辑回归。
- 分节分析:第 4 节犯规数对胜负影响通常更大。
- 区分犯规类型:个人犯规 vs 团队犯规 vs 技术犯规。
- 真实数据:从 stats.nba.com 或 Basketball-Reference 抓取。
需要我把它改成读取真实 CSV 数据、或加入多元回归模型的完整版本吗?