python案例复盘称这次伤病潮是否拖累球队?

wen python案例 1

本文目录导读:

python案例复盘称这次伤病潮是否拖累球队?

  1. 分析思路
  2. Python分析代码示例
  3. 判断“是否拖累”的关键逻辑
  4. 典型结论模板

python案例复盘称这次伤病潮是否拖累球队”这个问题,我需要先说明一下:我无法直接访问你提到的那个具体Python案例复盘(比如某篇文章、某个notebook或某份报告),所以没法针对那份具体分析下结论。

如果你是想用Python做一次“伤病潮是否拖累球队”的复盘分析,我可以给你一套完整的分析框架和代码示例,你可以直接套到自己的数据上。


分析思路

要回答“伤病潮是否拖累球队”,核心是建立伤病与球队表现之间的因果关系或强相关关系,而不是只看表面。

分析维度 具体指标 作用
伤病强度 伤病人数、缺阵场次、核心球员缺阵比例 自变量
球队表现 胜率、场均得分、净胜分、排名 因变量
对照基准 健康时期表现、联盟平均、预期战绩 控制变量
时间维度 伤病前后对比、逐月趋势 排除偶然性

Python分析代码示例

数据准备

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 假设数据结构
# games: 每场比赛记录
# injuries: 伤病记录
games = pd.read_csv('games.csv')
# 字段示例: date, opponent, win, points, opp_points, injured_players, injured_starter_count
injuries = pd.read_csv('injuries.csv')
# 字段示例: player, start_date, end_date, is_starter, importance_score

构造“伤病强度”指标

# 每场比赛的伤病影响分 = 缺阵球员重要性加权和
def calc_injury_impact(row, injuries):
    impact = 0
    for _, inj in injuries.iterrows():
        if inj['start_date'] <= row['date'] <= inj['end_date']:
            weight = 2 if inj['is_starter'] else 1
            impact += weight * inj['importance_score']
    return impact
games['injury_impact'] = games.apply(lambda r: calc_injury_impact(r, injuries), axis=1)
# 划分伤病潮 vs 健康期
threshold = games['injury_impact'].quantile(0.75)
games['period'] = np.where(games['injury_impact'] >= threshold, '伤病潮', '健康期')

对比两队/两阶段表现

summary = games.groupby('period').agg(
    场次=('win', 'count'),
    胜率=('win', 'mean'),
    场均得分=('points', 'mean'),
    场均失分=('opp_points', 'mean'),
    净胜分=('points', lambda x: 0)  # 占位
)
summary['净胜分'] = games.groupby('period').apply(
    lambda g: (g['points'] - g['opp_points']).mean()
)
print(summary)

显著性检验

from scipy.stats import ttest_ind
injured = games[games['period'] == '伤病潮']['points'] - games[games['period'] == '伤病潮']['opp_points']
healthy = games[games['period'] == '健康期']['points'] - games[games['period'] == '健康期']['opp_points']
t_stat, p_value = ttest_ind(injured, healthy)
print(f"T统计量: {t_stat:.3f}, P值: {p_value:.4f}")
if p_value < 0.05:
    print("伤病潮期间表现显著下滑,伤病确实拖累了球队")
else:
    print("没有足够证据表明伤病潮显著拖累球队")

可视化

fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 胜率对比
sns.barplot(data=games, x='period', y='win', ax=axes[0], ci=95)
axes[0].set_title('伤病潮 vs 健康期 胜率对比')
axes[0].set_ylabel('胜率')
# 净胜分趋势
games['net'] = games['points'] - games['opp_points']
games.sort_values('date').plot(x='date', y='net', ax=axes[1])
axes[1].axhline(0, color='gray', linestyle='--')
axes[1].set_title('逐场净胜分趋势')
plt.tight_layout()
plt.show()

判断“是否拖累”的关键逻辑

  1. 相关性:伤病影响分与净胜分是否负相关?

    corr = games['injury_impact'].corr(games['net'])
  2. 因果性:需要排除对手强度、主客场、赛程密度等混杂因素,可用多元回归:

    import statsmodels.api as sm
    X = games[['injury_impact', 'opponent_strength', 'is_home', 'rest_days']]
    X = sm.add_constant(X)
    y = games['net']
    model = sm.OLS(y, X).fit()
    print(model.summary())

    injury_impact 系数显著为负,说明控制其他因素后,伤病仍拖累球队。

  3. 核心球员效应:往往不是“伤病总数”拖累球队,而是核心球员缺阵拖累最大。

    games['star_out'] = games['injured_starter_count'] >= 2
    print(games.groupby('star_out')['win'].mean())

典型结论模板

复盘显示:伤病潮期间球队胜率从 X% 降至 Y%,净胜分从 +A 降至 -B,T检验 p<0.05,回归中伤病影响分系数为 -C(显著)。这次伤病潮确实显著拖累了球队,尤其是核心球员缺阵期间影响最大。


如果你能把那份具体复盘的数据结构或结论贴出来,我可以帮你针对性地审阅它的分析是否站得住脚,比如有没有把相关性当因果、样本量是否足够、有没有控制对手强度等。

抱歉,评论功能暂时关闭!