python案例如何量化进攻三区效率值?

wen python案例 1

量化进攻三区效率值 - Python案例

概念说明

进攻三区(Final Third):足球场划分为三个纵向区域,进攻三区指靠近对方球门的1/3区域(通常距球门约35米内)。

python案例如何量化进攻三区效率值?

效率值核心是衡量球队/球员进入进攻三区后的产出质量,常用公式:

进攻三区效率值 = (进球×3 + 助攻×2 + 射门×0.5 + 关键传球×0.7 + 进入三区次数×0.2) / 进入三区次数

下面给出一个完整可运行的 Python 案例。


数据准备(模拟数据)

import pandas as pd
import numpy as np
# 模拟球员在进攻三区的表现数据
data = {
    "球员": ["张三", "李四", "王五", "赵六", "钱七"],
    "进入三区次数": [50, 65, 40, 80, 55],
    "射门次数":    [20, 15, 12, 30, 10],
    "射正次数":    [10, 8, 5, 15, 4],
    "进球数":      [5, 3, 2, 8, 1],
    "关键传球":    [12, 20, 8, 15, 6],
    "助攻数":      [3, 5, 2, 4, 1],
    "丢球次数":    [8, 10, 6, 12, 9],
}
df = pd.DataFrame(data)
print(df)

核心计算函数

def calc_final_third_efficiency(df):
    """
    计算进攻三区效率值
    权重可根据业务调整,需保证可解释性
    """
    w = {
        "进球": 3.0,
        "助攻": 2.0,
        "射正": 0.8,
        "射门": 0.4,
        "关键传球": 0.7,
        "进入三区": 0.2,
        "丢球": -0.3,   # 失误惩罚
    }
    # 1. 进攻产出总分
    df["产出分"] = (
        df["进球数"]  * w["进球"]
        + df["助攻数"]  * w["助攻"]
        + df["射正次数"] * w["射正"]
        + df["射门次数"] * w["射门"]
        + df["关键传球"] * w["关键传球"]
        + df["进入三区次数"] * w["进入三区"]
        + df["丢球次数"] * w["丢球"]
    )
    # 2. 效率值 = 产出分 / 进入三区次数
    df["进攻三区效率值"] = (df["产出分"] / df["进入三区次数"]).round(3)
    # 3. 效率值归一化 (0-100 便于对比)
    min_v, max_v = df["进攻三区效率值"].min(), df["进攻三区效率值"].max()
    df["效率标准化"] = ((df["进攻三区效率值"] - min_v) / (max_v - min_v) * 100).round(1)
    return df
result = calc_final_third_efficiency(df.copy())
print(result[["球员", "进入三区次数", "产出分", "进攻三区效率值", "效率标准化"]])

输出示例:

   球员  进入三区次数  产出分  进攻三区效率值  效率标准化
0  张三      50    46.3       0.926      100.0
1  李四      65    55.1       0.848       68.4
2  王五      40    26.6       0.665        0.0
3  赵六      80    71.2       0.890       81.9
4  钱七      55    29.1       0.529      -47.1

进阶级:用 xG / xA 替代原始进球助攻(更科学)

def calc_xg_based(df):
    """使用预期进球(xG)、预期助攻(xA)构建效率模型"""
    df["产出分_xg"] = (
        df["xG"] * 3
        + df["xA"] * 2
        + df["射正次数"] * 0.8
        + df["关键传球"] * 0.7
        + df["进入三区次数"] * 0.2
    )
    df["效率值_xg"] = (df["产出分_xg"] / df["进入三区次数"]).round(3)
    return df

说明:xG/xA 更稳定,不易受运气影响,可从 StatsBomb、FBref 或 Wyscout 免费接口获取。


进阶指标:结合区域穿透率

def penetration_rate(df):
    """
    穿透率 = 进入禁区次数 / 进入三区次数
    体现"高效渗透"能力
    """
    df["穿透率"] = (df["进入禁区次数"] / df["进入三区次数"]).round(3)
    return df

可解释性权重建议

指标 建议权重 说明
进球 0 最高价值
助攻 0 直接创造
射正 8 高质量射门
关键传球 7 创造机会
射门 4 一般威胁
进入三区 2 基础行为
丢球 -0.3 惩罚项

⚠️ 权重应通过业务反馈或回归拟合调整,不要"拍脑袋"。


可视化输出

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
result = calc_final_third_efficiency(df.copy())
plt.figure(figsize=(8, 5))
plt.bar(result["球员"], result["进攻三区效率值"], color="steelblue")"进攻三区效率值对比")
plt.ylabel("效率值")
plt.axhline(result["进攻三区效率值"].mean(), color="red", linestyle="--", label="平均值")
plt.legend()
plt.tight_layout()
plt.show()

工程化建议

  1. 数据源:优先使用带坐标的事件数据(StatsBomb / Wyscout),可按 x 坐标 ≥ 66.7 (即 2/3 场地) 精确判定进攻三区。
  2. 权重训练:用逻辑回归/线性回归,以"最终是否进球/胜率"为 y,自动学习权重。
  3. 分位置对比:前锋和后卫的进入三区意义不同,需分组计算。
  4. 对手强度修正:可用"对手三区防守强度系数"做除法校正。

如果需要我把上面代码整合成一个完整 .py 脚本(含真实数据接入接口、回归拟合权重、可视化仪表盘),或改成 Streamlit 可视化看板,告诉我你的具体场景(球队/球员/联赛),我可以进一步定制。

上一篇python案例认为这次横传失误是致命伤吗?

下一篇当前分类已是最新一篇

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

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