一个被忽视的数据维度——开源项目中的数据记录现状与深度解析
目录导读
- 引言:门将传球,从“大脚解围”到“进攻发起点”的战术革命
- 核心问题:开源足球数据项目是否覆盖“门将传球成功率”?
- 主流开源项目盘点(StatsBomb、OpenFootball、Wyscout替代方案等)
- 字段级对比:哪些项目有,哪些没有,为什么?
- 数据缺失的技术与逻辑根源
- 事件数据 vs. 跟踪数据的差异
- 门将传球判定的“模糊地带”(短传、长传、解围球的界定)
- 如何获取并计算:即便项目未记录,你也能DIY
- 基于公开事件数据的SQL/Python计算逻辑
- 实战示例:从StatsBomb免费数据提取门将传球
- 问答环节:关于门将传球成功率的五个高频疑问
- 结论与展望:下一代开源数据将如何进化
引言:门将传球,从“大脚解围”到“进攻发起点”的战术革命
十年前,门将传球成功率还是一个几乎没人关注的冷门指标,彼时,门将的主要职责是扑救和指挥防线,传球不过是解围的附属品,随着瓜迪奥拉、克洛普等教练推动的“高位逼抢+后场出球”体系风靡全球,门将的脚下技术已成为现代足球的战术基石,埃德森、阿利松、诺伊尔等人之所以被视为“门卫”,正是因为其传球成功率能直接决定球队能否从后场化解压迫并启动进攻。

