本文目录导读:

在足球数据分析(尤其是开源项目,如基于 StatsBomb、Wyscout 或 Metrica 数据的项目)中,“界外球进攻威胁次数”并不是一个标准化的通用指标,需要先定义清楚才能统计,下面分几层说明。
先明确概念
界外球(Throw-in):球出边线后用手掷入恢复比赛。
“进攻威胁”在开源数据里通常没有现成字段,需要自己定义,常见的可操作定义有:
| 威胁定义方式 | 说明 | 数据依赖 |
|---|---|---|
| 界外球后 N 秒内射门 | 最常用、最客观 | 事件数据(时间戳+射门) |
| 界外球后 N 秒内进入进攻三区/禁区 | 中等强度 | 事件坐标 |
| 界外球后形成 xG > 阈值的机会 | 较严格 | 需 xG 模型 |
| 界外球直接导致进球/助攻 | 最严格但样本少 | 事件+进球 |
| 界外球本身引发的 xT(威胁值)增量 | 进阶 | 需 xT 模型 |
统计界外球进攻威胁次数”= 先选一个威胁定义,再对界外球事件做后续窗口筛选。
开源数据源推荐
-
StatsBomb Open Data(GitHub:
statsbomb/open-data)- 含事件级数据,有
Throw-in事件类型、坐标、时间戳、射门事件。 - 免费,适合做“界外球→N秒内射门”的统计。
- 含事件级数据,有
-
Wyscout 公开数据(
koenvo/wyscout-soccer-match-event-dataset等)有事件类型和坐标,但界外球标注不如 StatsBomb 细。
-
Metrica Sports Sample Data
含 tracking 数据,可做更精细的空间威胁分析,但样本小。
-
FBref / Understat
只有聚合统计,没有逐事件界外球,不适合做这个指标。
统计逻辑(以 StatsBomb 为例)
伪代码思路:
威胁次数 = 0
for 每个界外球事件 T:
team = T.team
t0 = T.timestamp
# 看接下来 W 秒内同队的事件
后续 = 同队事件 where t0 < time <= t0 + W
if 后续中存在射门事件:
威胁次数 += 1
关键参数:
- 时间窗口 W:常用 5s、10s、15s,W 越大命中越多,但噪声也大。
- 是否要求控球权:若界外球后对方先触球,通常不算“该界外球制造的威胁”。
- 是否区分前场/后场界外球:前场界外球威胁天然更高,通常分开统计。
更严谨的做法(推荐)
- 控球序列法:把界外球视为一次 possession 的起点,看这个 possession 是否以射门/xG 结束。
- xT 增量法:计算界外球掷出前后球位置的 xT 变化,若显著上升则记为“威胁界外球”。
- 分区域统计:按界外球发生位置(防守三区/中场/进攻三区)分别统计威胁率。
现成可参考的开源项目
statsbomb/open-data+ 自写脚本(最常见做法)socceraction(ML-KULeuven):提供 xT、VAEP 框架,可用来给界外球后的动作打分mplsoccer:可视化界外球位置与后续威胁kloppy:统一读取不同供应商的事件数据
没有一个开源项目直接输出“界外球进攻威胁次数”这个指标,你需要:
- 选数据源(推荐 StatsBomb Open Data)
- 定义威胁(推荐“界外球后 10 秒内同队射门”或“该 possession 产生 xG>0.05”)
- 写脚本按界外球事件向后开窗统计
如果你告诉我你手头用的是哪套数据(StatsBomb / Wyscout / 其他),我可以给你一段可直接运行的 Python 统计代码。