本文目录导读:

“综合实用脚本,高速跑动距离对比”这个需求可以拆成两个方向来理解,下面分别给出可直接用的方案。
如果你要的是体育/足球数据分析脚本
用于统计球员高速跑动距离,并做多人对比。
Python 脚本(基于跟踪数据 CSV)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# ============ 配置 ============
CSV_PATH = "tracking_data.csv" # 列: frame, player_id, x, y, timestamp
HIGH_SPEED_THRESHOLD = 5.5 # m/s,高速跑阈值(足球常用 5.5 或 7.0)
FPS = 25 # 视频帧率
FIELD_SCALE = 0.05 # 像素 -> 米 的换算系数(按实际标定改)
def load_and_clean(path):
df = pd.read_csv(path)
df = df.sort_values(["player_id", "timestamp"]).reset_index(drop=True)
return df
def compute_speed(df):
"""按球员计算瞬时速度 (m/s)"""
df = df.copy()
df["dx"] = df.groupby("player_id")["x"].diff()
df["dy"] = df.groupby("player_id")["y"].diff()
df["dt"] = df.groupby("player_id")["timestamp"].diff()
dist = np.sqrt(df["dx"]**2 + df["dy"]**2) * FIELD_SCALE
df["speed"] = dist / df["dt"]
df["speed"] = df["speed"].fillna(0)
return df
def high_speed_distance(df, threshold=HIGH_SPEED_THRESHOLD):
"""统计每个球员的高速跑动距离(米)"""
df = df.copy()
df["dt"] = df.groupby("player_id")["timestamp"].diff().fillna(0)
df["seg_dist"] = df["speed"] * df["dt"]
hs = df[df["speed"] >= threshold].groupby("player_id")["seg_dist"].sum()
total = df.groupby("player_id")["seg_dist"].sum()
result = pd.DataFrame({
"高速跑距离_m": hs,
"总跑动距离_m": total,
"高速占比_%": (hs / total * 100).round(2)
}).fillna(0).round(2)
return result.sort_values("高速跑距离_m", ascending=False)
def plot_compare(result, top_n=10):
data = result.head(top_n)
fig, ax1 = plt.subplots(figsize=(10, 6))
x = np.arange(len(data))
ax1.bar(x - 0.2, data["高速跑距离_m"], 0.4, label="高速跑距离", color="#e74c3c")
ax1.bar(x + 0.2, data["总跑动距离_m"], 0.4, label="总跑动距离", color="#3498db")
ax1.set_xticks(x)
ax1.set_xticklabels(data.index, rotation=45)
ax1.set_ylabel("距离 (m)")
ax1.set_title("球员高速跑动距离对比")
ax1.legend()
plt.tight_layout()
plt.savefig("high_speed_compare.png", dpi=150)
plt.show()
if __name__ == "__main__":
df = load_and_clean(CSV_PATH)
df = compute_speed(df)
result = high_speed_distance(df)
print(result)
plot_compare(result)
输出示例:
高速跑距离_m 总跑动距离_m 高速占比_%
player_id
7 823.45 10234.21 8.05
10 756.12 9876.33 7.66
...
关键参数说明:
| 参数 | 含义 | 常用值 |
|---|---|---|
| HIGH_SPEED_THRESHOLD | 高速跑门槛 | 5 m/s(足球)/ 5.0(篮球) |
| FIELD_SCALE | 像素→米换算 | 需根据场地标定 |
| FPS | 帧率 | 25 / 30 / 50 |
如果你要的是服务器/服务性能脚本(“高速”指高并发)
用于对比不同服务/接口在高负载(高速)下的实际处理距离/吞吐——比如压测对比。
Bash + wrk/ab 对比脚本
#!/bin/bash
# compare_highspeed.sh - 高并发下多接口性能对比
URLS=(
"http://localhost:8080/api/v1/fast"
"http://localhost:8080/api/v1/slow"
)
DURATION=30 # 压测时长
CONNECTIONS=200 # 并发连接数
THREADS=8
echo "并发: $CONNECTIONS | 时长: ${DURATION}s"
echo "----------------------------------------"
for url in "${URLS[@]}"; do
echo ">>> $url"
wrk -t$THREADS -c$CONNECTIONS -d${DURATION}s --latency "$url" | \
grep -E "Requests/sec|Latency|Transfer/sec"
echo ""
done
Python 综合对比脚本(requests + 并发)
import time, statistics, concurrent.futures as cf
import requests, matplotlib.pyplot as plt
TARGETS = {
"服务A": "http://localhost:8080/api/a",
"服务B": "http://localhost:8080/api/b",
}
CONCURRENCY = 50
ROUNDS = 200
def bench(url):
s = requests.Session()
lat = []
for _ in range(ROUNDS):
t0 = time.perf_counter()
try:
s.get(url, timeout=5)
lat.append((time.perf_counter() - t0) * 1000)
except Exception:
pass
return lat
def run(name, url):
with cf.ThreadPoolExecutor(CONCURRENCY) as ex:
lat = list(ex.map(lambda _: bench(url), range(CONCURRENCY)))
flat = [x for sub in lat for x in sub]
return name, {
"avg_ms": statistics.mean(flat),
"p95_ms": sorted(flat)[int(len(flat)*0.95)],
"p99_ms": sorted(flat)[int(len(flat)*0.99)],
"rps": len(flat) / (sum(flat)/1000),
}
if __name__ == "__main__":
results = [run(n, u) for n, u in TARGETS.items()]
for n, r in results:
print(f"{n}: avg={r['avg_ms']:.1f}ms p95={r['p95_ms']:.1f}ms "
f"p99={r['p99_ms']:.1f}ms rps={r['rps']:.0f}")
names = [n for n, _ in results]
p95 = [r["p95_ms"] for _, r in results]
plt.bar(names, p95, color=["#2ecc71", "#e67e22"])
plt.ylabel("P95 延迟 (ms)")
plt.title("高并发下延迟对比")
plt.savefig("highspeed_compare.png", dpi=150)
plt.show()
需要我进一步细化吗?
为了给你精准的脚本,请补充:
- 场景:体育跑动分析 / 服务器压测 / 其他(如网络传输速率对比)?
- 数据来源:CSV 跟踪数据 / GPS / 实时接口 / 日志?
- 对比维度:距离、速度、延迟、吞吐、还是综合评分?
- 输出形式:终端表格 / 图表 / Excel 报告?
告诉我具体场景,我可以直接给你一份开箱即用的完整脚本。