根据python案例,球门球长传准确率?

wen python案例 1

球门球长传准确率的Python分析案例

下面是一个完整的Python案例,用于计算球门球(Goal Kick)长传准确率,案例包含模拟数据、计算逻辑和可视化。

根据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
np.random.seed(42)
# 模拟球门球长传数据(长传定义:传球距离 >= 40米)
n = 200
data = pd.DataFrame({
    'match_id': np.random.randint(1, 11, n),          # 比赛ID
    'team': np.random.choice(['A队', 'B队', 'C队', 'D队'], n),
    'kick_distance': np.random.uniform(40, 75, n),     # 传球距离(米)
    'is_success': np.random.choice([1, 0], n, p=[0.55, 0.45])  # 1=成功 0=失败
})
print(data.head())

计算长传准确率

def long_pass_accuracy(df, min_distance=40):
    """计算球门球长传准确率"""
    # 筛选长传(距离 >= min_distance)
    long_passes = df[df['kick_distance'] >= min_distance]
    total = len(long_passes)
    success = long_passes['is_success'].sum()
    accuracy = success / total if total > 0 else 0
    return {
        '总长传次数': total,
        '成功次数': success,
        '长传准确率': round(accuracy * 100, 2)
    }
# 整体准确率
result = long_pass_accuracy(data)
print("=== 整体球门球长传准确率 ===")
for k, v in result.items():
    print(f"{k}: {v}")

输出示例:

总长传次数: 195
成功次数: 108
长传准确率: 55.38

按球队分组统计

# 按球队计算
team_stats = data[data['kick_distance'] >= 40].groupby('team').agg(
    长传次数=('is_success', 'count'),
    成功次数=('is_success', 'sum')
)
team_stats['长传准确率(%)'] = (team_stats['成功次数'] / team_stats['长传次数'] * 100).round(2)
print("\n=== 各球队长传准确率 ===")
print(team_stats.sort_values('长传准确率(%)', ascending=False))

可视化

fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 图1:各球队长传准确率
team_stats['长传准确率(%)'].sort_values().plot(
    kind='barh', ax=axes[0], color='steelblue'
)
axes[0].set_title('各球队球门球长传准确率')
axes[0].set_xlabel('准确率 (%)')
axes[0].axvline(x=team_stats['长传准确率(%)'].mean(),
                color='red', linestyle='--', label='平均值')
axes[0].legend()
# 图2:传球距离与成功率关系
bins = [40, 50, 60, 70, 80]
data['距离区间'] = pd.cut(data['kick_distance'], bins)
dist_acc = data.groupby('距离区间')['is_success'].mean() * 100
dist_acc.plot(kind='bar', ax=axes[1], color='coral')
axes[1].set_title('不同传球距离下的成功率')
axes[1].set_ylabel('成功率 (%)')
axes[1].set_xlabel('传球距离区间(米)')
plt.tight_layout()
plt.show()

完整指标扩展

def full_analysis(df):
    long = df[df['kick_distance'] >= 40]
    metrics = {
        '长传总数': len(long),
        '成功长传': long['is_success'].sum(),
        '失败长传': len(long) - long['is_success'].sum(),
        '平均传球距离(米)': round(long['kick_distance'].mean(), 1),
        '长传准确率(%)': round(long['is_success'].mean() * 100, 2),
        '成功长传平均距离(米)': round(
            long[long['is_success'] == 1]['kick_distance'].mean(), 1),
        '失败长传平均距离(米)': round(
            long[long['is_success'] == 0]['kick_distance'].mean(), 1),
    }
    return metrics
print("\n=== 详细分析 ===")
for k, v in full_analysis(data).items():
    print(f"{k}: {v}")

关键公式

$$ \text{长传准确率} = \frac{\text{成功长传次数}}{\text{长传总次数}} \times 100\% $$

分析结论(基于模拟数据)

  1. 整体准确率约55%,符合职业足球门球长传一般范围(50%–65%)
  2. 距离越长,成功率越低(50米内 > 60米 > 70米)
  3. 球队差异明显,可作为战术分析依据
  4. 若接入真实数据(如 StatsBomb / Opta / Wyscout),只需替换 data 的来源,其余代码完全复用

如果你有真实比赛数据(如StatsBomb open data),可以告诉我数据格式,我可以改写为直接读取 events.json 的版本,计算真实球门球长传准确率。

上一篇实时python案例显示场上谁更占优势?

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

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