遇见数据集

luxury-lakehouse/statsbomb-shots-on-target

收藏
Hugging Face2026-05-13 更新2026-04-12 收录
官方服务:

资源简介:

--- language: [en] license: cc-by-4.0 task_categories: - tabular-classification tags: - sports-analytics - soccer - football - goalkeeper - expected-goals - psxg - shots - statsbomb size_categories: - 10K-100K configs: - config_name: default data_files: - split: train path: "data/*.parquet" default: true --- # StatsBomb On-Target Shots — Goalmouth Coordinates **~15K on-target shots** from [StatsBomb Open Data](https://github.com/statsbomb/open-data) with goalmouth coordinates (`end_location_y`, `end_location_z`). Primary training input for the [PSxG model](https://huggingface.co/luxury-lakehouse/psxg-model) used in goalkeeper shot-stopping evaluation. Part of the (Right! Luxury!) Lakehouse soccer analytics platform. ## ⚠️ Schema change (cut-over 2026-07-22) This dataset emits both legacy and canonical Kimball key columns side-by-side. The legacy `match_id` column will be removed on **2026-07-22** (90-day dual-column window opened at the PR 3 ship on 2026-04-22, per [ADR-011](https://github.com/karsten-s-nielsen/luxury-lakehouse/blob/main/docs/superpowers/adrs/ADR-011-unified-kimball-match-dimension.md)): | Legacy column | Canonical replacement | Notes | |---|---|---| | `match_id` | `match_key` | BIGINT Kimball surrogate; collision-free across providers | Both columns are populated during the window. Update consumer code to read `match_key` before the cut-over date; after cut-over the legacy `match_id` column is removed. ## Quick Start ```python from datasets import load_dataset ds = load_dataset("luxury-lakehouse/statsbomb-shots-on-target") df = ds["train"].to_pandas() print(f"{len(df)} on-target shots") # Goal rate by goalmouth zone df["height_zone"] = df["end_location_z"].apply( lambda z: "high" if z > 0.6 else ("mid" if z > 0.3 else "low") ) df.groupby("height_zone")["is_goal"].mean() ``` > **Explore interactively:** [Soccer Analytics App](https://huggingface.co/spaces/luxury-lakehouse/soccer-analytics-app) ## What Is This Dataset? This dataset contains every on-target shot from the StatsBomb open data collection that includes goalmouth coordinates. It is the training corpus for the PSxG (Post-Shot Expected Goals) model, which estimates the probability that an on-target shot becomes a goal given where it was headed. Only shots with `shot_outcome` in `{Saved, Goal, Post}` are included. Blocked shots and wayward shots are excluded because they never reach the goalkeeper. ## Data Fields | Column | Type | Description | |--------|------|-------------| | `event_id` | `string` | Unique StatsBomb event identifier | | `match_key` | `Int64` | **Canonical Kimball match FK** (ADR-011). BIGINT surrogate, collision-free across providers. | | `match_id` | `Int64` | LEGACY provider-native match identifier; sunset 2026-07-22 (see top-of-card). | | `player_id` | `Int64` | Shooter player identifier | | `player_key` | `Int64` | **Canonical Kimball player FK** (PR 7, ADR-011). BIGINT surrogate. | | `team_id` | `Int64` | Shooter's team identifier (provider-native) | | `team_key` | `Int64` | **Canonical Kimball team FK** (PR 7, ADR-011). BIGINT surrogate. | | `end_location_y` | `float64` | Normalized horizontal goalmouth position [0, 1] (0 = left post, 1 = right post) | | `end_location_z` | `float64` | Normalized vertical goalmouth position [0, 1] (0 = ground level, 1 = crossbar) | | `shot_outcome` | `string` | Outcome: `Saved`, `Goal`, or `Post` | | `is_goal` | `bool` | Target variable — `true` if `shot_outcome = 'Goal'` | ### Coordinate System Goalmouth coordinates use the **StatsBomb 360 coordinate system**, normalized to [0, 1]: - **`end_location_y`**: Raw StatsBomb y is 36–44 yards (goalpost to goalpost, 8 yards wide). Normalized: (y − 36) / 8. - **`end_location_z`**: Raw StatsBomb z is 0–2.44 meters (ground to crossbar). Normalized: z / 2.44. Values outside [0, 1] (shots that miss via height or width but are still classified as "Saved") are clipped at 0 and 1. ## Data Sources | Source | On-Target Shots | License | |--------|----------------|---------| | [StatsBomb Open Data](https://github.com/statsbomb/open-data) | ~15K | CC-BY 4.0 | Coverage includes the Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, World Cup, and more (StatsBomb 360-enabled competitions only, as `end_location_z` requires 360 data). ## Use Cases - **PSxG model training**: Primary training input for the [PSxG model](https://huggingface.co/luxury-lakehouse/psxg-model) - **Goalkeeper benchmarking**: Analyze shot difficulty distributions faced by individual goalkeepers - **Shot analysis**: Visualize goalmouth heatmaps by outcome, competition, or position - **Custom models**: Train alternative PSxG architectures (e.g., kernel density, neural nets) on the same standardized dataset ## Limitations - **StatsBomb only**: `end_location_z` is not available in Wyscout or other open providers. This dataset is StatsBomb-only. - **360-enabled competitions**: Only StatsBomb competitions with 360 data have goalmouth z-coordinates. Earlier StatsBomb open data lacks the z-dimension. - **Open data only**: Contains only publicly available StatsBomb shots. Commercial datasets cover more competitions and seasons. - **No keeper position**: This dataset does not include the goalkeeper's starting position or movement. For freeze-frame context, see [xG Freeze Frame Data](https://huggingface.co/datasets/luxury-lakehouse/xg-freeze-frame-data). - **Clipped coordinates**: A small fraction of "Saved" shots have raw coordinates outside the goalmouth geometry (e.g., diving saves). These are clipped to [0, 1]. ## Citation If you use this dataset, please cite: ```bibtex @misc{statsbomb2024opendata, title={StatsBomb Open Data}, author={{StatsBomb}}, year={2024}, url={https://github.com/statsbomb/open-data}, note={CC-BY 4.0} } ``` ```bibtex @article{butcher2025xgot, title={An Expected Goals On Target (xGOT) Model}, author={Butcher, J. and others}, journal={Big Data and Cognitive Computing}, volume={9}, number={3}, pages={64}, year={2025}, publisher={MDPI}, url={https://www.mdpi.com/2504-2289/9/3/64} } ``` ```bibtex @software{nielsen2026psxg, title={PSxG Model: Post-Shot Expected Goals for Goalkeeper Evaluation}, author={Nielsen, Karsten Skyt}, year={2026}, url={https://github.com/karsten-s-nielsen/luxury-lakehouse} } ``` ## Companion Resources | Resource | Description | |----------|-------------| | [PSxG Model](https://huggingface.co/luxury-lakehouse/psxg-model) | Logistic regression PSxG model trained on this dataset | | [PSxG Predictions](https://huggingface.co/datasets/luxury-lakehouse/psxg-predictions) | Per-shot PSxG predictions with player and match identifiers | | [xG Shot Data](https://huggingface.co/datasets/luxury-lakehouse/xg-shot-data) | Full shot dataset with pre-shot features (StatsBomb + Wyscout) | | [xG Freeze Frame Data](https://huggingface.co/datasets/luxury-lakehouse/xg-freeze-frame-data) | Player positions at shot time for context-conditioned xG models | ## More Information > **Explore interactively:** [Soccer Analytics App](https://huggingface.co/spaces/luxury-lakehouse/soccer-analytics-app) - **Model repo**: [`luxury-lakehouse/psxg-model`](https://huggingface.co/luxury-lakehouse/psxg-model) - **License**: [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) (StatsBomb Open Data) - **Platform**: [Luxury Lakehouse Soccer Analytics](https://github.com/karsten-s-nielsen/luxury-lakehouse) ## PR 7 changelog (2026-04-27) The upstream gold mart `fct_shots` now carries Kimball surrogate FKs (`team_key`, `player_key`) alongside the existing `match_key` (PR 3) and the legacy `team_id`/`player_id` INT columns during the 2026-07-22 dual-column window per ADR-011. SB+WS native IDs are real BIGINTs cast to string for the dim JOINs. PR 8 will sunset the legacy `*_id` columns post-2026-07-22.

