综合python案例,阵地战得分能力对比?

wen python案例 1

本文目录导读:

综合python案例,阵地战得分能力对比?

  1. 完整代码实现
  2. 代码分析和特点

我将为您设计一个综合的Python案例,用于对比两支球队的阵地战得分能力,这个案例将涵盖数据清洗、统计分析、可视化等多个方面。

完整代码实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# ==================== 1. 数据生成与清洗 ====================
np.random.seed(42)
def generate_team_data(team_name, n_games=82, avg_score=105, consistency=0.85):
    """生成模拟球队比赛数据"""
    dates = pd.date_range('2023-10-01', periods=n_games, freq='D')
    # 生成基础数据
    data = {
        '日期': dates,
        '球队': team_name,
        '比分': np.random.normal(avg_score, avg_score*0.08, n_games),
        '投篮命中率': np.random.normal(0.47, 0.05, n_games),
        '三分命中率': np.random.normal(0.36, 0.06, n_games),
        '罚球命中率': np.random.normal(0.76, 0.05, n_games),
        '进攻篮板': np.random.poisson(10, n_games),
        '助攻': np.random.poisson(24, n_games),
        '失误': np.random.poisson(14, n_games),
        '对手防守强度': np.random.uniform(0.6, 1.0, n_games)
    }
    df = pd.DataFrame(data)
    # 确保成绩为正
    df['比分'] = df['比分'].clip(80, 140)
    df['投篮命中率'] = df['投篮命中率'].clip(0.35, 0.60)
    df['三分命中率'] = df['三分命中率'].clip(0.25, 0.45)
    return df
# 生成两支球队数据(模拟:湖人队和勇士队)
team_a = generate_team_data('洛杉矶湖人', n_games=82, avg_score=112, consistency=0.9)
team_b = generate_team_data('金州勇士', n_games=82, avg_score=108, consistency=0.8)
# 合并数据
all_data = pd.concat([team_a, team_b], ignore_index=True)
# 添加额外特征
all_data['进攻效率'] = all_data['比分'] / 100 * 100
# 计算每场比赛的净胜分(模拟对手得分)
all_data['对手得分'] = np.random.normal(105, 8, len(all_data)).clip(80, 130)
all_data['净胜分'] = all_data['比分'] - all_data['对手得分']
print("=" * 60)
print("数据前5行预览")
print("=" * 60)
print(all_data.head())
# ==================== 2. 阵地战得分能力分析 ====================
print("\n" + "=" * 60)
print("阵地战得分能力分析")
print("=" * 60)
# 计算阵地战得分相关指标
def calculate_half_court_metrics(df):
    """计算阵地战得分能力指标"""
    metrics = df.groupby('球队').agg({
        '比分': ['mean', 'std', 'median', 'min', 'max'],
        '投篮命中率': 'mean',
        '三分命中率': 'mean', 
        '进攻篮板': 'mean',
        '助攻': 'mean',
        '失误': 'mean'
    }).round(2)
    # 重命名列
    metrics.columns = ['场均得分', '得分稳定性', '得分中位数', '最低分', '最高分',
                       '投篮命中率', '三分命中率', '进攻篮板', '助攻', '失误']
    return metrics
half_court_metrics = calculate_half_court_metrics(all_data)
print("\n阵地战基础指标对比:")
print(half_court_metrics)
# ==================== 3. 得分效率分析 ====================
print("\n" + "=" * 60)
print("得分效率分析")
print("=" * 60)
# 计算真实投篮命中率 (TS%)
all_data['真实投篮命中率'] = all_data['比分'] / (
    (all_data['投篮命中率'] * 0.44 + all_data['三分命中率'] * 0.69) * 1.5
)
# 计算球员效率值 (PER)简化版
efficiency_data = []
for team in ['洛杉矶湖人', '金州勇士']:
    team_data = all_data[all_data['球队'] == team]
    efficiency = {
        '球队': team,
        '场均得分效率': team_data['比分'].mean() / team_data['比分'].std(),
        '得分效率': np.mean(team_data['比分'] / 100),
        '稳定性指数': 1 - (team_data['比分'].std() / team_data['比分'].mean())
    }
    efficiency_data.append(efficiency)
