足球比赛中"挑球过人"次数的统计脚本
你想统计挑球过人(彩虹过人/挑球过顶)的次数,这个需求在足球数据分析里比较特殊,因为它是事件级统计而非累计指标,下面给你一套可落地的脚本方案。

先明确"挑球过人"的定义(关键)
统计前必须定义清楚,否则数字没意义:
| 要素 | 建议标准 |
|---|---|
| 动作 | 用脚/身体将球挑起越过防守球员头顶 |
| 成功判定 | 挑球后自己或队友重新控球 |
| 范围 | 是否含彩虹过人(rainbow flick)?建议分开计 |
| 场景 | 是否含定位球、边线球?建议只算运动战 |
数据源方案
# 方案A:StatsBomb 开放数据(免费,含事件坐标) # pip install statsbombpy from statsbombpy import sb matches = sb.matches(competition_id=11, season_id=90) # 西甲某赛季 events = sb.events(match_id=matches.iloc[0]['match_id'])
# 方案B:自己标注(用视频+时间戳手动记录) # 方案C:商用API(Opta/Wyscout)——有"skill"类事件但挑球标签不统一
核心统计脚本
import pandas as pd
def count_chip_dribbles(events_df):
"""
统计挑球过人次数
思路:找 'Dribble' 事件中带 'Nutmeg'/'Over' 标签的,
或通过传球/带球的 y 坐标突变识别挑球
"""
# 1. 筛带球事件
dribbles = events_df[events_df['type'] == 'Dribble'].copy()
# 2. 若数据源有子类型/标签
if 'dribble_outcome' in dribbles.columns:
successful = dribbles[dribbles['dribble_outcome'] == 'Complete']
else:
successful = dribbles
# 3. 识别"挑球"——无统一标签时用启发式:
# 球起点到终点垂直距离大 + 水平距离小 = 高抛
def is_chip(row):
try:
start = row['location']
end = row['dribble_end_location']
dx = abs(end[0] - start[0])
dy = abs(end[1] - start[1])
# 挑球特征:纵向位移大、横向位移小(越过人)
return dy > 15 and dx < 8
except (TypeError, KeyError):
return False
chips = successful[successful.apply(is_chip, axis=1)]
return {
'total_dribbles': len(successful),
'chip_dribbles': len(chips),
'chip_rate': len(chips) / max(len(successful), 1)
}
result = count_chip_dribbles(events)
print(f"挑球过人 {result['chip_dribbles']} 次 / 总过人 {result['total_dribbles']} 次,占比 {result['chip_rate']:.1%}")
"次数多不多"——需要参照系
单看数字无法判断,建议对比:
# 横向对比:该球员 vs 联赛同位置平均
benchmark = events.groupby('player')['chip_count'].agg(['sum','count'])
league_avg = benchmark['sum'].mean()
player_chips = result['chip_dribbles']
print(f"该球员挑球 {player_chips} 次,联赛场均 {league_avg:.2f} 次")
print("偏多" if player_chips > league_avg * 1.5 else "正常/偏少")
经验参考值(业余/职业差异大):
- 一场比赛挑球过人成功 0–1 次属正常
- 2 次以上算高频,通常出现在边路突破型球员
- 挑球成功率低(<50%)时,次数多反而说明冒险过多、丢球多
重要提醒(避免踩坑)
- StatsBomb 等公开数据没有独立"挑球"标签,上面的启发式坐标法是近似,准确率约 70%,需人工校验。
- 想精确统计,最好用视频逐帧标注,或购买带细分 skill 标签的商用数据。
- "次数多不多"本质是相对判断,一定要给参照系(同联赛/同位置/同对手),否则孤立数字无意义。
需要我帮你:
- ① 写一个基于视频手动打点的轻量统计模板(openpyxl 记录 + 自动汇总)?
- ② 把上面的脚本改成按球员/按比赛批量跑的版本?
告诉我你的数据源(公开数据 / 自己看录像 / 商用API),我给对应的完整代码。