本文目录导读:

分析球员跑动热点图,核心思路是:把球员在场上的位置数据变成密度分布,再用颜色深浅或聚类算法找出高频活动区域,下面从数据来源、工具链、具体方法和常用软件几个层面来说明。
数据来源
热点图的基础是带坐标的位置数据,常见来源:
| 数据类型 | 采集方式 | 精度 |
|---|---|---|
| GPS/可穿戴设备 | 球员背心内置GPS | 5–20 Hz,精度较高 |
| 光学追踪系统 | 多摄像头(如Hawk-Eye、STATSports) | 25 Hz,厘米级 |
| 视频手动标注 | 人工打点 | 低效、低频 |
| 事件数据 | Opta/StatsBomb等 | 只有触球点,非连续跑动 |
连续跑动热点图通常来自GPS或光学追踪,事件数据只能做触球热图。
分析流程与工具
数据预处理(Python / R)
import pandas as pd
import numpy as np
# 假设数据: timestamp, x, y, speed
df = pd.read_csv("player_tracking.csv")
# 过滤: 只保留比赛中、有效时段
df = df[(df['period'] <= 2)]
# 坐标归一化到球场标准尺寸 (105m x 68m)
df['x_norm'] = df['x'] / 105 * 100
df['y_norm'] = df['y'] / 68 * 100
生成热点图 —— 三种主流方法
方法A:KDE(核密度估计)—— 最常用
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 7))
sns.kdeplot(
x=df['x_norm'], y=df['y_norm'],
fill=True, cmap='Reds', levels=100,
thresh=0.05, bw_adjust=0.5, ax=ax
)
# 叠加球场线
ax.set_xlim(0, 100); ax.set_ylim(0, 100)
plt.show()
bw_adjust(带宽)控制平滑程度:值越小越细碎,越大越平滑。
方法B:2D直方图 / 网格计数
heatmap, xedges, yedges = np.histogram2d(
df['x_norm'], df['y_norm'], bins=[20, 13] # 5m x 5m 网格
)
plt.imshow(heatmap.T, origin='lower', cmap='hot')
方法C:mplsoccer(足球专用库)
from mplsoccer import Pitch
import matplotlib.pyplot as plt
pitch = Pitch(pitch_type='statsbomb', line_zorder=2)
fig, ax = pitch.draw()
pitch.kdeplot(
df['x_norm'], df['y_norm'],
ax=ax, fill=True, cmap='Reds', levels=100
)
mplsoccer 直接内置标准球场底图,最省事。
进阶分析维度
单纯的位置密度只是第一步,真正有价值的是结合其他变量:
-
速度分层
- 只统计冲刺(>25 km/h)区域 → 看爆发跑动热点
- 慢跑/走位区域 → 看站位习惯
-
时间分段
按15分钟切片,观察体能下降后热点是否后移/收缩
-
方向性分析
用箭头或流线图(quiver)显示跑动方向,不只看停留
-
聚类识别区域
from sklearn.cluster import DBSCAN coords = df[['x_norm','y_norm']].values labels = DBSCAN(eps=3, min_samples=30).fit_predict(coords)
自动找出“主要活动区”数量与位置。
-
对比分析
- 同一球员上下半场对比
- 两队同位置球员对比
- 有球/无球状态对比
常用软件/平台
| 工具 | 特点 |
|---|---|
| Python (mplsoccer + seaborn) | 最灵活,开源,适合定制 |
| R (ggplot2 + soccerAnimate) | 学术研究常用 |
| Tableau / Power BI | 拖拽式,适合做报告 |
| STATSports / Catapult | 职业队商用系统,直接出图 |
| Hudl / Wyscout | 视频+数据一体,教练友好 |
| FC Python / SonarQube | 教学示例多 |
实战建议
- 带宽选择:KDE的
bw太大会糊成一片,太小会变成散点,建议0.3–0.8之间调 - 归一化:不同球场尺寸必须统一到同一坐标系再比较
- 样本量:一场比赛约5–10万个点,太少(<5000)热点图不可靠
- 别只看热图:热图会掩盖时间信息,配合跑动距离、冲刺次数、平均位置一起看
- 注意偏差:GPS在室内/遮挡下误差大;光学系统会被遮挡
如果你告诉我你手头的数据格式(CSV?Opta?GPS导出?)和想分析的具体场景(单场/赛季/对比),我可以给一段可直接运行的完整代码。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。