本文目录导读:

你想统计的是足球比赛里“高球传中 → 争顶 → 成功”这一链条的成功率,这类统计没有统一现成按钮,通常要按“事件定义 + 数据源 + 工具链”自己搭,下面给你一套可落地的方案。
先定义清楚指标
建议拆成三层,避免“传中成功率”和“争顶成功率”混在一起:
| 指标 | 定义 | 分母 | 分子 |
|---|---|---|---|
| 高球传中次数 | 进攻三区/边路起球,且飞行轨迹为高空球 | 事件计数 | |
| 传中争顶次数 | 传中落点附近发生空中对抗 | 高球传中次数 | 有争顶的传中 |
| 争顶成功率 | 争顶中本方赢得第一点 | 争顶次数 | 本方争顶成功 |
| 传中→争顶→成功转化率 | 高球传中最终由本方赢得第一点 | 高球传中次数 | 本方争顶成功 |
关键口径要固定:传中区域(边路/禁区外)、高球判定(是否限制高度/弧线)、争顶是否只算第一落点、是否区分进攻/防守方。
数据源选择
- 商业事件数据:StatsBomb、Opta、Wyscout、InStat、SkillCorner,好处是有
cross、aerial_duel、pass_height等标签,能直接筛。 - 公开数据:StatsBomb Open Data(部分比赛)、FBref(统计汇总,缺逐事件传中落点)、Understat(偏射门)。
- 自采视频:用录像 + 标注工具,成本高但口径完全可控。
如果只是做球队/球员汇总,FBref 的 “Pass Types → Crosses” 和 “Aerial Duels” 能拼出近似值;要做“传中→争顶”链条,必须用逐事件数据(event data)。
工具链推荐
方案 A:Python + 事件数据(最常用)
pandas做事件表筛选与聚合mplsoccer/statsbombpy读 StatsBomb 数据并画传中落点图numpy做成功率与置信区间
伪代码逻辑:
# 1. 筛高球传中
crosses = events[(events.type == "Pass") &
(events.pass_cross == True) &
(events.pass_height == "High Pass")]
# 2. 找传中后 N 秒内、落点附近的争顶
# 3. 标记争顶获胜方
# 4. 聚合
rate = won_duels / len(crosses)
方案 B:SQL + 数据仓库
把事件表导入 PostgreSQL/DuckDB,用窗口函数找“传中后最近一次空中对抗”,适合批量跑联赛/赛季。
方案 C:BI 工具
Power BI / Tableau 接事件表,做筛选器(球队、区域、时间段),适合教练组看板,但事件关联逻辑要先在 SQL/Python 里处理好。
方案 D:视频标注
用 Kinovea / SportsCode / 自建标注页,人工标“传中起点、落点、争顶结果”,再导入 Excel 统计,适合青训或没有事件数据的比赛。
统计时容易踩的坑
- 传中不等于高球:低平球传中要排除,否则争顶率被稀释。
- 争顶窗口:传中后 2–3 秒内的空中对抗才算,避免把后续二次进攻算进来。
- 落点距离阈值:传中落点与争顶位置距离设 5–10 米阈值,否则关联错事件。
- 方向性:要区分“本方传中后争顶”和“对方解围后争顶”,否则成功率会失真。
- 样本量:单场传中争顶样本常 <20,建议按多场/赛季聚合,并给置信区间。
最小可行流程
- 取一个赛季的事件数据(StatsBomb/Wyscout)
- 用 Python 筛
cross + high pass - 用时间窗 + 空间距离关联
aerial_duel - 输出球队/球员的:高球传中数、有争顶传中数、争顶成功数、转化率
- 用 mplsoccer 画传中落点与争顶成功热图
如果你告诉我你手头的数据格式(StatsBomb JSON / Opta CSV / 自己标的 Excel)和目标(球队看板还是球员报告),我可以把字段映射和统计脚本直接写给你。
标签: 争顶成功率