开源项目统计高球传中争顶成功率?

wen 开源项目 5

本文目录导读:

开源项目统计高球传中争顶成功率?

  1. 为什么这个指标难以直接获取
  2. 可用的开源数据源
  3. 自行计算的处理流程
  4. 相关开源项目参考

高球传中争顶成功率”的统计,目前在开源体育数据项目中没有现成的、可直接调用的标准化指标,原因在于这个指标需要同时融合事件数据(传中)和空间/身体对抗数据(争顶),而多数开源项目只覆盖其中一部分。

下面按数据源、计算逻辑和可落地项目三个层面来说明。


为什么这个指标难以直接获取

“高球传中争顶成功率”拆解后涉及三个子问题:

子指标 数据需求 开源覆盖情况
高球传中识别 传球事件 + 起脚位置(边路/底线)+ 传球高度(高球) StatsBomb 开放数据可支持
争顶事件 空中对抗(Aerial Duel)事件 部分开源数据集有
成功率归属 传中后第一落点争顶是否被进攻方赢下 需要事件序列关联,无现成字段

关键难点:传中事件与随后的争顶事件之间没有天然的外键关联,需要按时间窗口(3–5 秒)和空间距离做事件链接,这是自行开发的部分。


可用的开源数据源

  1. StatsBomb Open Data(GitHub: statsbomb/open-data)

    • 提供 360 冻结帧(部分赛事)、传球事件含 pass.height(高球/低球)、pass.cross(是否传中)字段。
    • 有 duel 事件类型,含 aerial_won 字段。
    • 最接近需求,但需要自己写事件关联逻辑。
  2. Wyscout 公开数据集(部分研究用版本)

    • 有 Cross 和 Air Duel 标签,但公开版赛事有限。
  3. FBref / Opta 衍生数据

    • FBref 有球队级“传中成功率”和“空中对抗成功率”,但不是传中后争顶的联合指标,且为聚合数据。
  4. Socceraction / kloppy(开源库)

    用于事件数据标准化和 SPADL 转换,可作为预处理工具,但不直接产出该指标。


自行计算的处理流程

若基于 StatsBomb 开放数据,典型 pipeline:

筛选 pass.cross == True 且 pass.height == "High Pass"
2. 定位传中事件的时间戳 t 和落点坐标 (end_location)
3. 在 [t, t+5s] 窗口内检索 duel 事件,type=aerial
4. 用落点坐标与 duel 位置做距离匹配(阈值 ~15m)
5. 判断该 aerial duel 的 winner 是否为传中方球队
6. 成功率 = 进攻方赢下争顶次数 / 高球传中总次数

伪代码示意:

crosses = events[(events.type=="Pass") & 
                 (events.pass_cross==True) & 
                 (events.pass_height=="High Pass")]
success = 0
for c in crosses:
    window = events[(events.timestamp > c.timestamp) & 
                    (events.timestamp < c.timestamp+5) &
                    (events.type=="Duel") & 
                    (events.duel_type=="Aerial")]
    # 空间匹配
    match = window[dist(window.location, c.pass_end_location) < 15]
    if not match.empty and match.iloc[0].team == c.team:
        success += 1
rate = success / len(crosses)

相关开源项目参考

  • socceraction(ML-KULeuven):事件数据 → SPADL,便于构建自定义指标。
  • kloppy:多源事件数据统一接口。
  • mplsoccer:可视化传中和争顶落点热图。
  • statsbombpy:StatsBomb 数据 Python 封装,快速取数。

目前没有一个开源仓库直接输出“高球传中争顶成功率”这一指标,需要基于上述工具自行搭建,如果你需要,我可以帮你写一个完整的 StatsBomb 数据计算脚本。

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