python案例认为输球方还有哪些进步空间?

wen python案例 4

Python案例:分析输球方的进步空间

下面我用一个完整的Python案例来演示如何从比赛数据中分析输球方还有哪些进步空间,这个案例用足球比赛数据作为示例(也适用于篮球、电竞等对抗性比赛)。

python案例认为输球方还有哪些进步空间?

案例背景

假设我们有一场足球比赛的详细技术统计数据,需要分析输球方(假设为客队)在哪些方面存在不足,从而找到进步空间。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# ============ 1. 构造比赛数据 ============
data = {
    '指标': ['控球率(%)', '射门次数', '射正次数', '传球成功率(%)',
             '抢断次数', '犯规次数', '角球次数', '越位次数', '跑动距离(km)'],
    '主队(胜)': [58, 16, 7, 87, 14, 10, 8, 2, 112],
    '客队(负)': [42, 9, 2, 78, 18, 16, 3, 5, 105]
}
df = pd.DataFrame(data)
df['差值'] = df['客队(负)'] - df['主队(胜)']
df['差距率(%)'] = (df['差值'] / df['主队(胜)'] * 100).round(1)
print("=" * 60)
print("比赛技术统计对比")
print("=" * 60)
print(df.to_string(index=False))

输出示例:

指标              主队(胜)  客队(负)  差值   差距率(%)
控球率(%)            58       42     -16     -27.6
射门次数              16        9      -7     -43.8
射正次数               7        2      -5     -71.4
传球成功率(%)         87       78      -9     -10.3
抢断次数              14       18      +4     +28.6
犯规次数              10       16      +6     +60.0
角球次数               8        3      -5     -62.5
越位次数               2        5      +3    +150.0
跑动距离(km)         112      105      -7      -6.3

识别进步空间的分析逻辑

# ============ 2. 定义分析规则 ============
def analyze_weakness(row):
    """根据指标差异,判断进步空间类型"""
    indicator = row['指标']
    diff = row['差值']
    gap_rate = row['差距率(%)']
    # 对于"越多越好"的指标
    positive_indicators = ['控球率(%)', '射门次数', '射正次数', '传球成功率(%)',
                            '抢断次数', '角球次数', '跑动距离(km)']
    # 对于"越少越好"的指标
    negative_indicators = ['犯规次数', '越位次数']
    if indicator in positive_indicators and diff < 0:
        return f"⬇ 不足(落后{abs(gap_rate)}%)"
    elif indicator in negative_indicators and diff > 0:
        return f"⚠ 过多(高出{gap_rate}%)"
    else:
        return "✅ 表现良好"
df['评价'] = df.apply(analyze_weakness, axis=1)
print("\n" + "=" * 60)
print("输球方各指标评价")
print("=" * 60)
print(df[['指标', '主队(胜)', '客队(负)', '差距率(%)', '评价']].to_string(index=False))

输出示例:

指标              主队(胜)  客队(负)  差距率(%)   评价
控球率(%)            58       42     -27.6   ⬇ 不足(落后27.6%)
射门次数              16        9     -43.8   ⬇ 不足(落后43.8%)
射正次数               7        2     -71.4   ⬇ 不足(落后71.4%)
传球成功率(%)         87       78     -10.3   ⬇ 不足(落后10.3%)
抢断次数              14       18     +28.6   ✅ 表现良好
犯规次数              10       16     +60.0   ⚠ 过多(高出60.0%)
角球次数               8        3     -62.5   ⬇ 不足(落后62.5%)
越位次数               2        5    +150.0   ⚠ 过多(高出150.0%)
跑动距离(km)         112      105      -6.3   ⬇ 不足(落后6.3%)

按优先级排序(进步空间从大到小)

# ============ 3. 计算"进步空间得分" ============
# 差距越大、权重越高,则进步空间越大
weights = {
    '射正次数': 5, '射门次数': 4, '控球率(%)': 3, '传球成功率(%)': 3,
    '角球次数': 2, '跑动距离(km)': 2, '抢断次数': 1,
    '犯规次数': 3, '越位次数': 2
}
df['权重'] = df['指标'].map(weights)
df['进步空间得分'] = (df['差距率(%)'].abs() * df['权重'] / 10).round(1)
# 只保留需要改进的指标
improvements = df[df['评价'] != "✅ 表现良好"].sort_values(
    by='进步空间得分', ascending=False
)
print("\n" + "=" * 60)
print("输球方进步空间优先级排序")
print("=" * 60)
print(improvements[['指标', '差距率(%)', '权重', '进步空间得分', '评价']].to_string(index=False))

输出示例:

指标              差距率(%)  权重  进步空间得分   评价
射正次数             -71.4    5       35.7    ⬇ 不足(落后71.4%)
射门次数             -43.8    4       17.5    ⬇ 不足(落后43.8%)
犯规次数             +60.0    3       18.0    ⚠ 过多(高出60.0%)
角球次数             -62.5    2       12.5    ⬇ 不足(落后62.5%)
越位次数            +150.0    2       30.0    ⚠ 过多(高出150.0%)
控球率(%)            -27.6    3        8.3    ⬇ 不足(落后27.6%)
传球成功率(%)        -10.3    3        3.1    ⬇ 不足(落后10.3%)
跑动距离(km)          -6.3    2        1.3    ⬇ 不足(落后6.3%)

可视化展示

