本文目录导读:

在足球数据分析中(特别是使用 StatsBomb 或 Opta 这类数据源时),进攻三区传球成功率(Final Third Passing Accuracy) 是一个基础且实用的指标。
这里提供两个层面的“实用脚本”:
- SQL 查询脚本(适用于从数据库中直接提取数据)。
- Python 脚本(适用于使用
pandas处理导出的 CSV 或通过 API 获取的数据)。
核心定义(先明确口径)
- 进攻三区(Final Third):靠近对方球门的最后 1/3 场地。
- 传球成功:传球成功找到了本方队友(且队友成功控球)。
- 成功率:成功的传球次数 / 该区域总传球尝试次数。
SQL 查询脚本(适用于 Opta/StatsBomb 数据库)
假设你的数据库中有一张名为 passes 的表,包含以下字段:
player_idplayer_namex(起始点 X 坐标,0-100,100 为对方底线)y(起始点 Y 坐标,0-100)outcome(‘Complete’ 或 ‘Incomplete’)match_id
逻辑:提取所有起始点 x > 66.7(即进攻三区)的传球,计算成功率。
SELECT
player_name,
COUNT(*) AS total_passes,
SUM(CASE WHEN outcome = 'Complete' THEN 1 ELSE 0 END) AS successful_passes,
ROUND(
SUM(CASE WHEN outcome = 'Complete' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
1
) AS final_third_accuracy_pct
FROM passes
WHERE
-- 假设坐标是 0-100,进攻三区是接近对方球门的 33.3 码
x > 66.7
-- 如果需要筛选特定赛季或球队,在这里添加过滤条件
-- AND match_id IN (SELECT id FROM matches WHERE season = '2023-24')
GROUP BY player_name
HAVING COUNT(*) >= 10 -- 排除传球次数太少的样本
ORDER BY final_third_accuracy_pct DESC;
Python 实用脚本(Pandas 数据处理)
这是最常用的情况,假设你从数据源导出了一个包含所有传球事件的 CSV 文件,字段名稍有不同,但核心逻辑一致。
场景:你想分析某支球队在上一场比赛中,首发中场球员的进攻三区传球成功率。
import pandas as pd
# 假设 CSV 文件列名如下(根据你的数据源调整)
# 'x': 传球起始点X, 'final' : 是否为进攻三区传球(如果数据源直接提供)
# 我们需要自己计算
# 1. 读取数据
df = pd.read_csv('passes.csv')
# 2. 筛选传球事件(可能包含其他事件,如射门、抢断)
passes_df = df[df['type'] == 'Pass'].copy()
# 3. 判断是否在进攻三区(假设坐标是0-100)
# 注意:进攻方向(我方进攻=朝左还是朝右)需要统一,这里假设标准x坐标,x越大越接近对方球门。
passes_df['is_final_third'] = passes_df['x'] > 66.7
# 4. 筛选进攻三区的传球
final_third_passes = passes_df[passes_df['is_final_third']]
# 5. 假设 'outcome' 列包含 'Complete' 或 'Incomplete'
# 创建布尔值:是否成功
final_third_passes['is_success'] = final_third_passes['outcome'] == 'Complete'
# 6. 根据球员分组计算指标
result = final_third_passes.groupby('player_name').agg(
total_passes=('outcome', 'count'), # 总传球次数
successful_passes=('is_success', 'sum') # 成功次数(布尔求和)
).reset_index()
# 7. 计算成功率
result['accuracy_pct'] = (result['successful_passes'] / result['total_passes'] * 100).round(1)
# 8. 过滤出场传球次数较少的球员(例如至少5次)
result = result[result['total_passes'] >= 5]
# 9. 排序输出
result = result.sort_values('accuracy_pct', ascending=False)
print(result)
进阶版:技术统计(更贴近实用分析)
import pandas as pd
# 如果你的数据源直接提供了 'pass_outcome' 或 'pass_accuracy'
def calculate_final_third_accuracy(df):
"""
一行函数:计算进攻三区传球成功率
df 必须包含列:'x', 'outcome', 'player_id'
"""
final_third = df[df['x'] > 66.7]
group = final_third.groupby('player_id').agg(
attempts=('outcome', 'count'),
completions=('outcome', lambda x: (x == 'Complete').sum())
)
group['success_rate'] = group['completions'] / group['attempts'] * 100
return group.sort_values('success_rate', ascending=False)
关键注意事项
- 坐标问题:不同公司的数据格式不同。
- Opta: 坐标是 0-100,进攻方向取决于半场(如果需要全赛季,必须判断
team_side)。 - StatsBomb: 坐标是 0-120(X轴),进攻三区是指
x >= 80(因为120的一半是60,最后1/3是从80到120)。 - 如果是平铺数据(所有球队都在同一方向),需要先标准化坐标(把对方球门作为 X 轴正方向)。
- Opta: 坐标是 0-100,进攻方向取决于半场(如果需要全赛季,必须判断
- 传球方向:通常排除回传和横传的区分,如果是严格的“前场组织”评估,有时只计算 向前传球(Progressive Pass),如果要求这个,脚本需增加条件:
if x_end > x_start。 - 权重:如果评估传球手,建议加入传球距离加权(如 Expected Threat 或 xT),但标准成功率通常是纯次数比。
总结输出示例
如果你的脚本运行正确,输出将会是一个表格:
| Player Name | Total Attempts | Completed | Final Third Accuracy (%) |
|---|---|---|---|
| 球员A | 15 | 12 | 0 |
| 球员B | 10 | 7 | 0 |
| 球员C | 8 | 4 | 0 |
建议:如果你提供具体的数据源(如 Wyscout 的列名),我可以帮你把字段名改成完全匹配的版本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播