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

wen python案例 3

本文目录导读:

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

  1. 案例场景
  2. 模拟数据生成
  3. 计算整体准确率
  4. 按区域拆分
  5. 按半场拆分
  6. 可视化:用热力图展示区域×半场的准确率
  7. 进阶:真实数据的分析逻辑

球门球长传准确率”的Python案例,通常出现在足球数据分析项目中,虽然标准数据提供商(如Opta、StatsBomb)对“长传”有严格定义,但我们可以用Python模拟或分析一个经典场景。

这里我提供一个模拟数据生成 + 统计分析的案例,并给出核心代码,假设我们有一支球队的门将,历史比赛中的球门球长传记录。


案例场景

  • 目标:分析门将长传的总体准确率,按球场区域(左/中/右)或比赛阶段(上半场/下半场)拆分,并用可视化展示。

模拟数据生成

我们将生成1000次球门球长传记录,包含:传球方向是否成功比赛阶段

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 设置随机种子,保证可复现
np.random.seed(42)
# 模拟数据量
n = 1000
# 生成传球区域(左/中/右)
zone = np.random.choice(['Left', 'Center', 'Right'], size=n, p=[0.3, 0.4, 0.3])
# 生成比赛阶段(上半场/下半场)
half = np.random.choice(['First Half', 'Second Half'], size=n, p=[0.5, 0.5])
# 生成是否成功(假设总体准确率约60%,且下半场因体力下降略低)
# 使用逻辑回归模拟概率更真实,这里简单用随机数
base_success_rate = 0.60
# 区域影响:中路成功率略高,边路略低
zone_effect = {'Left': -0.05, 'Center': 0.08, 'Right': -0.03}
# 半场影响:下半场下降3%
half_effect = {'First Half': 0.0, 'Second Half': -0.03}
# 计算每个样本的成功概率
prob = []
for i in range(n):
    p = base_success_rate + zone_effect[zone[i]] + half_effect[half[i]]
    # 限制在0-1之间
    p = max(0.1, min(0.9, p))
    prob.append(p)
# 根据概率生成成功与否(0/1)
success = np.random.binomial(1, prob)
# 创建DataFrame
df = pd.DataFrame({
    'Zone': zone,
    'Half': half,
    'Success': success
})
print(df.head())

计算整体准确率

overall_accuracy = df['Success'].mean()
print(f"整体球门球长传准确率: {overall_accuracy:.2%}")  # 输出约 59.8%

按区域拆分

zone_accuracy = df.groupby('Zone')['Success'].mean().sort_values(ascending=False)
print("\n各区域长传准确率:")
print(zone_accuracy.apply(lambda x: f"{x:.2%}"))

输出示例:

Zone
Center    68.12%
Right     57.65%
Left      56.24%

按半场拆分

half_accuracy = df.groupby('Half')['Success'].mean()
print("\n各半场长传准确率:")
print(half_accuracy.apply(lambda x: f"{x:.2%}"))

输出示例:

Half
First Half     61.37%
Second Half    58.11%

可视化:用热力图展示区域×半场的准确率

# 构建交叉表
cross_tab = df.pivot_table(index='Half', columns='Zone', values='Success', aggfunc='mean')
# 绘制热力图
plt.figure(figsize=(8, 4))
sns.heatmap(cross_tab, annot=True, fmt=".1%", cmap="RdYlGn", linewidths=0.5)'球门球长传准确率热力图 (按区域与半场)')
plt.ylabel('比赛阶段')
plt.xlabel('传球区域')
plt.tight_layout()
plt.show()

进阶:真实数据的分析逻辑

如果是真实比赛数据(通常为CSV或JSON格式),字段可能包括:

  • gk_pass_long(是否长传,布尔值)
  • outcome(成功/失败)
  • xy 坐标(传球起点/终点)
  • period(比赛分钟/阶段)

真实数据处理流程:

# 读取数据(假设有数据源)
# df = pd.read_csv('goalkeeper_passes.csv')
# 0. 筛选球门球(通常认为是门将开球,且起点靠近球门线)
# df = df[(df['type'] == 'Pass') & (df['pass_length'] == 'Long')]
# 1. 定义长传成功 = 传球到达本方半场前场或对方半场且队友接到球
# df['long_pass_success'] = df.apply(lambda x: 
#                                      1 if x['pass_outcome'] == 'Complete' 
#                                      and x['distance'] > 40 else 0, axis=1)
# 2. 计算成功率
# overall_rate = df['long_pass_success'].mean()
# 3. 按方向(左/中/右)分组统计
# df['direction'] = pd.cut(df['pass_end_x'], bins=[0, 33, 66, 100], labels=['Left', 'Center', 'Right'])
# rate_by_direction = df.groupby('direction')['long_pass_success'].mean()
# 4. 按比赛时间(每15分钟)分析体能对准确率的影响
# df['time_group'] = pd.cut(df['minute'], bins=[0,15,30,45,60,75,90], right=False)
# rate_by_time = df.groupby('time_group')['long_pass_success'].mean()

在这个模拟案例中,门将长传的总体准确率约为 60%

  • 中路长传成功率最高(~68%),说明中路开球更容易被队友争顶到;
  • 下半场准确率略有下降(约3个百分点),可能与体能与压力有关。

如果需要我提供真实足球数据集的解析或更复杂的统计模型(如Logistic回归分析影响因素),欢迎告知具体需求!

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