python案例怎么看两队的中场控制力对比?

wen python案例 3

本文目录导读:

python案例怎么看两队的中场控制力对比?

  1. 第一层级:基础数据对比(适合普通比赛数据/半自动统计)
  2. 第二层级:事件链分析(需要带 X/Y 坐标的事件数据)
  3. 第三层级:网络与状态模型(进阶:Graph/DP)
  4. 具体实战案例(以英超为例)
  5. 最实用的可视化建议
  6. 总结建议

在足球数据分析中,中场控制力通常不是单一指标,而是由多个维度构成的综合评价,单纯看控球率太片面(比如摆大巴的球队控球率低但防守反击效率高)。

要看两队的中场控制力对比,最科学的思路是结合“破坏对手”与“组织己方”两个层面

这里有一套从基础数据提取进阶模型的Python分析方案,分为三个层级,你可以根据手头数据的详细程度选择:

第一层级:基础数据对比(适合普通比赛数据/半自动统计)

这是最直观的快照,适合没有精细追踪数据的场景。

核心指标:

  1. 控球率:最基础,但建议区分有效控球(对方半场控球率)。
  2. 传球成功率 & 传球数:中场控制力强,往往意味着传球基数大且成功率高。
  3. 对抗成功率:中场拼抢的强硬程度。

Python 示例代码(假设你有DataFrame):

import pandas as pd
# 假设 data 是包含两队数据的字典
data = {
    'team': ['主队', '客队'],
    '控球率': [58.0, 42.0],
    '传球数': [520, 380],
    '传球成功率': [88.0, 82.0],
    '抢断成功率': [75.0, 68.0],
    '对抗成功次数': [45, 38]
}
df = pd.DataFrame(data)
# 计算综合得分(加权)
weights = {'控球率': 0.3, '传球成功率': 0.3, '抢断成功率': 0.2, '对抗成功次数': 0.2}
df['控制力得分'] = (
    (df['控球率'] / 100) * weights['控球率'] * 100 +
    (df['传球成功率'] / 100) * weights['传球成功率'] * 100 +
    (df['抢断成功率'] / 100) * weights['抢断成功率'] * 100 +
    (df['对抗成功次数'] / df['对抗成功次数'].max()) * weights['对抗成功次数'] * 100
)
print(df[['team', '控制力得分']])

第二层级:事件链分析(需要带 X/Y 坐标的事件数据)

这是更具说服力的方法,关注“中场区域”这个空间,你需要过滤出发生在中场三区的事件(通常X坐标在球场30%到70%之间)。

核心逻辑:

  1. 阵地战发起次数:在中场区域成功接球并转身向前推进的次数。
  2. 高位压迫成功率:在对方半场(尤其是中场)的夺回球权次数。
  3. 向前传球占比:传球方向朝前(朝向对方球门)的百分比。

Python 示例逻辑(假设有事件数据 events):

import pandas as pd
# 假设 events 列包含: ['team', 'event_type', 'x', 'y', 'success']
# 球场宽度为 120 (x轴)
# 1. 筛选中场区域的传球
midfield = events[(events['x'] >= 30) & (events['x'] <= 70)]
# 2. 计算向前传球 (假设传球有 end_x 列)
midfield['pass_progress'] = midfield['end_x'] - midfield['x']
forward_passes = midfield[(midfield['pass_progress'] > 5)]  # 向前传至少5米
# 3. 计算每队的向前传球成功率
team_stats = forward_passes.groupby('team').agg(
    向前传球成功率=('success', 'mean'),
    向前传球次数=('success', 'count')
).reset_index()
# 4. 计算“压迫夺权”:在对方半场的高位抢断
press_events = events[(events['event_type'] == 'interception') & (events['x'] > 60)]
press_count = press_events.groupby('team').size().reset_index(name='高位抢断次数')
# 合并数据
final = pd.merge(team_stats, press_count, on='team', how='outer')

第三层级:网络与状态模型(进阶:Graph/DP)

如果你有追踪数据(球员速度),可以计算传球网络密度Metaball(球队重心)

  • 重心偏移:计算球队在所有时间点的控球重心X坐标,重心越靠近对方禁区,控制力越强。
  • 传球聚类系数:比较中场三人组的三角传球频率。

具体实战案例(以英超为例)

假设你有一场 曼城 vs 利物浦 的赛后数据:

指标 曼城 利物浦
控球率 55% 45% 曼城略占优
中场三区传球 320次,成功率91% 210次,成功率86% 曼城有效控制中场
高位压迫夺权点数 12次 8次 曼城逼抢强度更高
向前传球率 22% 28% 利物浦纵向前插更多

分析结论曼城横向控制节奏把控上占优;但利物浦纵向打击效率更高(向前传球率更高),这意味着利物浦可能更倾向于放弃中场推进,通过长传或快速反击打身后。


最实用的可视化建议

你可以用 水波纹图(Radar Chart)热力图 来直观展示。

import matplotlib.pyplot as plt
import numpy as np
# 雷达图示例
labels = ['控球率', '传球次数', '向前传球率', '高位压迫', '对抗成功率']
team_a = [55, 80, 25, 70, 65]
team_b = [45, 60, 35, 55, 70]
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
team_a += team_a[:1]
team_b += team_b[:1]
angles += angles[:1]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.fill(angles, team_a, color='blue', alpha=0.25, label='Team A')
ax.fill(angles, team_b, color='red', alpha=0.25, label='Team B')
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
plt.legend()
plt.show()

总结建议

如果你只是想快速看结论,建议直接看第二层级的“向前传球成功率”和“中场夺球权”,这两个指标最能体现“控制”的本质。

如果你需要具体的数据源(例如StatsBomb开源数据、Kaggle数据集),我可以提供具体的爬取或导入代码片段,需要的话告诉我。

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