本文目录导读:

球门球长传准确率”的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(成功/失败)x、y坐标(传球起点/终点)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回归分析影响因素),欢迎告知具体需求!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播