efficiency_df = pd.DataFrame(efficiency_data)
print("\n得分效率对比:")
print(efficiency_df)
# ==================== 4. 统计检验 ====================
print("\n" + "=" * 60)
print("统计显著性检验")
print("=" * 60)
# 独立样本T检验
team_a_scores = all_data[all_data['球队'] == '洛杉矶湖人']['比分']
team_b_scores = all_data[all_data['球队'] == '金州勇士']['比分']
t_stat, p_value = stats.ttest_ind(team_a_scores, team_b_scores)
print(f"\n独立样本T检验结果:")
print(f"t统计量: {t_stat:.3f}")
print(f"p值: {p_value:.4f}")
print(f" {'差异显著' if p_value < 0.05 else '差异不显著'}")
# 效应量 (Cohen's d)
def cohens_d(group1, group2):
    """计算Cohen's d效应量"""
    n1, n2 = len(group1), len(group2)
    var1, var2 = group1.var(), group2.var()
    pooled_std = np.sqrt(((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2))
    return (group1.mean() - group2.mean()) / pooled_std
effect_size = cohens_d(team_a_scores, team_b_scores)
print(f"效应量(Cohen's d): {effect_size:.3f}")
# ==================== 5. 得分分布分析 ====================
print("\n" + "=" * 60)
print("得分分布特征")
print("=" * 60)
# 使用KS检验判断分布是否正态
for team in ['洛杉矶湖人', '金州勇士']:
    team_scores = all_data[all_data['球队'] == team]['比分']
    ks_stat, p_value = stats.kstest(team_scores, 'norm', args=(team_scores.mean(), team_scores.std()))
    print(f"\n{team}得分分布KS检验:")
    print(f"统计量: {ks_stat:.3f}")
    print(f"p值: {p_value:.3f}")
    print(f" {'符合正态分布' if p_value > 0.05 else '不符合正态分布'}")
# ==================== 6. 可视化分析 ====================
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
# 1. 得分分布对比
colors = ['#FF4444', '#4444FF']  # 湖人红,勇士蓝
for idx, team in enumerate(['洛杉矶湖人', '金州勇士']):
    team_scores = all_data[all_data['球队'] == team]['比分']
    axes[0,0].hist(team_scores, bins=20, alpha=0.6, label=team, color=colors[idx])
axes[0,0].set_title('得分分布对比', fontsize=14)
axes[0,0].set_xlabel('得分')
axes[0,0].set_ylabel('频率')
axes[0,0].legend(loc='upper left')
axes[0,0].axvline(x=team_a_scores.mean(), color='red', linestyle='--', label='湖人平均')
axes[0,0].axvline(x=team_b_scores.mean(), color='blue', linestyle='--', label='勇士平均')
axes[0,0].legend()
# 2. 得分趋势图
for team, color in zip(['洛杉矶湖人', '金州勇士'], colors):
    team_data = all_data[all_data['球队'] == team]
    axes[0,1].plot(team_data['日期'], team_data['比分'].rolling(window=5).mean(), 
                   label=f'{team} (5场移动平均)', color=color)
axes[0,1].set_title('得分趋势对比(5场移动平均)', fontsize=14)
axes[0,1].set_xlabel('日期')
axes[0,1].set_ylabel('得分')
axes[0,1].legend()
axes[0,1].tick_params(axis='x', rotation=45)
# 3. 投篮效率对比
efficiency_cols = ['投篮命中率', '三分命中率']
team_data = all_data.groupby('球队')[efficiency_cols].mean()
efficiency_cols.append('真实投篮命中率')
team_data['真实投篮命中率'] = all_data.groupby('球队')['比分'].mean() / (all_data.groupby('球队')['投篮命中率'].mean()*0.44 + all_data.groupby('球队')['三分命中率'].mean()*0.69)
team_data.plot(kind='bar', ax=axes[1,0], rot=0, color=['#FF6B6B', '#4ECDC4', '#45B7D1'])
axes[1,0].set_title('投篮效率对比', fontsize=14)
axes[1,0].set_ylabel('命中率/效率')
axes[1,0].legend(loc='upper right')
axes[1,0].set_xticklabels(team_data.index, rotation=0)
# 4. 得分稳定性箱线图
all_data.boxplot(column='比分', by='球队', ax=axes[1,1], 
                  patch_artist=True, boxprops=dict(color='black', facecolor='lightblue'),
                  medianprops=dict(color='red'))
axes[1,1].set_title('得分稳定性对比', fontsize=14)
axes[1,1].set_xlabel('')
axes[1,1].set_ylabel('得分')
axes[1,1].set_ylim(80, 140)
plt.suptitle('阵地战得分能力综合分析', fontsize=16)
plt.tight_layout()
# ==================== 7. 相关性分析 ====================
print("\n" + "=" * 60)
print("影响因素相关性分析")
print("=" * 60)
correlation_cols = ['投篮命中率', '三分命中率', '罚球命中率', '进攻篮板', '助攻', '失误', '对手防守强度']
print("\n湖人队得分与各因素相关性:")
team_a_data = all_data[all_data['球队'] == '洛杉矶湖人']
corr_a = team_a_data['比分'].corr(team_a_data[correlation_cols].apply(lambda x: x, axis=0))
print(corr_a.round(3))
print("\n勇士队得分与各因素相关性:")
team_b_data = all_data[all_data['球队'] == '金州勇士']
corr_b = team_b_data['比分'].corr(team_b_data[correlation_cols].apply(lambda x: x, axis=0))
print(corr_b.round(3))
# ==================== 8. 综合评分 ====================
print("\n" + "=" * 60)
print("综合得分能力评分")
print("=" * 60)
def calculate_composite_score(team_data):
    """计算综合得分能力评分(0-100)"""
    conditions = {
        '场均得分': (team_data['比分'].mean() - 80) / 40 * 30,  # 权重30%
        '得分效率': (team_data['比分'].mean() / team_data['比分'].std()) * 2,  # 权重10%
        '稳定性': (1 - (team_data['比分'].std() / team_data['比分'].mean())) * 100 * 0.2,  # 权重20%
        '投篮命中率': (team_data['投篮命中率'].mean() - 0.35) / 0.25 * 100 * 0.2,  # 权重20%
        '进攻效率': (team_data['助攻'].mean() / team_data['失误'].mean()) * 10,  # 权重10%
        '效率指数': (team_data['比分'].mean() / 100) * 100 * 0.1  # 权重10%
    }
    return min(max(sum(conditions.values()) / 2.3, 0), 100)  # 归一化
scores = []
for team in ['洛杉矶湖人', '金州勇士']:
    team_data = all_data[all_data['球队'] == team]
    score = calculate_composite_score(team_data)
    scores.append({'球队': team, '综合得分能力评分': score})
score_df = pd.DataFrame(scores)
print("\n综合得分能力评分对比:")
print(score_df)
# ==================== 9. 结论报告 ====================
print("\n" + "=" * 60)
print("分析结论")
print("=" * 60)
# 最终对比总结
final_comparison = pd.DataFrame({
    '指标': ['场均得分', '得分稳定性(std)', '最高分', '最低分', '投篮命中率', '三分命中率', '综合评分'],
    '洛杉矶湖人': [
        f"{team_a_scores.mean():.1f}",
        f"{team_a_scores.std():.1f}",
        f"{team_a_scores.max():.1f}",
        f"{team_a_scores.min():.1f}",
        f"{team_a_data['投篮命中率'].mean()*100:.1f}%",
        f"{team_a_data['三分命中率'].mean()*100:.1f}%",
        f"{scores[0]['综合得分能力评分']:.1f}"
    ],
    '金州勇士': [
        f"{team_b_scores.mean():.1f}",
        f"{team_b_scores.std():.1f}",
        f"{team_b_scores.max():.1f}",
        f"{team_b_scores.min():.1f}",
        f"{team_b_data['投篮命中率'].mean()*100:.1f}%",
        f"{team_b_data['三分命中率'].mean()*100:.1f}%",
        f"{scores[1]['综合得分能力评分']:.1f}"
    ]
})
print("\n最终对比表:")
print(final_comparison.to_string(index=False))
# 判断优势方
print("\n" + "-"*40)
if scores[0]['综合得分能力评分'] > scores[1]['综合得分能力评分']:
    print(f" {scores[0]['球队']}在阵地战得分能力上整体更强")
else:
    print(f" {scores[1]['球队']}在阵地战得分能力上整体更强")
print(f"但需要注意: 阵地战得分能力强并不代表比赛结果必然占优")
plt.show()

代码分析和特点

主要功能模块:

  1. 数据生成:模拟两支球队82场比赛的数据
  2. 基础指标分析:包括场均得分、稳定性、命中率等
  3. 效率分析:包括真实投篮命中率、效率指数等
  4. 统计检验:T检验判断差异显著性
  5. 相关性分析:找出影响得分的关键因素
  6. 可视化分析:4个子图对比不同维度
  7. 综合评分:构建0-100的评分模型

关键分析方法:

  • 分布分析:判断得分是否正态分布
  • 趋势分析:使用移动平均了解状态变化
  • 相关性分析:识别影响得分的关键因素
  • 综合评分:多维度加权评分

运行结果示例:

这个案例可以清晰地展示两支队伍在阵地战得分能力上的差异,包括基础的数据对比、统计显著性检验、影响因素相关性和综合评分,通过可视化可以直观看到两队在得分分布、趋势、效率等方面的表现。

通过这个综合案例,学生可以掌握:

  • 数据清洗和预处理
  • 统计分析(T检验、KS检验等)
  • 多维度数据对比分析
  • 可视化呈现方法
  • 构建综合评分模型

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