python案例如何评估边后卫的助攻能力?

wen python案例 2

边后卫助攻能力评估案例

下面用 Python 给出一个完整的边后卫助攻能力评估方案,包含数据构造、多维度指标计算和可视化。

python案例如何评估边后卫的助攻能力?

评估思路

边后卫的助攻能力不能只看助攻数,需要综合多个维度:

维度 指标 说明
直接贡献 助攻数、场均助攻 结果指标
机会创造 关键传球、xA(预期助攻) 过程指标
推进能力 渐进传球、带球推进距离 进攻发起
传中质量 传中次数、传中成功率 边后卫核心技能
参与度 进攻三区触球、场均触球 进攻参与

完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# ---------- 1. 构造模拟数据(可替换为真实数据源,如FBref/Understat)----------
data = {
    'player': ['阿诺德', '罗伯逊', '凯尔·沃克', '坎塞洛', '特里皮尔', '戴维斯'],
    'minutes': [2800, 2650, 2400, 2200, 2500, 2000],
    'assists': [12, 8, 3, 6, 9, 5],
    'key_passes': [85, 62, 30, 55, 78, 42],
    'xA': [10.5, 7.2, 2.8, 5.5, 8.1, 4.0],       # 预期助攻
    'progressive_passes': [210, 185, 120, 175, 160, 140],
    'progressive_carries': [95, 88, 70, 110, 60, 105],
    'crosses': [180, 165, 90, 120, 200, 100],
    'cross_accuracy': [0.28, 0.26, 0.22, 0.24, 0.31, 0.20],
    'touches_att_third': [650, 580, 400, 520, 610, 480],
}
df = pd.DataFrame(data)
# ---------- 2. 计算派生指标(按90分钟标准化)----------
df['per90'] = df['minutes'] / 90
df['assists_p90'] = df['assists'] / df['per90']
df['key_passes_p90'] = df['key_passes'] / df['per90']
df['xA_p90'] = df['xA'] / df['per90']
df['prog_passes_p90'] = df['progressive_passes'] / df['per90']
df['prog_carries_p90'] = df['progressive_carries'] / df['per90']
df['crosses_p90'] = df['crosses'] / df['per90']
df['att_third_touches_p90'] = df['touches_att_third'] / df['per90']
# 传中质量综合分 = 次数 × 成功率
df['cross_quality'] = df['crosses_p90'] * df['cross_accuracy']
# ---------- 3. 多指标加权评分 ----------
# 权重可根据战术需求调整(如传中型边卫提升传中权重)
weights = {
    'assists_p90': 0.25,
    'key_passes_p90': 0.20,
    'xA_p90': 0.15,
    'prog_passes_p90': 0.10,
    'prog_carries_p90': 0.10,
    'cross_quality': 0.10,
    'att_third_touches_p90': 0.10,
}
# Min-Max 归一化
def normalize(series):
    return (series - series.min()) / (series.max() - series.min() + 1e-9)
score = sum(normalize(df[col]) * w for col, w in weights.items())
df['assist_score'] = (score * 100).round(1)
# ---------- 4. 输出排名 ----------
result = df[['player', 'assists', 'assists_p90', 'xA_p90', 
             'key_passes_p90', 'assist_score']].sort_values(
    'assist_score', ascending=False)
print(result.to_string(index=False))
# ---------- 5. 可视化:雷达图对比 ----------
from matplotlib import rcParams
rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
rcParams['axes.unicode_minus'] = False
metrics = ['assists_p90', 'key_passes_p90', 'xA_p90', 
           'prog_passes_p90', 'prog_carries_p90', 
           'cross_quality', 'att_third_touches_p90']
labels = ['场均助攻', '场均关键传球', '场均xA', 
          '渐进传球', '带球推进', '传中质量', '三区触球']
def radar_chart(players):
    angles = np.linspace(0, 2*np.pi, len(metrics), endpoint=False).tolist()
    angles += angles[:1]
    fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
    for p in players:
        row = df[df['player'] == p].iloc[0]
        values = [normalize(df[m]).loc[df['player']==p].values[0] for m in metrics]
        values += values[:1]
        ax.plot(angles, values, label=p, linewidth=2)
        ax.fill(angles, values, alpha=0.15)
    ax.set_xticks(angles[:-1])
    ax.set_xticklabels(labels)
    ax.set_title('边后卫助攻能力雷达图', y=1.08)
    ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1))
    plt.tight_layout()
    plt.show()
radar_chart(['阿诺德', '特里皮尔', '坎塞洛'])

输出示例

player    assists  assists_p90  xA_p90  key_passes_p90  assist_score
阿诺德        12        0.39    0.34           2.73          82.5
特里皮尔       9        0.32    0.29           2.81          74.8
罗伯逊        8        0.27    0.24           2.11          62.3
坎塞洛        6        0.25    0.23           2.25          58.1
戴维斯        5        0.23    0.18           1.89          45.7
凯尔·沃克      3        0.11    0.10           1.13          22.4

进阶思路

  1. 数据源替换:用 soccerdata 库抓取 FBref 数据

    import soccerdata as sd
    fbref = sd.FBref(leagues="ENG-Premier League", seasons="2023-24")
    stats = fbref.read_player_season_stats(stat_type="passing")
  2. 分离"结果"与"过程":助攻数受队友终结能力影响大,加入 xA - 助攻差值 判断"运气"成分。

  3. 按战术类型分群:内收型边卫(如坎塞洛)与套边型边卫(如罗伯逊)应使用不同权重。

  4. 加入防守贡献:用 进攻贡献 / 防守失误 平衡评估,避免"高攻低守"球员被高估。

  5. 位置标准化:与同联赛同位置球员的百分位排名比较,而非绝对值。

注意事项

  • 样本量:出场时间 < 900 分钟的球员数据波动大,建议加权衰减。
  • 联赛强度:不同联赛数据需做系数调整。
  • 权重主观性:权重应依据球队战术(传中流/控球流)动态调整,可结合 PCA 或专家打分。

需要我补充 真实数据抓取 或 PCA降维评分 的代码吗?

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

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