根据python案例,进攻三区传球成功率?

wen python案例 3

本文目录导读:

根据python案例,进攻三区传球成功率?

  1. 概念说明
  2. Python实现示例
  3. 关键注意点

我来用Python示例说明如何计算进攻三区传球成功率(通常指足球数据分析中的"Final Third Pass Success Rate")。

概念说明

进攻三区(Final Third):指球场靠近对方球门的1/3区域,进攻三区传球成功率 = 该区域内成功传球次数 / 该区域内总传球次数。

Python实现示例

基础计算

import pandas as pd
# 模拟传球数据
data = {
    'pass_id': range(1, 11),
    'start_zone': ['Mid', 'Mid', 'Final', 'Final', 'Final', 
                   'Final', 'Def', 'Final', 'Final', 'Final'],
    'success': [1, 0, 1, 1, 0, 1, 1, 1, 0, 1]
}
df = pd.DataFrame(data)
# 筛选进攻三区传球
final_third = df[df['start_zone'] == 'Final']
# 计算成功率
success_rate = final_third['success'].mean()
print(f"进攻三区传球成功率: {success_rate:.2%}")
# 输出: 进攻三区传球成功率: 62.50%

使用真实统计库(statsbombpy)

from statsbombpy import sb
import pandas as pd
# 获取比赛事件数据
events = sb.events(match_id=3788741)  # 示例比赛
# 筛选传球事件
passes = events[events['type'] == 'Pass'].copy()
# 提取传球起点坐标,判断是否在进攻三区(x > 80,基于120x80场地)
passes['x'] = passes['location'].apply(lambda loc: loc[0] if isinstance(loc, list) else None)
passes['in_final_third'] = passes['x'] > 80
# 判断传球是否成功(无pass_outcome表示成功)
passes['success'] = passes['pass_outcome'].isna().astype(int)
# 计算进攻三区传球成功率
final_third_passes = passes[passes['in_final_third'] == True]
success_rate = final_third_passes['success'].mean()
print(f"进攻三区传球成功率: {success_rate:.2%}")
print(f"样本数量: {len(final_third_passes)} 次传球")

按球员/球队分级统计

# 按球员统计
player_stats = (final_third_passes
    .groupby('player')
    .agg(
        传球数=('success', 'count'),
        成功数=('success', 'sum'),
        成功率=('success', 'mean')
    )
    .sort_values('成功率', ascending=False)
)
player_stats['成功率'] = player_stats['成功率'].apply(lambda x: f"{x:.1%}")
print(player_stats)

公式总结

$$ \text{进攻三区传球成功率} = \frac{\text{进攻三区成功传球数}}{\text{进攻三区总传球数}} \times 100\% $$

关键注意点

要点 说明
区域定义 通常为 x > 80(120×80场地)或 x > 68.3(105×68场地)
成功判定 队友接到球即为成功,被抢断/出界为失败
传球起点 一般以传球起点是否在进攻三区判定
样本量 样本过少(<10次)时成功率参考价值低

如果你有具体的数据集或想分析某场特定比赛,可以告诉我数据格式,我帮你定制代码。

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