这一战术浪潮直接催生了数据行业对“门将传球成功率”的精细化需求,但对于开源足球数据社区而言,这个指标是否被完整记录,却是一个藏有暗礁的问题。
核心问题:开源足球数据项目是否覆盖“门将传球成功率”?
要回答这个问题,我们需要先明确“开源足球数据项目”的版图,目前全球最受认可的非商业或半开源项目主要有:
- StatsBomb (开放数据子集):提供了免费的事件数据(Event Data),涵盖英超、西甲、女足世界杯等上百场比赛,其数据模型非常精细,包含
pass事件的大部分字段,且明确区分了goal_kick(球门球)、pass(普通传球)等。在StatsBomb免费数据中,你可以找到门将作为player发起的pass事件,并计算成功率。 它的免费数据并不包含所有场次,且不包含“解围”类传球(其定义为clearance,不计入pass)。 - OpenFootball (由Google Research维护):这是一个更庞大的数据集,整合了多个商业数据源(目前主要来自Sportmonks和Opta的公开样例)。该项目的
events表中有pass事件,且带有pass_outcome字段(Complete/Incomplete/Out),但并未单独为“门将传球”设计标识,你需要通过position_id筛选门将,然后统计其传球。 问题在于,该数据源中门将的解围球(clearance)被单独记录为clearance事件,而门将用手接球后抛球(throw)则被记录为throw_in(或缺失),这会影响“传球成功率”的统计口径。 - 国际足球数据仓库 (如Kaggle上的各大比赛数据集):质量参差不齐,多数业余数据集只有射门、进球、角球等基础统计,几乎没有事件级别的门将传球记录。
开源项目并非“完全未记录”,但记录存在三个显著痛点:
- 口径不统一:有的把球门球(Goal Kick)算作传球,有的不算;有的把解围球排除,有的则混淆。
- 覆盖不完整:免费数据仅覆盖有限联赛/赛季,且缺乏历史深度。
- 缺乏专门字段:没有类似于
goalkeeper_pass_success的现成聚合字段,需要研究者自行清洗。
数据缺失的技术与逻辑根源
为什么看似简单的“门将传球成功率”难以在开源项目中统一?根源在于足球事件数据模型的“语义鸿沟”:
- 事件数据 vs. 跟踪数据:开源项目多为事件数据(记录了“谁在什么位置做了什么”),而非跟踪数据(每秒25次的全场坐标),事件数据只能判断传球是否到达队友脚下(结果),却无法还原“传球难度”、“受到压迫强度”等关键背景,很多项目为了简化,干脆不提供门将专属的传球判定。
- 解围球的归属模糊:门将面对逼抢时,一脚长传解围,到底是“传球”还是“解围”?在Opta体系中,这取决于防守压力和摆腿意图,但开源项目往往采用简单的规则,导致同一个动作在不同比赛中被分入不同类别。
- “成功率”分母的争议:门将传球成功率的严格定义应包含所有非解围性的有意图传球(包括地滚球、高空球、手抛球),但手抛球在多数数据源中不属于
pass事件,而是throw,这导致开源社区里普遍使用的“门将传球成功率”其实是“门将脚下球传球成功率”,而非“门将全部传球成功率”。
如何获取并计算:即便项目未记录,你也能DIY
即使项目没有现成字段,你依然可以从StatsBomb或OpenFootball的原始数据中自行计算,这里给出一个基于StatsBomb免费数据的Python计算逻辑示例:
import pandas as pd
# 假设你已经加载了StatsBomb的events.csv文件
df = pd.read_csv('events.csv')
# 筛选门将的传球事件(位置ID为1代表门将)
gk_passes = df[(df['position_id'] == 1) & (df['type_name'] == 'Pass')]
# 排除掉被标记为goalkick的传球(如果你希望只统计非球门球的普通出球,可保留)
# gk_passes = gk_passes[gk_passes['pass_goal_kick'] == False]
# 计算成功率:传球结果等于'Complete'视为成功
success = gk_passes[gk_passes['pass_outcome_name'] == 'Complete'].shape[0]
total = gk_passes.shape[0]
success_rate = success / total if total > 0 else 0
print(f"门将传球成功率: {success_rate:.2%}")
注意:StatsBomb中门将的手抛球类型为Throws,不在此代码统计范围内,若需包含,需额外筛选type_name == 'Throws'。
问答环节:关于门将传球成功率的五个高频疑问
Q1:为什么我看到的英超门将传球成功率有90%多,而有些门将只有60%?
A:因为统计口径不同,90%以上的数据通常只计算短传和地滚球(小于30码),而60%左右的数据可能包含了所有长传和被迫解围,在开源数据中,建议统一使用pass_goal_kick和pass_length字段进行过滤后再比较。
Q2:门将传球成功率真的能预测球队成绩吗? A:目前研究显示,该项指标与控球率、高强度压迫下的出球能力有正相关,但并非绝对因素,曼联的德赫亚在高压下传球成功率常年偏低,但球队排名依然靠前(因为有其他得分手段),该指标更适合与“预期传球威胁值”结合使用。
Q3:开源项目里有没有“预期传球成功率(xPass)”之类的高级衍生数据? A:绝大多数开源项目没有,xPass需要基于机器学习模型计算接球者控制半径、防守者距离等复杂变量,通常属于商业化的高阶数据,开源社区中,只有个别Kaggle竞赛或学术论文提供了小样本的xPass计算框架,但并非量产数据。
Q4:如果我要研究门将传球,应该优先选择哪个开源项目? A:首选StatsBrew(StatsBomb免费子集),因为其事件分类最接近战术语义;次选Wyscout公开样例(尽管不是开源,但部分学术研究可申请);最后才是OpenFootball,因为其数据清洗成本较高。
Q5:开源项目未来会记录门将传球成功率吗?
A:会,但速度很慢。 StatsBomb的新型赛事数据(如MLS)已经开始增加pass_type: 'goal_kick'和pass_type: 'throw'的精细标注,而社区驱动的项目正在通过众包方式补全历史数据,但受限于人力,真正意义上的“全球联赛全覆盖”仍需数年。
结论与展望:下一代开源数据将如何进化
回到最初的问题:开源项目是否记录了门将传球成功率? 答案是:部分记录,但远未标准化。 当前的主流项目更多地将“传球事件”与“门将身份”作为可筛选的维度,而将“成功率”的聚合计算留给用户去完成,这种“半成品”状态既是挑战,也是机会——它意味着任何研究者都可以通过自定义规则,提出更具解释力的门将出球分析框架。
展望未来,随着足球数据开源运动(如Open Tracking Data Initiative)的崛起,跟踪数据的免费化将彻底解决“传球是否被压迫”的问题,一旦门将传球时的对手间距、接球人跑动方向等数据公开,真正的“门将组织能力评分”将不再依赖粗糙的成功率。
而在更近的未来,建议所有足球数据分析爱好者:不要只盯住成功率一个数字。 请结合传球方向分布、平均传球距离、逆风成功率、禁区外传球意图等维度,构建更立体的门将数据画像,开源世界的魅力正在于此——数据就在那里,提炼与洞察的钥匙,永远在你手中。