本文目录导读:

在足球数据分析(尤其基于开源项目如 StatsBomb Open Data、Wyscout、Metrica、SoccerMap 等)中,“进攻三区传球成功率”通常不是一个项目直接给出的字段,而是需要自己按坐标过滤后计算,下面给你一个可直接落地的定义与算法。
概念定义
进攻三区(Final Third / Attacking Third):一般指球场纵向靠对方球门的 1/3 区域。
- 以进攻方向为准:x 从 2/3 场到对方底线 的区域
- StatsBomb 坐标:场地长 120,进攻三区为 x ≥ 80
- Opta/Wyscout 坐标:场地长 100,进攻三区为 x ≥ 66.7
- 若以 105m 场地:进攻三区为 x ≥ 70
传球成功率:
[ \text{成功率} = \frac{\text{成功传球数}}{\text{总传球数}} \times 100\% ]
进攻三区传球成功率:
[ \frac{\text{传球起点在进攻三区且成功的传球数}}{\text{传球起点在进攻三区的总传球数}} ]
注意:有的项目按“传球终点在进攻三区”或“传球起点或终点任一在进攻三区”统计,口径不同结果差异很大,最常见口径是 传球起点位于进攻三区。
基于 StatsBomb Open Data 的计算示例
StatsBomb 事件数据里,传球事件字段:
{
"type": {"name": "Pass"},
"location": [x, y],
"pass": {
"outcome": {"name": "Incomplete"} // 没有 outcome 表示成功
}
}
Python 示例
import pandas as pd
from statsbombpy import sb
# 1. 读取某场比赛事件
events = sb.events(match_id=3788741) # 示例 match_id
# 2. 只保留传球
passes = events[events['type'] == 'Pass'].copy()
# 3. 提取传球起点坐标
passes['x'] = passes['location'].apply(lambda loc: loc[0] if isinstance(loc, list) else None)
passes['y'] = passes['location'].apply(lambda loc: loc[1] if isinstance(loc, list) else None)
# 4. 判断是否在进攻三区(StatsBomb: x >= 80)
att_third = passes[passes['x'] >= 80]
# 5. 判断成功:pass.outcome 为空即成功
att_third['success'] = att_third['pass_outcome'].isna()
# 6. 计算成功率
success_rate = att_third['success'].mean() * 100
print(f"进攻三区传球成功率: {success_rate:.2f}%")
print(f"样本传球数: {len(att_third)}")
按球员汇总
result = (
att_third
.groupby('player')['success']
.agg(['mean', 'count'])
.rename(columns={'mean': '成功率', 'count': '传球数'})
)
result['成功率'] = (result['成功率'] * 100).round(2)
result = result[result['传球数'] >= 5] # 过滤样本过小
print(result.sort_values('成功率', ascending=False))
不同开源项目里的对应字段
| 项目 | 坐标 | 进攻三区阈值 | 成功率字段 |
|---|---|---|---|
| StatsBomb Open Data | 120×80 | x ≥ 80 | pass.outcome 为空 |
| Wyscout | 100×100 | x ≥ 66.7 | eventName == "Pass" + tags |
| Metrica | 归一化 0–1 | x ≥ 0.667 | 需自建 |
| Opta (公开样本) | 100×100 | x ≥ 66.7 | outcome == 1 |
| SoccerMap | 105×68 | x ≥ 70 | 需自建 |
| FBref (基于 StatsBomb/Opta) | 不直接提供 | 需从事件数据算 |
常见坑
- 坐标方向不统一:有的项目已把进攻方向统一,有的按主客队翻转,需先标准化。
- 定位球是否计入:角球、任意球常被单独剔除,否则会拉低成功率。
- 传中是否计入:传中成功率天然低,是否算“传球”要看口径。
- 样本量:单场进攻三区传球可能只有 20–60 次,按球员分组后样本更小,建议多场累计。
- “成功”定义:StatsBomb 里
outcome缺失=成功;Opta 里outcome=1=成功,别搞反。
典型数值参考
- 全队进攻三区传球成功率:65%–80%
- 顶级中场球员:75%–85%
- 边锋/前锋:65%–78%
- 传中占比高的球员:可能低至 55%–65%
如果你告诉我你用的是哪个开源项目(StatsBomb / Wyscout / Metrica / 自建),我可以给你针对该数据集字段名的完整计算脚本,包括坐标翻转、定位球过滤和按球员/球队汇总。