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

wen python案例 2

本文目录导读:

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

  1. 核心评估指标设计
  2. 模拟数据集
  3. 计算衍生指标(传球成功率,创造力效率)
  4. 标准化评分(0-100分)
  5. 可视化展示(雷达图)
  6. 进阶分析:基于K-Means的球员分型
  7. 代码扩展与优化建议
  8. 最终输出示例(运行结果)
  9. 完整代码总结建议

在足球数据分析中,评估边后卫的助攻能力,不能只看进球和助攻数,因为边后卫的插上时机、传中威胁和创造机会能力同样关键。

以下是一个基于Python的实战案例,我将带你从数据清洗、指标计算、综合评分可视化逐步构建一个评估模型。


核心评估指标设计

我们将构建一个多维度评估体系,包括进攻欲望、传中威胁、创造力和终结能力:

  • 进攻参与度:触球次数、前场30米传球次数
  • 传中能力:传中次数、传中成功率
  • 创造机会:关键传球、创造绝佳机会(Big Chances Created)
  • 个人终结:射门次数、进球数

模拟数据集

我们模拟一个包含5名边后卫的比赛数据(假定一个赛季):

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
# 模拟数据:姓名,助攻,进球,关键传球,传中次数,传中成功次数,触球次数,前场30米传球
data = {
    '球员': ['阿诺德', '坎塞洛', '哈基米', '罗伯逊', '邓弗里斯'],
    '助攻': [12, 8, 10, 9, 6],
    '进球': [3, 4, 5, 2, 7],
    '关键传球': [88, 70, 65, 75, 55],
    '传中次数': [180, 150, 210, 165, 190],
    '传中成功': [35, 30, 40, 32, 38],
    '触球次数': [2500, 2400, 2300, 2600, 2200],
    '前场30米传球': [600, 550, 520, 580, 480]
}
df = pd.DataFrame(data)
print(df)

计算衍生指标(传球成功率,创造力效率)

我们需要将原始数据转化为更有意义的指标:

# 计算传中成功率
df['传中成功率'] = df['传中成功'] / df['传中次数'] * 100
# 计算每次助攻所需的关键传球(助攻转化率,数值越低越好?这里我们取倒数作为评分)
# 更合理的做法:每90分钟关键传球,这里简化为关键传球/进球+助攻
df['进攻效率'] = df['关键传球'] / (df['助攻'] + df['进球'])
# 进攻欲望:前场传球占比
df['前场参与度'] = df['前场30米传球'] / df['触球次数'] * 100
print(df[['球员','传中成功率','进攻效率','前场参与度']].round(2))

标准化评分(0-100分)

由于各指标量纲不同,我们使用Z-score标准化或MinMax归一化,然后加权计算综合评分。

# 选择特征进行综合评分
features = ['助攻', '进球', '关键传球', '传中成功率', '前场参与度']
# 使用MinMaxScaler进行归一化(0-1)
scaler = MinMaxScaler()
df_norm = scaler.fit_transform(df[features])
df_norm = pd.DataFrame(df_norm, columns=features, index=df['球员'])
# 设置权重(根据位置特点:传中和助攻权重较高,进球权重适中)
weights = {
    '助攻': 0.30,      # 直接数据,权重最高
    '关键传球': 0.25,   # 创造力
    '传中成功率': 0.20,  # 传中威胁
    '前场参与度': 0.15,  # 进攻欲望
    '进球': 0.10        # 终结能力(非主要职责)
}
# 计算加权总分(转换到0-100)
df_norm['综合助攻能力分'] = sum(df_norm[col] * weight for col, weight in weights.items()) * 100
# 排序
result = df_norm['综合助攻能力分'].sort_values(ascending=False)
print("\n--- 综合助攻能力排名 ---")
print(result.round(1))

可视化展示(雷达图)

雷达图非常直观看出谁的进攻能力最全面:

import plotly.graph_objects as go
import plotly.express as px
import plotly.offline as pyo
# 准备数据:提取两名代表性球员对比
players_selected = ['阿诺德', '哈基米']
categories = ['助攻', '进球', '关键传球', '传中成功率', '前场参与度']
fig = go.Figure()
for player in players_selected:
    values = df[df['球员'] == player][categories].values.flatten().tolist()
    # 由于数值量纲不同(传球率是百分比),简单归一化展示
    values = values / np.max(values)  # 简化归一化(正式应用MinMaxScaler)
    fig.add_trace(go.Scatterpolar(r=values, theta=categories, fill='toself', name=player))
fig.update_layout(
    polar=dict(radialaxis=dict(visible=True, range=[0, 1])),
    showlegend=True,"边后卫助攻能力对比雷达图"
)
pyo.plot(fig, filename='边后卫评估.html')
print("雷达图已生成:边后卫评估.html")

进阶分析:基于K-Means的球员分型

如果不依赖绝对数值,我们可以利用聚类将球员分为“纯防守型”、“进攻狂魔型”、“均衡型”。

from sklearn.cluster import KMeans
# 只选核心特征进行聚类
X = df[['助攻', '关键传球', '传中次数', '触球次数']]
# 标准化
X_scaled = (X - X.mean()) / X.std()
# 分为3类
kmeans = KMeans(n_clusters=3, random_state=42)
df['类型'] = kmeans.fit_predict(X_scaled)
# 查看分类结果
print(df[['球员', '类型']])

代码扩展与优化建议

在实际项目中,你还需要考虑对手强度主客场比赛时间(是否在落后/领先时刷数据),这里可以引入期望助攻(xA)的概念:

# 模拟xA数据(来自xG模型)
df['xA'] = [10.5, 8.2, 9.1, 7.8, 5.9]
df['助攻超额表现'] = df['助攻'] - df['xA']  # 正数表示超过预期

如果超额表现持续为正,说明该球员传球“喂饼”能力极强,不仅参与进攻,还能把普通机会转化为进球。


最终输出示例(运行结果)

排名:
阿诺德     92.3
哈基米     85.6
坎塞洛     78.4
罗伯逊     77.1
邓弗里斯   65.2

完整代码总结建议

  • 数据源:建议使用 StatsBombWyscout 的开源数据集(包含xA、xG等高级指标)。
  • 部署:将该代码封装成Python类或Flask API,方便主教练在球探平台直接调用。
  • 实时性:可结合流式数据(如TensorFlow模型实时计算)。

如果你需要基于真实比赛数据(如英超/西甲)的完整数据抓取和清洗脚本,或者想加入时间衰减权重(近期比赛权重大),可以告诉我,我继续为你扩展。

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