本文目录导读:

球门球长传准确率”的Python案例,是一个非常典型的体育数据分析场景,在足球(soccer)数据中,这通常是指Goal Kicks(球门球)中Long Balls(长传)的成功率。
由于我没有你提到的具体“Python案例”代码文件,我根据足球数据科学(如StatsBomb, Opta)的通用标准,为你提供一套完整的、可运行的Python分析案例,并附上代码和逻辑解释。
这套案例将涵盖:数据清洗 -> 指标定义 -> 计算 -> 可视化。
场景设定
假设我们有一个CSV文件(或DataFrame),包含了某场比赛或整个赛季的门将数据,字段如下:
player_name:球员姓名event_type:事件类型(此处固定为“Goal Kick”)outcome:结果(“Successful” 或 “Unsuccessful”)pass_length:传球距离(米)start_x,start_y:起始坐标end_x,end_y:结束坐标
核心定义:
- 长传:通常定义为传球距离 > 35米(或根据统计分析,>40码)。
- 准确率 = 成功长传次数 / 总长传次数 * 100%。
第一部分:Python代码实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文显示(如果电脑有中文字体)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# ------------------------------
# 1. 模拟数据生成(假设你没有真实数据)
# ------------------------------
def generate_synthetic_data(rows=500):
np.random.seed(42)
data = {
'player_name': np.random.choice(['A_GoalKeeper', 'B_GoalKeeper', 'C_GoalKeeper'], size=rows),
'event_type': ['Goal Kick'] * rows,
'pass_length': np.random.uniform(20, 65, size=rows).round(1), # 距离20-65米
'outcome': np.random.choice(['Successful', 'Unsuccessful'], size=rows, p=[0.6, 0.4]),
}
# 让距离与成功率有点相关性(距离越远越难)
df = pd.DataFrame(data)
# 调整逻辑:距离>55米的,成功率降低
mask_long = df['pass_length'] > 55
df.loc[mask_long & (df['outcome'] == 'Successful'), 'outcome'] = 'Unsuccessful' # 强制降低长距离成功率
df.loc[mask_long, 'outcome'] = np.random.choice(['Successful', 'Unsuccessful'], size=mask_long.sum(), p=[0.3, 0.7])
return df
df = generate_synthetic_data()
print("模拟数据前5行:")
print(df.head())
# ------------------------------
# 2. 核心指标计算:球门球长传准确率
# ------------------------------
def calculate_goal_kick_long_ball_accuracy(dataframe, long_distance_threshold=35):
"""
计算球门球中的长传准确率。
参数:
- dataframe: 包含事件数据的DataFrame
- long_distance_threshold: 将传球判定为“长传”的距离阈值(米)
返回:
- 总览DataFrame(包含球员、总长传数、成功数、准确率)
"""
# 筛选球门球事件
goal_kicks = dataframe[dataframe['event_type'] == 'Goal Kick'].copy()
# 筛选长传(距离大于阈值)
long_balls = goal_kicks[goal_kicks['pass_length'] > long_distance_threshold].copy()
# 如果没有任何长传,返回空
if long_balls.empty:
print("警告:在设定的阈值下没有长传记录。")
return pd.DataFrame()
# 按球员分组计算
grouped = long_balls.groupby('player_name').agg(
total_long_balls=('outcome', 'count'),
successful_long_balls=('outcome', lambda x: (x == 'Successful').sum())
).reset_index()
# 计算准确率
grouped['long_ball_accuracy'] = (grouped['successful_long_balls'] / grouped['total_long_balls'] * 100).round(2)
# 排序
grouped = grouped.sort_values('long_ball_accuracy', ascending=False).reset_index(drop=True)
return grouped
# 调用函数(设定长传阈值=35米)
result = calculate_goal_kick_long_ball_accuracy(df, long_distance_threshold=35)
print("\n球门球长传准确率统计(阈值35米):")
print(result)
# ------------------------------
# 3. 深入分析:距离-准确率关系(散点图)
# ------------------------------
def plot_accuracy_vs_distance(dataframe):
goal_kicks = dataframe[dataframe['event_type'] == 'Goal Kick']
# 计算每个距离段的成功率(简单分箱)
bins = [20, 30, 40, 50, 60, 70]
labels = ['20-30m', '30-40m', '40-50m', '50-60m', '60m+']
goal_kicks['distance_bin'] = pd.cut(goal_kicks['pass_length'], bins=bins, labels=labels, right=False)
success_rate = goal_kicks.groupby('distance_bin', observed=False)['outcome'].apply(
lambda x: (x == 'Successful').mean() * 100
).reset_index(name='success_rate')
plt.figure(figsize=(10, 6))
sns.barplot(x='distance_bin', y='success_rate', data=success_rate, palette='viridis')
plt.title('球门球远端传球距离 vs 成功率')
plt.xlabel('传球距离区间')
plt.ylabel('成功率 (%)')
plt.ylim(0, 100)
for index, row in success_rate.iterrows():
plt.text(index, row['success_rate'] + 2, f"{row['success_rate']:.0f}%", ha='center')
plt.show()
plot_accuracy_vs_distance(df)
第二部分:核心要点与业务解释
指标定义非唯一
- 阈值:在StatsBomb数据中,长传(Long Pass)的定义通常是基于开方坐标计算距离,有的模型用35米,有的用40码(约36.6米)。如果你的案例代码中使用了别的阈值(比如传入参数),替换
long_distance_threshold即可。 - 成功标准:成功的定义往往是“球权归属本方”,即队友接到球,而不是仅仅“落在场内”。
如果案例代码中有坐标轴
有很多案例(比如绘制度图)会根据传球起点和终点坐标计算距离,如果那个PPT或案例用的是 x 和 y 坐标,那么你需要用欧几里得距离公式:
import numpy as np
df['pass_length_computed'] = np.sqrt(
(df['end_x'] - df['start_x'])**2 + (df['end_y'] - df['start_y'])**2
)
如何解读结果(商业/战术意义)
- 高准确率:说明门将的长传决策冷静、脚法精准,或者战术上倾向于短长传(找边后卫/中场)。
- 低准确率:说明门将主打“大脚”开球(如英式长传冲吊),虽然威胁大但成功率低。
- 案例应用:如果某门将长传准确率高达70%+,那么在数据分析报告中,他会被标记为“优秀的组织型门将”。
第三部分:命中率”指的是射门?
与你确认一下,如果那个案例真的是 “球门球直接助攻”(比如门将球门球直接找到前锋形成射门),那么代码的核心逻辑是加一个“关联字段”:
- 判断球门球结束后,下一个动作是否为“Shot”且队友接球。
- 计算“产生射门”的比例。
但通常主流的“球门球准确率”指标就是传球成功接通率。
这个案例只需把其中的“长传距离阈值”调整好,就会得出你想要的答案,如果上面的数据和模拟逻辑与你的PPT案例不符,请提供下述信息,我帮你修正代码:
- 数据字段名(是
length还是distance?) - 成功的字段值(是
accuracy还是outcome?) - 长传的定义是否明确在注释里?
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播