python案例怎么看两队边路突破能力对比?

wen python案例 3

本文目录导读:

python案例怎么看两队边路突破能力对比?

  1. 第一步:定义“边路突破能力”的指标体系
  2. 第二步:Python实战代码(以模拟数据为例)
  3. 第三步:进阶深度对比(单场与趋势)
  4. 第四步:如何解读这些图表(写给看报告的人)
  5. 总结(针对你的问题)

在足球数据分析中,“边路突破能力”通常不是单一数据,而是由多个维度构成的复合指标。

由于没有具体的数据集,我无法直接给出“A队100分,B队95分”的对比,但我可以给你一套完整的Python分析框架,包含数据模拟指标计算可视化对比的代码,你可以把代码中的数据源换成你实际拥有的数据(如StatsBomb、Wyscout或手动统计的Excel)。


第一步:定义“边路突破能力”的指标体系

在写代码前,先明确要看什么,我们通常从以下4个维度衡量:

  1. 数量(Volume):边路传中次数、1v1过人次数、成功进入进攻三区次数。
  2. 质量(Quality):成功传中率、过人成功率、创造射门机会的次数。
  3. 威胁(Threat):传中形成射门的转化率、禁区内触球(纵深推进)次数。
  4. 效率(Efficiency):每成功突破一次消耗的球权数,或每X次传中能收获一次绝佳机会。

第二步:Python实战代码(以模拟数据为例)

我们将模拟两支球队近10场比赛的边路数据,并进行雷达图对比。

导入库并生成模拟数据

(如果你有真实的Excel/CSV,请用 pd.read_excel 替换这一段)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from math import pi
# 设置中文显示(避免乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # Mac
plt.rcParams['axes.unicode_minus'] = False
# 设置随机种子,保证结果可复现
np.random.seed(42)
# 模拟数据:假设我们提取了球队A和球队B各10场的关键边路数据
data = {
    '球队': ['A队']*10 + ['B队']*10,
    '边路传中次数': np.random.randint(15, 30, 20),
    '边路1v1过人成功次数': np.random.randint(5, 15, 20),
    '成功传中次数': np.random.randint(4, 12, 20),
    '传中创造射门机会': np.random.randint(2, 8, 20),
    '禁区内边路触球次数': np.random.randint(10, 25, 20)
}
df = pd.DataFrame(data)
print("前5行数据结构预览:")
print(df.head())

计算两队平均核心指标

我们需要将上述原始数据归一化或计算比率,转化为5个维度的打分

# 按球队分组求平均值
summary = df.groupby('球队').agg({
    '边路传中次数': 'mean',
    '边路1v1过人成功次数': 'mean',
    '成功传中次数': 'mean',
    '传中创造射门机会': 'mean',
    '禁区内边路触球次数': 'mean'
}).reset_index()
# 计算衍生比率(质量指标)
summary['传中成功率'] = summary['成功传中次数'] / summary['边路传中次数'] * 100
summary['传中威胁率'] = summary['传中创造射门机会'] / summary['成功传中次数'] * 100
# 选择用于对比的最终5个维度
# (此处假设五个维度权重相同,你可以根据需求调整分母进行归一化)
metrics = {
    '均值传中量': summary['边路传中次数'] / summary['边路传中次数'].max() * 100,
    '突破成功数': summary['边路1v1过人成功次数'] / summary['边路1v1过人成功次数'].max() * 100,
    '传中成功率': summary['传中成功率'],
    '传中威胁度': summary['传中威胁率'],  # 注意这里可能超过100,看情况clip
    '禁区内触球': summary['禁区内边路触球次数'] / summary['禁区内边路触球次数'].max() * 100
}
# 转换为DataFrame用于绘图
metric_df = pd.DataFrame(metrics, index=['A队', 'B队'])
# 修正:如果比率超过100,通常我们将其饱和处理,或者除以最大值
metric_df = metric_df / metric_df.max() * 100
print("\n归一化后的雷达图数据(满分100):")
print(metric_df.round(1))

