综合python案例,中路渗透成功率如何?

wen python案例 1

本文目录导读:

综合python案例,中路渗透成功率如何?

  1. 先定义“中路渗透”
  2. Python 综合案例
  3. 更细粒度的分析
  4. 结论:中路渗透成功率大概是多少?
  5. 关键提醒

“中路渗透成功率”在足球数据分析里没有一个统一的官方口径,需要先定义清楚才能计算,下面我用一个综合 Python 案例来演示:如何从事件数据(如 StatsBomb 风格)中定义并计算“中路渗透成功率”,并给出可复用的代码框架。


先定义“中路渗透”

常见的一种可操作定义:

中路渗透 = 进攻方通过中央区域(球场宽度中间 1/3),用传球方式向前推进,并最终把球送入进攻三区或禁区的过程。

一次“中路渗透尝试”可以定义为:

  • 传球起点在中路区域(x 方向在中路,y 在中央 1/3)
  • 传球方向向前(终点 x > 起点 x)
  • 传球目标区域是更靠前的中路或禁区

“成功”可以定义为:

  • 传球成功(未被拦截)
  • 且球最终到达进攻三区(x > 60)或禁区(x > 83)

Python 综合案例

准备数据

假设我们有一份传球事件数据 passes.csv,字段如下:

字段 含义
match_id 比赛 ID
team 球队
player 球员
x_start, y_start 传球起点坐标(0–100 归一化)
x_end, y_end 传球终点坐标
completed 是否成功(1/0)
import pandas as pd
import numpy as np
# 读取数据
df = pd.read_csv("passes.csv")
# 球场坐标假设:x 0-100(纵向),y 0-100(横向)
# 中路:y 在 33.3 - 66.7 之间
def is_central(y):
    return (y >= 33.3) & (y <= 66.7)
# 进攻三区:x > 60
# 禁区:x > 83

标记“中路渗透尝试”

# 起点在中路
df["start_central"] = is_central(df["y_start"])
# 终点在中路
df["end_central"] = is_central(df["y_end"])
# 向前传球
df["forward"] = df["x_end"] > df["x_start"]
# 传球进入进攻三区或禁区
df["into_final_third"] = df["x_end"] > 60
df["into_box"] = df["x_end"] > 83
# 定义中路渗透尝试:
# 起点中路 + 向前 + 终点在中路或禁区方向
df["central_penetration_attempt"] = (
    df["start_central"]
    & df["forward"]
    & (df["end_central"] | df["into_box"])
)
# 成功:尝试 + 传球成功 + 到达进攻三区
df["central_penetration_success"] = (
    df["central_penetration_attempt"]
    & (df["completed"] == 1)
    & df["into_final_third"]
)

计算成功率

# 按球队统计
result = df.groupby("team").agg(
    attempts=("central_penetration_attempt", "sum"),
    successes=("central_penetration_success", "sum")
)
result["success_rate"] = result["successes"] / result["attempts"]
result = result.sort_values("success_rate", ascending=False)
print(result)

输出示例

team attempts successes success_rate
Team A 120 54 45
Team B 98 39 40
Team C 110 38 35

说明:以上为示例数据。真实成功率通常在 30%–50% 之间,取决于定义严格程度和联赛水平。


更细粒度的分析

按区域细分

# 把中路再分为:中后场、中场、前场
def zone(x):
    if x < 40:
        return "后场"
    elif x < 60:
        return "中场"
    else:
        return "前场"
df["start_zone"] = df["x_start"].apply(zone)
zone_stats = df[df["central_penetration_attempt"]].groupby(
    ["team", "start_zone"]
).agg(
    attempts=("central_penetration_attempt", "sum"),
    successes=("central_penetration_success", "sum")
)
zone_stats["success_rate"] = zone_stats["successes"] / zone_stats["attempts"]
print(zone_stats)

可视化

import matplotlib.pyplot as plt
result["success_rate"].plot(kind="bar", figsize=(8,5))"中路渗透成功率 by Team")
plt.ylabel("Success Rate")
plt.ylim(0, 0.6)
plt.show()

用 mplsoccer 画传球路线图

from mplsoccer import Pitch
pitch = Pitch(pitch_type='statsbomb', line_color='black')
fig, ax = pitch.draw(figsize=(10,7))
# 只画中路渗透尝试
subset = df[df["central_penetration_attempt"]]
for _, row in subset.iterrows():
    color = "green" if row["central_penetration_success"] else "red"
    pitch.arrows(
        row["x_start"], row["y_start"],
        row["x_end"], row["y_end"],
        color=color, ax=ax, width=1, headwidth=3
    )
"中路渗透尝试(绿=成功,红=失败)")
plt.show()

中路渗透成功率大概是多少?

根据不同定义和赛事数据:

定义 典型成功率
中路向前传球成功率 75%–85%(但多数是安全球)
中路渗透性传球(line-breaking)成功率 40%–55%
中路渗透进入进攻三区成功率 30%–45%
中路渗透进入禁区成功率 15%–25%
中路渗透最终形成射门转化率 5%–12%

综合结论:

  • 中路渗透”指向前推进型传球,成功率约 40%–55%。
  • 如果指真正打穿防线进入危险区域,成功率约 20%–35%。
  • 如果指最终转化为射门,成功率通常 低于 15%。

关键提醒

  1. 定义决定数字:不同口径下成功率差异很大,必须先明确“尝试”和“成功”的标准。
  2. 数据源影响结果:StatsBomb、Opta、Wyscout 的事件定义不同。
  3. 对手强度要控制:强队对弱队的中路渗透成功率会明显偏高。
  4. 建议用 xT / xG 加权:单纯看成功率会忽略传球风险和价值。

如果你能提供具体数据源(StatsBomb / Opta)和你想要的“中路渗透”定义,我可以帮你写一份完整可运行的 Python 分析脚本,直接算出你数据里的成功率。

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