本文目录导读:

你提到的“禁区内射门次数对比”在公开开源项目里没有统一、现成的统计口径,因为“禁区”定义、数据源、赛事范围都不同,下面给你一个可落地的方案和可参考的开源资源。
先明确统计口径
要做对比,先定三件事:
- 赛事范围:英超/西甲/欧冠/世界杯?不同赛事数据源不同。
- 禁区定义:通常指大禁区(penalty area),但有些数据商把“六码区”单独拆出。
- 射门类型:是否包含头球、是否包含被封堵的射门、是否只算运动战。
可用的开源数据源
| 数据源 | 备注 | |
|---|---|---|
| StatsBomb Open Data | 事件级数据,含 shot 事件的 location 坐标 |
可自行判断是否在禁区内,最推荐 |
| FBref | 球队/球员射门统计 | 有“禁区内射门”相关字段,但需爬取 |
| Understat | xG 和射门位置 | 部分字段可推算 |
| football-data.co.uk | 比赛结果和赔率 | 无射门位置,不适合 |
| Wyscout 公开样本 | 事件数据 | 样本较少 |
推荐实现路径(StatsBomb Open Data)
StatsBomb 的 shot 事件里有 location: [x, y],球场坐标是 120×80,大禁区范围约为 x ≥ 102 且 18 ≤ y ≤ 62(以进攻方向为准,需按半场翻转处理)。
伪代码:
def in_penalty_area(loc, attacking_left_to_right=True):
x, y = loc
if not attacking_left_to_right:
x = 120 - x
return x >= 102 and 18 <= y <= 62
# 统计某队禁区内射门
shots = [e for e in events if e['type']['name'] == 'Shot']
in_box = [s for s in shots if in_penalty_area(s['location'])]
然后按球队/赛事聚合,就能做“禁区内射门次数对比”。
现成可参考的项目
- socceraction(GitHub):把 StatsBomb 事件转成 SPADL,含射门位置处理。
- mplsoccer:画禁区、射门图很方便。
- StatsBombR / statsbombpy:Python/R 读取开放数据。
- FBref 爬虫项目(如
soccerdata):可抓球队射门分区统计。
注意事项
- 版权:StatsBomb 开放数据仅限非商业研究,需遵守其许可。
- 坐标翻转:主客场/进攻方向不同,必须先归一化。
- 样本偏差:开放数据只覆盖部分赛事(如女足、部分男足联赛),做“对比”时注意样本一致性。
如果你告诉我具体想对比哪些联赛/球队/赛季,以及你手上是否已有数据,我可以帮你写具体的统计脚本或 SQL。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播