根据python案例,客队客场表现如何评估?

wen python案例 1

本文目录导读:

根据python案例,客队客场表现如何评估?

  1. 核心评估维度
  2. Python实现案例
  3. 评估要点总结
  4. 实战建议

在Python体育数据分析中,评估客队客场表现通常需要从多个维度进行,以下是一个完整的评估框架和Python实现案例:

核心评估维度

基础战绩指标

  • 客场胜率、平率、负率
  • 客场场均进球/失球
  • 客场净胜球

进阶指标

  • 客场预期进球(xG) vs 实际进球
  • 客场控球率、射门转化率
  • 客场对阵不同实力对手的表现

稳定性指标

  • 客场成绩标准差
  • 连续客场表现趋势
  • 客场对阵强队/弱队的表现差异

Python实现案例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# ============ 1. 数据准备 ============
# 假设数据结构:date, home_team, away_team, home_goals, away_goals, 
#              home_xg, away_xg, home_possession, away_possession
def load_match_data():
    """加载比赛数据(示例)"""
    data = {
        'date': pd.date_range('2024-01-01', periods=20, freq='W'),
        'home_team': ['TeamA','TeamB','TeamC','TeamA']*5,
        'away_team': ['TeamB','TeamC','TeamA','TeamC']*5,
        'home_goals': np.random.randint(0,4,20),
        'away_goals': np.random.randint(0,3,20),
        'away_xg': np.random.uniform(0.5, 2.5, 20),
        'away_possession': np.random.uniform(35, 65, 20),
        'away_shots': np.random.randint(5, 18, 20),
        'away_shots_on_target': np.random.randint(2, 8, 20),
    }
    return pd.DataFrame(data)
# ============ 2. 基础客场战绩评估 ============
def evaluate_away_basic(df, team):
    """评估客队基础客场表现"""
    away_matches = df[df['away_team'] == team].copy()
    if len(away_matches) == 0:
        return None
    away_matches['result'] = away_matches.apply(
        lambda x: 'W' if x['away_goals'] > x['home_goals'] 
                  else ('D' if x['away_goals'] == x['home_goals'] else 'L'), 
        axis=1
    )
    stats = {
        '场次': len(away_matches),
        '胜': (away_matches['result']=='W').sum(),
        '平': (away_matches['result']=='D').sum(),
        '负': (away_matches['result']=='L').sum(),
        '胜率': round((away_matches['result']=='W').mean()*100, 1),
        '场均进球': round(away_matches['away_goals'].mean(), 2),
        '场均失球': round(away_matches['home_goals'].mean(), 2),
        '净胜球': away_matches['away_goals'].sum() - away_matches['home_goals'].sum(),
        '场均积分': round(((away_matches['result']=='W')*3 + 
                          (away_matches['result']=='D')*1).mean(), 2),
    }
    return stats
# ============ 3. 进阶指标评估 ============
def evaluate_away_advanced(df, team):
    """评估客队进阶客场指标"""
    away_matches = df[df['away_team'] == team].copy()
    # 进攻效率
    away_matches['goals_minus_xg'] = away_matches['away_goals'] - away_matches['away_xg']
    away_matches['shot_accuracy'] = away_matches['away_shots_on_target'] / away_matches['away_shots']
    away_matches['conversion_rate'] = away_matches['away_goals'] / away_matches['away_shots']
    advanced = {
        '场均xG': round(away_matches['away_xg'].mean(), 2),
        'xG差值': round(away_matches['goals_minus_xg'].mean(), 2),
        '场均射门': round(away_matches['away_shots'].mean(), 1),
        '射正率': round(away_matches['shot_accuracy'].mean()*100, 1),
        '射门转化率': round(away_matches['conversion_rate'].mean()*100, 1),
        '场均控球率': round(away_matches['away_possession'].mean(), 1),
    }
    return advanced