This dataset contains ~15K on-target shots from the StatsBomb open data collection with goalmouth coordinates (`end_location_y`, `end_location_z`). It serves as the primary training input for the PSxG (Post-Shot Expected Goals) model used in goalkeeper shot-stopping evaluation. Only shots with outcomes Saved, Goal, or Post are included, excluding blocked or off-target shots. Data fields include event ID, match ID, player ID, goalmouth coordinates, shot outcome, and more. The coordinates use the StatsBomb 360 system, normalized to [0, 1]. The dataset covers competitions like the Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, and World Cup (only 360-enabled competitions). Use cases include PSxG model training, goalkeeper benchmarking, shot analysis, and custom model development. Limitations include StatsBomb-only data, 360-enabled competitions only, public data only, no goalkeeper position data, and clipped coordinates for some saves.

提供机构:
luxury-lakehouse
搜集汇总
数据集介绍
luxury-lakehouse/statsbomb-shots-on-target 数据集图片
构建方式
在足球运动分析日益倚重细粒度事件数据与预期进球框架的背景下,该数据集以 StatsBomb Open Data 为唯一来源,筛取 shot_outcome 属于 Saved、Goal 或 Post 的射正事件,汇集约一万五千条样本。构建过程保留球门坐标 end_location_y 与 end_location_z,前者按门柱间八码范围归一化,后者按地面至横梁 2.44 米归一化,并统一映射至 [0,1] 区间。坐标依赖 StatsBomb 360 数据,故仅涵盖启用 360 的赛事;超出球门几何范围的 Saved 射门坐标被裁剪至边界。核心标识采用 Kimball 代理键,并保留旧键直至迁移窗口结束。
特点
随着门将扑救评估与射后预期进球模型逐渐成为足球数据科学的重要议题,该数据集呈现出面向表格分类任务的鲜明特征。其规模约为一万五千条射正记录,字段涵盖事件标识、比赛、球员、球队的规范键与遗留键,以及归一化球门坐标、射门结果和二元进球标签。坐标体系统一于 StatsBomb 360 规范,便于高度分区等派生分析。数据仅限公开 StatsBomb 360 赛事,不含门将起始位置,少量扑救坐标经裁剪处理。许可为 CC-BY 4.0,并存在 match_id 至 match_key 的迁移安排。
使用方法
在构建 PSxG 模型与开展门将扑救难度基准分析时,研究者可借助 datasets 库直接载入该数据集。调用 load_dataset('luxury-lakehouse/statsbomb-shots-on-target') 后转换为 Pandas 数据框,即可按 end_location_z 划分高度区域并统计各组进球率,亦可绘制球门热图或训练核密度、神经网络等替代 PSxG 架构。消费代码应优先读取 match_key,以适配 2026 年 7 月 22 日移除旧 match_id 的模式变更;若需冻结帧语境,可结合 xG Freeze Frame Data。交互式探索可通过 Soccer Analytics App 完成。
背景与挑战
背景概述
足球运动分析长期追求将射门质量与门将能力分离,射正后的球门落点恰是衡量扑救难度的核心信息。statsbomb-shots-on-target 数据集源自 StatsBomb Open Data,由 Luxury Lakehouse 足球分析平台维护,约在 2026 年随 PSxG 模型发布而整理,收录约一万五千次射正事件,覆盖英超、西甲、意甲、德甲、法甲、欧冠与世界杯等启用 360 数据的赛事,并统一提供归一化球门横纵坐标。其核心研究问题在于估计射正成为进球的概率,即 Post-Shot Expected Goals,进而为门将扑救评估、射门热区分析和自定义模型训练提供标准化语料。Karsten Skyt Nielsen 等推动的 PSxG 模型与 Butcher 等 xGOT 研究共同强化了该数据集的学术与工程影响,CC-BY 4.0 许可亦促进开放复现。
当前挑战
射正预期进球建模的难点在于,传统预期进球依赖射门前置特征,难以剥离门将表现与射门质量,而球门坐标的稀疏性、赛事覆盖偏差与守门员初始位置缺失又会削弱模型泛化。构建该数据集时,StatsBomb 360 数据仅覆盖部分赛事,end_location_z 并非所有开放来源可得,Wyscout 等提供方缺乏对应维度;被封堵或偏出球门的射门被排除,另有少量被扑救射门的原始坐标超出球门几何而需裁剪至零一区间。模式迁移中的 match_id 与 match_key 双列窗口、旧标识符弃用,以及商业数据覆盖更广所带来的开放数据局限,均对持续维护和下游复用构成现实挑战。
常用场景
经典使用场景
在足球表现分析迈入精细化事件数据的进程中,statsbomb-shots-on-target 为射正球门事件的门框落点提供了标准化语料。其最典型的用途是训练 Post-Shot Expected Goals 模型,以归一化后的 end_location_y 与 end_location_z 刻画射门在球门平面内的位置,进而估计射正球转化为进球的概率。依托这一范式,研究者可绘制门框区域进球热图,比较不同赛事、球队与球员的射正质量,并据此评估守门员面对射门时的扑救难度,构成体育分析中兼具预测性与解释性的经典场景。
实际应用
在职业足球数据决策与公共媒体叙事交织的现实场景中,statsbomb-shots-on-target 的应用体现为门将招募、赛后复盘、球员报告与交互可视化。分析人员可借助门框坐标测算单次射正难度,汇总门将所面对的射正分布,识别其高出预期扑救表现;俱乐部与数据平台亦可据此训练自定义 PSxG 架构,服务球探、战术与球迷端产品。StatsBomb 360 覆盖的英超、西甲、意甲、德甲、法甲、欧冠与世界杯等赛事,使跨联赛、跨赛季的守门员基准比较成为可能。
衍生相关工作
在射正预期进球模型逐步制度化的研究生态中,statsbomb-shots-on-target 催生并支撑了多项相关经典工作。Nielsen 的 PSxG Model 以此数据集为训练语料,采用逻辑回归估计射正进球概率,并衍生 PSxG Predictions 提供逐射门预测;xG Shot Data 与 xG Freeze Frame Data 分别扩展射门前特征与射门瞬间球员站位,为情境化 xG 建模提供配套资源。Butcher 等发表于 Big Data and Cognitive Computing 的 xGOT 模型亦引用 StatsBomb 开放数据,彰显该数据集对守门员评估与射门结果研究的持续影响。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务