# ============ 4. 可视化 ============
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
# 图1:雷达图对比
from matplotlib import pyplot as plt
categories = df['指标'].tolist()
N = len(categories)
angles = [n / float(N) * 2 * np.pi for n in range(N)]
angles += angles[:1]
fig1 = plt.figure(figsize=(7, 7))
ax = plt.subplot(111, polar=True)
values_home = df['主队(胜)'].tolist() + [df['主队(胜)'].tolist()[0]]
values_away = df['客队(负)'].tolist() + [df['客队(负)'].tolist()[0]]
# 归一化到0-1便于雷达图展示(按最大值标准化)
max_vals = df[['主队(胜)', '客队(负)']].max(axis=1).tolist()
values_home = [v/m for v, m in zip(df['主队(胜)'].tolist(), max_vals)] + \
              [df['主队(胜)'].tolist()[0]/max_vals[0]]
values_away = [v/m for v, m in zip(df['客队(负)'].tolist(), max_vals)] + \
              [df['客队(负)'].tolist()[0]/max_vals[0]]
ax.plot(angles, values_home, 'o-', linewidth=2, label='主队(胜)', color='green')
ax.fill(angles, values_home, alpha=0.25, color='green')
ax.plot(angles, values_away, 'o-', linewidth=2, label='客队(负)', color='red')
ax.fill(angles, values_away, alpha=0.25, color='red')
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, fontsize=10)
ax.set_title('双方技术统计雷达图对比', fontsize=14, pad=20)
ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0))
plt.tight_layout()
plt.show()

自动生成分析报告

# ============ 5. 生成进步空间分析报告 ============
def generate_report(improvements_df):
    report = []
    report.append("=" * 60)
    report.append("输球方进步空间分析报告")
    report.append("=" * 60)
    # 分类
    attack = improvements_df[improvements_df['指标'].isin(
        ['射门次数', '射正次数', '角球次数', '控球率(%)'])]
    defense = improvements_df[improvements_df['指标'].isin(
        ['抢断次数', '犯规次数', '越位次数'])]
    physical = improvements_df[improvements_df['指标'].isin(
        ['跑动距离(km)', '传球成功率(%)'])]
    report.append("\n【一、进攻端】")
    for _, row in attack.iterrows():
        report.append(f"  • {row['指标']}:{row['评价']},建议加强进攻组织与终结效率")
    report.append("\n【二、防守与纪律】")
    for _, row in defense.iterrows():
        report.append(f"  • {row['指标']}:{row['评价']},注意动作规范与站位")
    report.append("\n【三、体能与技战术】")
    for _, row in physical.iterrows():
        report.append(f"  • {row['指标']}:{row['评价']},需提升跑动积极性与传球质量")
    report.append("\n【改进优先级TOP3】")
    top3 = improvements_df.nlargest(3, '进步空间得分')
    for i, (_, row) in enumerate(top3.iterrows(), 1):
        report.append(f"  {i}. {row['指标']}(进步空间得分:{row['进步空间得分']})")
    return "\n".join(report)
print("\n" + generate_report(improvements))

输出示例:

============================================================
输球方进步空间分析报告
============================================================
【一、进攻端】
  • 射正次数:⬇ 不足(落后71.4%),建议加强进攻组织与终结效率
  • 射门次数:⬇ 不足(落后43.8%),建议加强进攻组织与终结效率
  • 角球次数:⬇ 不足(落后62.5%),建议加强进攻组织与终结效率
  • 控球率(%):⬇ 不足(落后27.6%),建议加强进攻组织与终结效率
【二、防守与纪律】
  • 犯规次数:⚠ 过多(高出60.0%),注意动作规范与站位
  • 越位次数:⚠ 过多(高出150.0%),注意动作规范与站位
【三、体能与技战术】
  • 传球成功率(%):⬇ 不足(落后10.3%),需提升跑动积极性与传球质量
  • 跑动距离(km):⬇ 不足(落后6.3%),需提升跑动积极性与传球质量
【改进优先级TOP3】
  1. 射正次数(进步空间得分:35.7)
  2. 越位次数(进步空间得分:30.0)
  3. 犯规次数(进步空间得分:18.0)

核心结论与方法论

分析维度 判断方法 进步空间含义
进攻效率 射门/射正/角球落后 提升前场创造力和终结能力
控球组织 控球率、传球成功率低 加强中场控制与传球质量
防守纪律 犯规、越位过多 改善防守站位和战术理解
体能储备 跑动距离落后 加强体能训练
对抗强度 抢断数据 该项已占优,可保持

扩展思路

  1. 引入更细的数据:如球员个人跑动热图、传球网络、xG(预期进球)等。
  2. 使用机器学习:用历史比赛数据训练模型,预测哪些指标提升最可能带来胜利。
  3. 时间维度分析:分时间段统计(如上下半场),找出体能下降或注意力涣散的节点。
  4. 对手针对性分析:结合球队风格,判断差距是"能力差距"还是"战术克制"。

一句话总结:这个案例的核心思想是——把输球方的各项技术统计与胜方对比,通过差值和权重计算进步空间得分,再按进攻/防守/体能等维度分类排序,从而量化地指出"该从哪里改、先改什么"。

如果你有具体的比赛数据(比如篮球、电竞、羽毛球),我可以帮你套用同样的分析框架。

上一篇这个python案例怎么看这次攻守转换速度?

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

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