本文目录导读:

“综合实用脚本”和“高速跑动距离对比”这两个说法放在一起,通常有两种理解:
- 体育/足球数据分析:统计球员高速跑动距离,做对比脚本
- 游戏/自动化脚本:角色高速移动距离的计算与对比
下面按足球运动数据分析这个最常见场景,给你一个可直接用的 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 方案
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播