本文目录导读:

分析球员跑动热点图,核心思路是:把球员在场上的位置数据变成密度分布,再用颜色深浅或聚类算法找出高频活动区域,下面从数据来源、工具链、具体方法和常用软件几个层面来说明。
数据来源
热点图的基础是带坐标的位置数据,常见来源:
| 数据类型 | 采集方式 | 精度 |
|---|---|---|
| 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导出?)和想分析的具体场景(单场/赛季/对比),我可以给一段可直接运行的完整代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播