如何对比两队边路突破能力
如果你想要一个可操作的脚本/分析框架,而不是泛泛而谈,可以按下面这套逻辑来做,适用于足球(也基本适用于篮球的侧翼突破)。

先明确"边路突破能力"要拆成哪几个指标
边路突破 = 意愿 × 成功率 × 威胁产出,所以至少要看这些:
| 维度 | 具体指标 | 说明 |
|---|---|---|
| 频率 | 边路进攻占比、边路触球次数、传中次数 | 打得多不多 |
| 成功率 | 过人成功率、1v1成功次数、被抢断率 | 过得去吗 |
| 推进 | 带球推进距离、进入进攻三区次数 | 能不能带上去 |
| 产出 | 边路传中转化、突破后射门/助攻、造犯规 | 突破有没有用 |
| 人员 | 边锋/边卫的个人数据 | 谁在突 |
数据来源(脚本抓取的目标)
- FBref(免费,有 Progressive Carries、Take-ons、Crosses)
- Understat(xG 链、射门位置)
- SofaScore / WhoScored(过人、被侵犯、传中)
- Opta / StatsBomb(如果有预算)
- Wyscout(专业球探用)
免费方案:FBref + Understat 基本够写一个对比脚本。
Python 脚本思路(伪代码)
import pandas as pd
import requests
from bs4 import BeautifulSoup
# 1. 抓取两队边路球员数据
def get_wing_stats(team_url):
# 从 FBref 抓 Take-ons、Carries、Crosses
df = pd.read_html(team_url)[0]
return df[['Player','Pos','Take_Ons_Succ','Carries_Prog',
'Crosses','Crosses_Acc','Fouled']]
team_a = get_wing_stats("teamA_fbref_url")
team_b = get_wing_stats("teamB_fbref_url")
# 2. 只保留边路球员(边锋、边卫)
wing_pos = ['LW','RW','LM','RM','LB','RB','LWB','RWB']
a_wing = team_a[team_a['Pos'].isin(wing_pos)]
b_wing = team_b[team_b['Pos'].isin(wing_pos)]
# 3. 计算综合评分
def score(df):
df = df.copy()
df['突破评分'] = (
df['Take_Ons_Succ'] * 0.35 +
df['Carries_Prog'] * 0.25 +
df['Crosses_Acc'] * 0.20 +
df['Fouled'] * 0.10 +
df['Crosses'] * 0.10
)
return df.sort_values('突破评分', ascending=False)
print("A队边路:\n", score(a_wing))
print("B队边路:\n", score(b_wing))
# 4. 两队汇总对比
summary = pd.DataFrame({
'A队': a_wing[['Take_Ons_Succ','Carries_Prog','Crosses_Acc']].sum(),
'B队': b_wing[['Take_Ons_Succ','Carries_Prog','Crosses_Acc']].sum(),
})
print(summary)
看结果的正确姿势
光看总数会被"打得多的队"骗,建议:
- 按90分钟归一化(每90分钟数据),否则出场多的球员虚高。
- 区分左右路:分开统计 LW/LB 和 RW/RB,别混在一起。
- 看对手强度:对强队刷的突破含金量更高。
- 结合比赛录像:数据告诉你"突了几次",录像告诉你"突得有没有威胁"。
- 看突破后的选择:传中?内切射门?回做?——这决定突破的实际价值。
一页纸对比模板
| 指标(每90分钟) | A队左路 | A队右路 | B队左路 | B队右路 |
|---|---|---|---|---|
| 成功过人 | ||||
| 带球推进 | ||||
| 准确传中 | ||||
| 造犯规 | ||||
| 突破后射门 | ||||
| 综合评分 |
如果你告诉我:
- 你用的是哪个数据源(FBref / SofaScore / 自采)
- 想分析具体哪两队、哪场比赛
我可以直接给你一份能跑的完整脚本,包括抓取、清洗、可视化的代码。