本文目录导读:

“半场结束前攻势”这个说法在不同类型的开源项目里含义差别很大,你说的应该是足球/体育数据分析类的开源项目吧?比如像 socceraction、statsbombpy、football-data、understat 这类。
我先按最常见的足球赛事数据分析场景来说明,如果你说的是别的项目(比如游戏、量化交易),可以补充一下项目名。
一般思路:怎么定义“半场结束前攻势”
通常要自己基于事件数据(event data)构造指标,常见定义有几种:
时间窗口法
- 取上半场第 40–45 分钟(或 35–45+)的所有事件
- 统计这段时间内的进攻行为
进攻行为指标
- 射门次数、射正次数
- 对方禁区触球次数
- 传入进攻三区/禁区的次数
- xG(预期进球)累加值
- 角球、任意球数量
控球推进指标
- 从后场到前场的推进序列
- 连续传球次数
- 平均事件发生位置(x 坐标越靠近对方球门越算“攻势”)
强度/节奏指标
- 单位时间内事件数
- 对方半场事件占比
用代码大概长这样(以 statsbomb 风格事件数据为例)
import pandas as pd
# df 是事件数据,含 minute, period, type, x, team 等字段
first_half_late = df[
(df['period'] == 1) &
(df['minute'] >= 40)
]
attack_events = first_half_late[
first_half_late['type'].isin(['Shot', 'Pass', 'Carry', 'Dribble'])
]
# 按球队统计
summary = attack_events.groupby('team').agg(
shots=('type', lambda s: (s == 'Shot').sum()),
final_third=('x', lambda x: (x > 80).sum()), # 假设 x 上限 120
box_touches=('x', lambda x: (x > 102).sum()),
)
print(summary)
如果你说的是具体某个开源项目
请告诉我项目名(GitHub 链接最好),因为:
- socceraction:看它
VAEP值在时间段内的累加 - statsbombpy:直接拉 events,按上面方式过滤
- understat / football-data:通常只有比赛级数据,可能要退而求其次用射门/角球时间
- metrica / skillcorner 追踪数据:可以用球员位置、球的位置算“进攻压力”
告诉我具体项目,我可以给你更精确的字段名和代码。