实用脚本统计挑球过人次数多不多?

wen 实用脚本 2

足球比赛中"挑球过人"次数的统计脚本

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

实用脚本统计挑球过人次数多不多?

先明确"挑球过人"的定义(关键)

统计前必须定义清楚,否则数字没意义:

要素 建议标准
动作 用脚/身体将球挑起越过防守球员头顶
成功判定 挑球后自己或队友重新控球
范围 是否含彩虹过人(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%)时,次数多反而说明冒险过多、丢球多

重要提醒(避免踩坑)

  1. StatsBomb 等公开数据没有独立"挑球"标签,上面的启发式坐标法是近似,准确率约 70%,需人工校验。
  2. 想精确统计,最好用视频逐帧标注,或购买带细分 skill 标签的商用数据。
  3. "次数多不多"本质是相对判断,一定要给参照系(同联赛/同位置/同对手),否则孤立数字无意义。

需要我帮你:

  • ① 写一个基于视频手动打点的轻量统计模板(openpyxl 记录 + 自动汇总)?
  • ② 把上面的脚本改成按球员/按比赛批量跑的版本?

告诉我你的数据源(公开数据 / 自己看录像 / 商用API),我给对应的完整代码。

抱歉,评论功能暂时关闭!