实用脚本如何分析球员之间的默契程度?

wen 实用脚本 1

本文目录导读:

实用脚本如何分析球员之间的默契程度?

  1. 核心思路
  2. 数据源准备
  3. 核心指标与计算脚本
  4. 实用脚本工作流
  5. 可视化建议
  6. 注意事项

分析球员之间的默契程度,可以从数据、战术、行为三个层面入手,下面是一套可落地的实用脚本思路,按数据源和计算方法展开。

核心思路

默契 = 可预测性 + 效率 + 双向性

即:A传球时B总能出现在预期位置,且这种配合比和其他队友更高效、更频繁、更双向。


数据源准备

数据类型 来源示例 用途
传球事件 StatsBomb、Opta、Wyscout 传接频率、成功率
位置数据 追踪系统(SportVU等) 空间距离、跑位同步
事件流 比赛日志 传→跑→射链条
阵容数据 首发/换人 共现场次

核心指标与计算脚本

传球网络指标(基础层)

import pandas as pd
import numpy as np
# 假设 df 含: passer, receiver, match_id, success, x, y, minute
def pair_metrics(df):
    # 只保留同队传球,需先合并队伍信息
    df['pair'] = df.apply(lambda r: tuple(sorted([r['passer'], r['receiver']])), axis=1)
    g = df.groupby('pair').agg(
        passes=('success', 'size'),
        success_rate=('success', 'mean'),
        matches=('match_id', 'nunique')
    )
    g['passes_per_match'] = g['passes'] / g['matches']
    return g.sort_values('passes_per_match', ascending=False)

关键指标:

  • 每场传球次数
  • 传球成功率
  • 共赛场次(排除偶然性)

空间默契度(追踪数据)

def spatial_sync(tracking_df, player_a, player_b, window=5):
    """
    tracking_df: frame, player_id, x, y
    计算两人在时间窗口内的位置同步性
    """
    a = tracking_df[tracking_df.player_id == player_a].set_index('frame')
    b = tracking_df[tracking_df.player_id == player_b].set_index('frame')
    merged = a.join(b, lsuffix='_a', rsuffix='_b', how='inner')
    # 1) 平均距离
    merged['dist'] = np.sqrt((merged.x_a - merged.x_b)**2 + 
                             (merged.y_a - merged.y_b)**2)
    # 2) 位移向量相关性(跑位同步)
    merged['dx_a'] = merged.x_a.diff()
    merged['dy_a'] = merged.y_a.diff()
    merged['dx_b'] = merged.x_b.diff()
    merged['dy_b'] = merged.y_b.diff()
    corr_x = merged['dx_a'].rolling(window).corr(merged['dx_b'])
    corr_y = merged['dy_a'].rolling(window).corr(merged['dy_b'])
    return {
        'avg_distance': merged.dist.mean(),
        'movement_corr': (corr_x.mean() + corr_y.mean()) / 2,
        'proximity_time_ratio': (merged.dist < 15).mean()  # 15米内时间占比
    }

解读:

  • movement_corr > 0.5:跑位高度同步(如边后卫+边锋)
  • proximity_time_ratio 高 + 传球多 = 强默契

预期配合效率(进阶)

用 xT(Expected Threat) 或 VAEP 衡量每次配合的价值增量:

def combo_value(df, model):
    """
    对每次 A→B 传球,计算价值变化
    """
    df['value_gain'] = df.apply(
        lambda r: model.predict(r['end_x'], r['end_y']) - 
                  model.predict(r['start_x'], r['start_y']), axis=1)
    return df.groupby('pair')['value_gain'].agg(['sum', 'mean', 'count'])

默契组合 = 高频 + 高价值增益 + 稳定


三角/小组默契(网络分析)

import networkx as nx
def build_pass_network(df, min_passes=5):
    G = nx.DiGraph()
    edges = df.groupby(['passer','receiver']).size().reset_index(name='w')
    edges = edges[edges.w >= min_passes]
    for _, r in edges.iterrows():
        G.add_edge(r.passer, r.receiver, weight=r.w)
    return G
def clique_score(G):
    """用三角计数和聚类系数衡量小组默契"""
    undirected = G.to_undirected()
    return {
        'clustering': nx.clustering(undirected, weight='weight'),
        'triangles': nx.triangles(undirected)
    }

三人组默契尤其重要——足球中经典的三角配合(如巴萨tiki-taka)。


综合默契评分模型

def chemistry_score(pair_stats, spatial_stats, value_stats, weights=None):
    w = weights or {'freq': 0.3, 'success': 0.2, 'space': 0.25, 'value': 0.25}
    # 归一化到 0-1
    score = (
        w['freq']    * norm(pair_stats['passes_per_match']) +
        w['success'] * pair_stats['success_rate'] +
        w['space']   * spatial_stats['movement_corr'] +
        w['value']   * norm(value_stats['mean'])
    )
    return score

实用脚本工作流

拉取数据(API / CSV)
   ↓
2. 清洗:统一球员ID、队伍、坐标方向
   ↓
3. 计算 pair-level 指标
   ↓
4. 加入空间同步(如有追踪数据)
   ↓
5. 加入价值模型(xT/VAEP)
   ↓
6. 归一化 + 加权 → chemistry_score
   ↓
7. 可视化:热力图 / 网络图 / 时间演化曲线

可视化建议

  • 传球网络图:节点大小=触球,边粗=传球频率,颜色=默契分
  • 默契热力图:N×N 矩阵,行列都是球员
  • 时间演化:随赛季推进,两人默契分变化(识别磨合期)
  • 空间协同图:两人平均位置连线 + 覆盖区域

注意事项

  1. 样本量:共赛 < 5 场的组合结果不可靠
  2. 位置偏差:后卫-门将传球多但价值低,需分位置组比较
  3. 对手强度:强强对话中的默契更有说服力
  4. 战术角色:同一球员在不同体系下默契对象不同
  5. 双向性:A→B 多但 B→A 少,可能是单向依赖而非默契

如果你告诉我你手头的数据格式(如 StatsBomb event JSON、Opta CSV、自采追踪数据),我可以给出针对性的完整可运行脚本。

上一篇综合实用脚本,俱乐部高层施压有效吗?

下一篇当前分类已是最新一篇

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