# ============ 4. 稳定性评估 ============
def evaluate_away_stability(df, team):
    """评估客场表现稳定性"""
    away_matches = df[df['away_team'] == team].copy()
    away_matches = away_matches.sort_values('date')
    # 计算滚动表现
    away_matches['points'] = away_matches.apply(
        lambda x: 3 if x['away_goals'] > x['home_goals'] 
                  else (1 if x['away_goals'] == x['home_goals'] else 0), 
        axis=1
    )
    stability = {
        '积分标准差': round(away_matches['points'].std(), 2),
        '进球标准差': round(away_matches['away_goals'].std(), 2),
        '失球标准差': round(away_matches['home_goals'].std(), 2),
        '最近5场客场积分': away_matches['points'].tail(5).tolist(),
        '连续不败': int((away_matches['points'] > 0).astype(int)
                       .groupby((away_matches['points'] == 0).cumsum())
                       .sum().max()) if len(away_matches) > 0 else 0,
    }
    return stability
# ============ 5. 综合评分(雷达图) ============
def calculate_away_score(df, team):
    """计算客场综合评分(0-100)"""
    basic = evaluate_away_basic(df, team)
    advanced = evaluate_away_advanced(df, team)
    if basic is None:
        return None
    # 加权评分模型
    score = {
        '进攻能力': min(100, basic['场均进球']/3*100),
        '胜率': min(100, basic['胜率']),
        '防守能力': max(0, 100 - basic['场均失球']/3*100),
        'xG效率': min(100, max(0, (advanced['xG差值'] + 1)/2*100)),
        '控球能力': advanced['场均控球率'],
    }
    score['综合评分'] = round(np.mean(list(score.values())), 1)
    return score
# ============ 6. 主客场对比 ============
def compare_home_away(df, team):
    """对比主客场表现"""
    home = df[df['home_team'] == team]
    away = df[df['away_team'] == team]
    comparison = pd.DataFrame({
        '主场': {
            '场均进球': round(home['home_goals'].mean(), 2),
            '场均失球': round(home['away_goals'].mean(), 2),
            '胜率': round((home['home_goals'] > home['away_goals']).mean()*100, 1),
        },
        '客场': {
            '场均进球': round(away['away_goals'].mean(), 2),
            '场均失球': round(away['home_goals'].mean(), 2),
            '胜率': round((away['away_goals'] > away['home_goals']).mean()*100, 1),
        }
    })
    return comparison
# ============ 7. 使用示例 ============
if __name__ == '__main__':
    df = load_match_data()
    team = 'TeamA'
    print("=" * 50)
    print(f"【{team} 客场基础战绩】")
    for k, v in evaluate_away_basic(df, team).items():
        print(f"  {k}: {v}")
    print("\n" + "=" * 50)
    print(f"【{team} 客场进阶指标】")
    for k, v in evaluate_away_advanced(df, team).items():
        print(f"  {k}: {v}")
    print("\n" + "=" * 50)
    print(f"【{team} 客场稳定性】")
    for k, v in evaluate_away_stability(df, team).items():
        print(f"  {k}: {v}")
    print("\n" + "=" * 50)
    print(f"【{team} 客场综合评分】")
    for k, v in calculate_away_score(df, team).items():
        print(f"  {k}: {v}")
    print("\n" + "=" * 50)
    print(f"【{team} 主客场对比】")
    print(compare_home_away(df, team))

评估要点总结

维度 关键指标 意义
战绩 客场胜率、场均积分 直接反映客战能力
进攻 场均进球、xG、转化率 客战进攻效率
防守 场均失球、零封率 客战抗压能力
稳定性 标准差、连续不败 表现的波动程度
对比 主客场差异 主场优势依赖度

实战建议

  1. 样本量要求:至少10-15场客场数据才有统计意义
  2. 对手强度调整:使用Elo或对手排名加权
  3. 时间衰减:近期表现权重更高(如指数加权)
  4. 场景细分:对阵强队/弱队、不同赛程密度下的客场表现

如果需要针对具体运动(足球/篮球)或特定联赛进一步细化,可以告诉我具体场景。

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