本文目录导读:

“综合实用脚本”和“高速跑动距离对比”这两个说法放在一起,通常有两种理解:
- 体育/足球数据分析:统计球员高速跑动距离,做对比脚本
- 游戏/自动化脚本:角色高速移动距离的计算与对比
下面按足球运动数据分析这个最常见场景,给你一个可直接用的 Python 脚本框架。
需求拆解
| 要素 | 说明 |
|---|---|
| 输入 | 球员追踪数据(时间戳、x/y坐标、速度) |
| 高速阈值 | 如 ≥ 20 km/h 或 ≥ 5.5 m/s |
| 输出 | 每名球员高速跑动距离、占比、对比图表 |
| 对比维度 | 球员之间 / 上下半场 / 比赛之间 |
核心脚本
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# ========== 1. 参数配置 ==========
HIGH_SPEED_THRESHOLD = 5.5 # m/s,约19.8km/h
SAMPLE_INTERVAL = 0.1 # 采样间隔(秒),按实际数据调整
# ========== 2. 读取数据 ==========
# 期望列: player_id, timestamp, x, y, speed
df = pd.read_csv("tracking_data.csv")
df = df.sort_values(["player_id", "timestamp"]).reset_index(drop=True)
# ========== 3. 计算每帧位移 ==========
df["dx"] = df.groupby("player_id")["x"].diff()
df["dy"] = df.groupby("player_id")["y"].diff()
df["dist"] = np.sqrt(df["dx"]**2 + df["dy"]**2)
# ========== 4. 筛选高速段 ==========
df["is_high"] = df["speed"] >= HIGH_SPEED_THRESHOLD
df["high_dist"] = np.where(df["is_high"], df["dist"], 0)
# ========== 5. 汇总统计 ==========
summary = df.groupby("player_id").agg(
total_dist=("dist", "sum"),
high_dist=("high_dist", "sum"),
high_frames=("is_high", "sum"),
avg_speed=("speed", "mean"),
max_speed=("speed", "max"),
).reset_index()
summary["high_ratio"] = summary["high_dist"] / summary["total_dist"]
summary["high_time_s"] = summary["high_frames"] * SAMPLE_INTERVAL
print(summary.sort_values("high_dist", ascending=False))
# ========== 6. 可视化对比 ==========
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
summary_sorted = summary.sort_values("high_dist", ascending=True)
axes[0].barh(summary_sorted["player_id"], summary_sorted["high_dist"], color="tomato")
axes[0].set_title("高速跑动距离对比 (m)")
axes[0].set_xlabel("距离 (m)")
axes[1].barh(summary_sorted["player_id"], summary_sorted["high_ratio"]*100, color="steelblue")
axes[1].set_title("高速跑动占比 (%)")
axes[1].set_xlabel("占比 (%)")
plt.tight_layout()
plt.savefig("high_speed_compare.png", dpi=150)
plt.show()
进阶对比(分组 / 半场 / 多场次)
# 假设数据中有 half 字段 (1/2) 和 match_id
pivot = df.groupby(["player_id", "half"])["high_dist"].sum().unstack()
pivot.columns = [f"半场{c}高速距离" for c in pivot.columns]
pivot["上下半场差"] = pivot.iloc[:,0] - pivot.iloc[:,1]
print(pivot)
常见高速阈值参考
| 标准 | 阈值 | 适用 |
|---|---|---|
| 足球(FIFA) | ≥ 19.8 km/h (5.5 m/s) | 通用高速跑 |
| 冲刺 | ≥ 25.2 km/h (7.0 m/s) | Sprint |
| 篮球 | ≥ 5.0 m/s | 高强度跑 |
| 橄榄球 | ≥ 5.0 m/s | High-speed running |
如果你说的是游戏脚本
那“高速跑动距离对比”一般指:
- 不同移速下单位时间位移对比
- 加速/减速曲线模拟
- 两段路径耗时对比
可以改成这样的极简版:
def run_distance(speed, time, accel=0):
"""匀加速或匀速位移"""
if accel == 0:
return speed * time
t_acc = speed / accel
if t_acc >= time:
return 0.5 * accel * time**2
return 0.5 * accel * t_acc**2 + speed * (time - t_acc)
for v in [3, 5, 8, 10]:
print(f"速度{v} m/s, 10秒位移: {run_distance(v, 10):.1f} m")
你具体是哪种场景?
- 足球/体育数据 → 告诉我数据格式,我可以把脚本改成直接能跑的
- 游戏/自动化 → 说下引擎或需求,我给对应版本
- 只要对比图表模板 → 我也可以给 Excel/Origin 方案