绘制雷达图进行直观对比

雷达图是对比球队能力最直观的方式,能够一眼看出“谁更偏科”或“谁更全面”。

def plot_radar(data, labels, title='球队边路突破能力对比'):
    # 设置雷达图参数
    angles = [n / float(len(labels)) * 2 * pi for n in range(len(labels))]
    angles += angles[:1]  # 闭合图形
    # 初始化绘图
    fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
    # 绘制每一支球队
    for idx, row in data.iterrows():
        values = row.values.flatten().tolist()
        values += values[:1]  # 闭合
        ax.plot(angles, values, linewidth=2, linestyle='solid', label=idx)
        ax.fill(angles, values, alpha=0.25)
    # 添加标签
    ax.set_xticks(angles[:-1])
    ax.set_xticklabels(labels, fontsize=12)
    ax.set_ylim(0, 100)
    ax.set_title(title, size=15, pad=20)
    # 添加图例
    ax.legend(loc='upper right', bbox_to_anchor=(1.2, 1.0))
    plt.show()
# 调用绘图函数
labels = ['传中量', '突破成功', '传中成功率', '传中威胁度', '禁区内触球']
plot_radar(metric_df, labels)

运行效果示意(模拟结果):

  • A队(蓝色):可能在“传中量”和“突破成功”上数值很高,但在“传中成功率”上低,说明“边路能突能传,但把握机会能力差”。
  • B队(橙色):可能“传中量”少,但“传中威胁度”高,说明“不轻易传中,传中必见血”。

第三步:进阶深度对比(单场与趋势)

除了上面的总体平均,我们还可以看稳定性,这里用折线图看两队在10场比赛中的“边路成功传中”趋势。

# 将球队分离
df_A = df[df['球队'] == 'A队'].reset_index(drop=True)
df_B = df[df['球队'] == 'B队'].reset_index(drop=True)
# 绘制折线图(以成功传中为例)
plt.figure(figsize=(10, 5))
plt.plot(df_A.index+1, df_A['成功传中次数'], marker='o', label='A队成功传中', color='blue')
plt.plot(df_B.index+1, df_B['成功传中次数'], marker='s', label='B队成功传中', color='red')
plt.xlabel('比赛场次')
plt.ylabel('成功传中次数')'两队近10场边路成功传中次数走势对比')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

第四步:如何解读这些图表(写给看报告的人)

如果只看上面的图,你怎么下结论?请参考以下解读模板:

  • 看基本面:如果A队雷达图的“传中量”和“禁区内触球”明显大于B队,说明A队是“主打边路”的球队,B队可能更偏向中路渗透。
  • 看效率:如果A队“传中成功率”低于B队,且“突破成功”也低,那么A队虽然传得多,但属于“无效传中”,边路威胁实际不大。
  • 看比赛背景:如果B队在面对强队时,其“成功过人”和“传中威胁度”依然很高,说明其边路突破具备“硬解能力”(指一对一个人突破能力出众),这种能力在淘汰赛或密集防守下价值更大。

针对你的问题)

如果你要真正分析两队,建议按以下步骤操作:

  1. 数据清洗:确保你获取的数据包含“左路”和“右路”的独立标注(通常主流数据商如StatsBomb有 left/right 标签)。
  2. 分区域统计:将“边路传中(Crosses from Left/Right)”、“边路过人(Dribbles in Wide Areas)”筛选出来。
  3. 核心指标计算:按上文代码中的 summary 部分计算平均值。
  4. 可视化:使用雷达图看全面性,使用箱线图看稳定性,使用热力图看区域热点(如果有坐标数据)。

如果你有具体的 CSV/Excel文件(包含列名的Excle表格),可以直接发给我列名(match_id, player, cross, attempted_dribble),我可以直接帮你把代码改成直接读取文件的格式。

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