本文目录导读:

在开源项目(尤其是体育数据分析、足球数据科学类项目)中,要分析两队的中场控制力对比,通常需要结合数据指标和战术逻辑,以下是具体的分析框架和方法:
核心数据指标
控球相关
| 指标 | 说明 |
|---|---|
| 控球率 | 基础指标,但需结合区域 |
| 中场三区控球率 | 更精准反映中场控制 |
| 传球成功率(中场区域) | 反映中场出球稳定性 |
| 向前传球比例 | 反映中场推进意图 |
传球网络
- 传球次数/密度:中场球员间的传球频次
- 传球网络中心性:谁是中场枢纽(可用 networkx 分析)
- 推进传球:每90分钟向进攻三区的传球数
防守与压迫
- 中场抢断/拦截数
- 压迫成功率(PPDA,对手每次防守动作允许的传球数)
- 中场区域夺回球权次数
空间控制
- 平均站位图
- 中场区域触球热图
- 纵深传球距离
开源工具与数据源
数据源
- StatsBomb Open Data(免费,含事件数据)
- FBref(可爬取)
- Understat
- Wyscout 公开数据
分析工具
- mplsoccer:绘制传球网络、热图、平均站位
- socceraction:将事件数据转为动作价值
- networkx:传球网络分析
- statsbombpy:读取 StatsBomb 数据
实操分析流程
# 示例:用 StatsBomb 数据对比两队中场
from statsbombpy import sb
import mplsoccer
# 1. 加载比赛事件
events = sb.events(match_id=XXXX)
# 2. 筛选中场区域事件(x: 33-66)
midfield = events[(events['x'] > 33) & (events['x'] < 66)]
# 3. 按队伍分组统计
for team in events['team'].unique():
team_mid = midfield[midfield['team'] == team]
passes = team_mid[team_mid['type'] == 'Pass']
print(f"{team}: 传球{len(passes)}, 成功率{...}")
关键对比维度
- 数量:谁在中场触球更多?
- 质量:传球成功率、向前传球占比
- 效率:每次控球的推进距离
- 防守:中场夺回球权次数
- 网络:传球中心性、连接度
进阶分析方法
控球价值模型(xT / VAEP)
- 用 xT(Expected Threat) 衡量中场每次传球的威胁增量
- 用 VAEP 评估中场球员对进攻/防守的贡献
传球网络对比
import networkx as nx # 构建两队传球网络 # 对比:节点数、边数、聚类系数、中心性分布
空间占据分析
- 用 mplsoccer 绘制两队中场触球热图叠加
- 计算中场区域的控制面积
压迫强度对比
- PPDA(每次防守动作允许的传球数)
- 中场区域的高位夺回次数
可视化建议
| 图表 | 用途 |
|---|---|
| 传球网络图 | 看中场组织核心 |
| 热图叠加 | 看空间控制 |
| 雷达图 | 多指标综合对比 |
| 桑基图 | 看传球流向 |
| 平均站位图 | 看阵型与中场层次 |
中场控制力对比的核心逻辑
中场控制力 = 控球稳定性 + 推进效率 + 防守压迫 + 空间占据
开源项目中的典型做法:
- 用 StatsBomb/FBref 获取事件数据
- 用 mplsoccer + networkx 做可视化与网络分析
- 用 xT/VAEP 做价值量化
- 多指标雷达图综合对比
如果你有具体的开源项目或数据集,我可以帮你写更针对性的分析代码。