本文目录导读:

在足球数据分析领域,“进攻三区传球成功率”(Final Third Pass Accuracy)通常指:球员或球队在对方后场最后三分之一区域内的成功传球数 ÷ 该区域内总传球尝试数。
开源项目里并没有一个统一、直接叫这个名字的现成指标,需要自己基于事件数据计算,下面按“开源数据源 → 计算逻辑 → 可用的开源项目”
常用开源/公开数据源
| 数据源 | 说明 | 是否含坐标 |
|---|---|---|
| StatsBomb Open Data | GitHub 上免费开放,含 360 度数据、传球坐标、终点坐标 | |
| Wyscout Open Data | Figshare 公开样本,含事件坐标 | |
| FBref | 网页数据,可爬取,但无逐事件坐标 | ❌(只有汇总) |
| Understat | xG 等,无传球坐标 | |
| Metrica Sports Sample | 公开样本事件数据 |
要做“进攻三区传球成功率”,必须用带坐标的逐事件数据,首选 StatsBomb Open Data。
计算逻辑(以 StatsBomb 为例)
- 确定进攻方向:每支球队进攻方向不同,需按
possession_team和半场翻转坐标,统一为“进攻方向 = x 增大”。 - 划分三区:球场长 120(StatsBomb 坐标),进攻三区通常指 x > 80(即最后 40 码/约 1/3)。
- 筛选传球事件:
type == "Pass"。 - 判断起点是否在进攻三区:
pass.start_x > 80(有的口径用终点,需明确)。 - 统计:
- 总传球 = 该区域内所有 Pass
- 成功传球 =
pass.outcome为空(StatsBomb 中成功传球无 outcome 字段) - 成功率 = 成功 / 总
# 伪代码
final_third_passes = df[
(df.type == "Pass") &
(df.pass_start_x > 80) # 进攻三区
]
success = final_third_passes[final_third_passes.pass_outcome.isna()]
accuracy = len(success) / len(final_third_passes)
可参考的开源项目
-
statsbomb/open-data(GitHub)
官方开放数据,含逐事件坐标,是计算基础。
-
mckayjohns/Football_Analytics(GitHub)
有大量 StatsBomb 数据可视化与指标计算示例,可改成进攻三区传球。
-
socceraction(GitHub,ML-KULeuven)
把事件数据转成 SPADL 格式,统一坐标,方便按区域统计。
-
mplsoccer(GitHub)
画传球图、分区图,常配合 StatsBomb 使用。
-
FBref / fbref-scraper
若只要球队级汇总,FBref 有 “Final Third” 相关传球数据(部分联赛),可直接爬。
-
understat / understatapi
无传球区域数据,不适用。
注意事项
- 口径差异:起点在进攻三区 vs 终点在进攻三区,结果不同;是否含传中、角球、界外球也要定义。
- 坐标翻转:StatsBomb 每队进攻方向不同,必须统一,否则区域判断会错。
- 成功定义:StatsBomb 中“成功传球”= 无 outcome;被拦截、出界、被断都算失败。
- 样本量:单场进攻三区传球可能只有几十次,成功率波动大,建议多场累计。
如果你告诉我你用的是 StatsBomb 还是 Wyscout,以及要球员级还是球队级,我可以给你一段能直接跑的完整 Python 代码。