本文目录导读:

我来用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次)时成功率参考价值低 |
如果你有具体的数据集或想分析某场特定比赛,可以告诉我数据格式,我帮你定制代码。