综合实用脚本,高速跑动距离对比?

wen 实用脚本 1

本文目录导读:

综合实用脚本,高速跑动距离对比?

  1. 综合实用脚本:高速跑动距离对比
  2. 如何适配你的真实数据?
  3. 进阶实用功能(可选添加)

“综合实用脚本,高速跑动距离对比”这个需求,通常出现在体育数据分析(如足球、篮球)、游戏角色测试或运动训练场景中,由于你没有提供具体的数据格式和运行环境,我为你准备了一个通用性极强的 Python 脚本框架

这个脚本的核心功能是:

  1. 自动读取包含时间、速度、球员/角色ID的数据。
  2. 自定义高速阈值(大于 20 km/h 算作高速跑动)。
  3. 计算并对比不同对象(球员A vs 球员B,或 本场 vs 上场)的高速跑动距离。
  4. 可视化输出对比结果。

你可以直接复制并根据你的数据列名修改即可使用。


综合实用脚本:高速跑动距离对比

适用场景:足球/篮球球员GPS背心数据、游戏角色移动测试、跑步训练分析。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# ================= 配置区 =================
# 1. 高速跑动阈值 (单位:km/h),足球通常取 19.8 或 20,篮球可取 16。
HIGH_SPEED_THRESHOLD = 20.0 
# 2. 采样间隔 (单位:秒),假设数据是每秒记录一次。
TIME_INTERVAL_SEC = 1.0 
# 3. 数据文件路径 (CSV格式,需包含: 时间, 对象ID, 速度)
# 示例数据格式:
# timestamp, player_id, speed_kmh
# 0, A, 5.2
# 1, A, 21.5
# ...
DATA_FILE = 'gps_data.csv'
# ==========================================
def calculate_high_speed_distance(df, threshold, interval):
    """
    计算每个对象的高速跑动距离
    df: 包含 'player_id' 和 'speed_kmh' 的 DataFrame
    threshold: 高速阈值 (km/h)
    interval: 采样间隔 (秒)
    """
    # 筛选出高速跑动的数据
    high_speed_df = df[df['speed_kmh'] >= threshold].copy()
    # 计算每一条高速记录对应的距离 (km) = 速度(km/h) * (时间间隔/3600)
    high_speed_df['distance_km'] = high_speed_df['speed_kmh'] * (interval / 3600.0)
    # 按对象分组求和
    result = high_speed_df.groupby('player_id')['distance_km'].sum().reset_index()
    result.columns = ['对象ID', '高速跑动距离(km)']
    # 保留3位小数
    result['高速跑动距离(km)'] = result['高速跑动距离(km)'].round(3)
    return result
def generate_mock_data():
    """生成模拟数据用于演示,如果你有真实数据请忽略此函数"""
    np.random.seed(42)
    players = ['球员A', '球员B', '球员C']
    data = []
    for player in players:
        for t in range(3600): # 模拟1小时,每秒一个点
            # 模拟速度:大部分时间低速,偶尔冲刺
            base_speed = np.random.normal(5, 2) # 平均5km/h
            if np.random.random() > 0.9: # 10%的时间高速跑
                base_speed = np.random.normal(22, 3)
            base_speed = max(0, base_speed) # 速度不能为负
            data.append({'timestamp': t, 'player_id': player, 'speed_kmh': base_speed})
    return pd.DataFrame(data)
def plot_comparison(result_df):
    """绘制对比柱状图"""
    plt.figure(figsize=(10, 6))
    # 设置中文字体 (根据你的系统调整,Windows通常用SimHei,Mac用Arial Unicode MS)
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS'] 
    plt.rcParams['axes.unicode_minus'] = False
    bars = plt.bar(result_df['对象ID'], result_df['高速跑动距离(km)'], color=['#FF6B6B', '#4ECDC4', '#45B7D1'])
    # 在柱子上显示数值
    for bar in bars:
        yval = bar.get_height()
        plt.text(bar.get_x() + bar.get_width()/2, yval + 0.01, f'{yval} km', ha='center', va='bottom', fontsize=12)
    plt.title(f'高速跑动距离对比 (阈值: {HIGH_SPEED_THRESHOLD} km/h)', fontsize=16)
    plt.xlabel('对象', fontsize=14)
    plt.ylabel('高速跑动距离 (km)', fontsize=14)
    plt.grid(axis='y', linestyle='--', alpha=0.7)
    plt.tight_layout()
    plt.show()
def main():
    print("正在加载数据...")
    # 1. 加载数据 (如果没有文件,使用模拟数据)
    try:
        df = pd.read_csv(DATA_FILE)
        print(f"成功读取文件: {DATA_FILE}")
    except FileNotFoundError:
        print(f"未找到 {DATA_FILE},正在生成模拟数据演示...")
        df = generate_mock_data()
    # 2. 计算高速跑动距离
    print(f"正在计算高速跑动距离 (阈值 >= {HIGH_SPEED_THRESHOLD} km/h)...")
    result = calculate_high_speed_distance(df, HIGH_SPEED_THRESHOLD, TIME_INTERVAL_SEC)
    # 3. 打印结果
    print("\n========== 高速跑动距离统计结果 ==========")
    print(result.to_string(index=False))
    print("==========================================")
    # 4. 可视化对比
    plot_comparison(result)
if __name__ == "__main__":
    main()

如何适配你的真实数据?

如果你的数据不是 player_idspeed_kmh,请修改 main() 函数中的读取部分:

场景1:数据是宽表(每列是一个球员,值是速度)

# 原始数据: timestamp, 球员A, 球员B
# 需要先转换为长表
df = pd.read_csv('your_data.csv')
df = df.melt(id_vars=['timestamp'], var_name='player_id', value_name='speed_kmh')

场景2:数据是坐标(X, Y),需要先算速度 如果你的数据只有坐标,没有速度,可以在脚本前面加一步:

# 假设有 x, y 列
df['dist'] = np.sqrt(df.groupby('player_id')['x'].diff()**2 + df.groupby('player_id')['y'].diff()**2)
df['speed_kmh'] = df['dist'] / TIME_INTERVAL_SEC * 3.6  # 米/秒 -> km/h

场景3:对比的是“不同时间段”而非“不同人” 你可以把 player_id 替换为 period(如:上半场、下半场),逻辑完全一样。


进阶实用功能(可选添加)

如果你需要更专业的分析,可以在这个脚本基础上增加:

  1. 分档统计:不仅统计高速,还统计冲刺(>25 km/h)、中速跑。
  2. 区间对比:对比“比赛前15分钟” vs “比赛后15分钟”的高速跑动下降率。
  3. 输出Excel报告:使用 result.to_excel('report.xlsx') 直接生成报告。

需要我帮你针对特定的数据格式(比如Catapult、StatSports导出的Excel)做定制修改吗? 你可以贴出你的数据列名,我帮你改好。

抱歉,评论功能暂时关闭!