本文目录导读:

- 情况 1:基于 StatsBomb 360 数据(如
statsbombpy、kloppy) - 情况 2:基于 “OpenFootball” 或 “understat” 数据
- 情况 3:项目自带“战术面板”功能(如社区开源的
Soccer Action AI) - 🙋 如果你没有具体项目,只是想找现成代码
要回答这个问题,首先需要明确你指的是哪个开源项目。
因为“横传转移球”是足球数据分析中的高级指标,不同的开源项目(如 StatsBomb、 或 各种基于事件数据的分析库)对它的定义和统计方式完全不同。
为了给你最准确的答案,请先告诉我项目名称或仓库地址,我可以先根据市面上主流的几类开源足球分析项目,分情况说明它们是否以及如何统计“横传转移球”:
情况 1:基于 StatsBomb 360 数据(如 statsbombpy、kloppy)
- 是否有该数据? 有。
- 如何统计? StatsBomb 官方定义的指标叫 “Switch of Play(转移)”、“Passes to Final Third” 等。
- Switch of Play(转移球):指传球跨越了较大的横向距离(通常跨越中线或禁区宽度),且改变了进攻方向。
- 在
kloppy或statsbombpy中,你可以通过筛选pass事件,计算传球起终点坐标的X轴(横向)差值,如果差值大于某个阈值(25 米),且 Y 轴方向发生改变,即可视为横传转移。
- 注意:开源项目本身提供的是原始事件流,并不会直接给出一张“本场转移次数”的聚合图,这需要你自己用 Pandas 去算。
情况 2:基于 “OpenFootball” 或 “understat” 数据
- 是否有该数据? 没有直接的“转移”分类。
- 如何统计? 这些项目只提供基础的
x(横向)和y(纵向)坐标,通常的做法是写自定义函数:- 过滤出
type为Pass的数据。 - 计算
abs(start_x - end_x)(横向位移绝对值)。 - 如果横向位移 > 20 码/米,且纵向推进距离较小,且传球方向与整体进攻方向相反,就人工判定为“横传转移”。
- 过滤出
情况 3:项目自带“战术面板”功能(如社区开源的 Soccer Action AI)
- 是否有该数据? 取决于该项目的模型训练。
- 许多结合了计算机视觉(CV)的项目,会直接调用预置的“StatsBomb 事件库”,这种情况下输出结果中通常包含
switch_of_play字段,如果该字段为True,即为一次横传转移。
🙋 如果你没有具体项目,只是想找现成代码
你可以直接搜索 opensource football pass switch,比较热门的推荐是 Football-Analytics 系列仓库(国外博主 ersanyamarya 的项目),这个项目里有现成的函数,
def passes_between_zones(df, own_goal, opp_goal):
# 通常这叫 zone passes,里面会有一列专门标记 “Tempo” 或 “Switch”
请回复一下:
- 项目名字/链接是什么?
- 你使用的是哪种数据源(英超/欧洲杯等)?
我可以直接告诉你在那个项目里该调用哪个函数,或者修改哪个参数来统计出横传次数。