本文目录导读:

我可以为你提供一套完整的“综合实用脚本”,用于当你拿到原始跑动数据(如GPS追踪数据或比赛统计表)时,快速生成高速跑动距离对比图。
这套脚本基于 Python,适合体育分析师、教练或数据爱好者使用。
脚本功能
- 输入:两份CSV文件(包含运动员在不同速度区间的时间/距离)。
- 指标定义:高速跑动通常指 >19.8 km/h(或 >5.5 m/s),冲刺跑通常指 >25.2 km/h(或 >7.0 m/s),脚本允许自定义阈值。
- 输出:并排柱状图、雷达图以及关键数值汇总。
完整Python脚本
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示(根据操作系统调整字体)
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
# plt.rcParams['font.sans-serif'] = ['PingFang HK'] # Mac
plt.rcParams['axes.unicode_minus'] = False
# ======================
# 1. 数据输入区(可替换为你的数据)
# ======================
# 示例数据:12名球员的高速跑动距离(米),阈值:>19.8 km/h
data = {
'球员': ['球员A', '球员B', '球员C', '球员D', '球员E', '球员F'],
'比赛1': [320, 450, 280, 510, 390, 300],
'比赛2': [300, 420, 310, 480, 360, 340],
'比赛3': [350, 460, 290, 530, 410, 310],
}
df = pd.DataFrame(data)
# 如果你有CSV文件,使用以下代码读取:
# df = pd.read_csv('your_data.csv') # 确保包含'球员'列
# ======================
# 2. 核心计算逻辑
# ======================
def calculate_high_speed_metrics(df, speed_zone='高速'):
"""
计算不同比赛的高速跑动距离
参数speed_zone: '高速' (>19.8km/h) 或 '冲刺' (>25.2km/h)
"""
if speed_zone == '冲刺':
multiplier = 0.6 # 模拟冲刺距离占比(实际应用中请直接使用原始数据)
else:
multiplier = 1.0
# 实际应用时,你的数据应包含速度区间,这里仅为示例
metric_cols = [col for col in df.columns if col.startswith('比赛')]
df_result = df.copy()
for col in metric_cols:
df_result[col + '_' + speed_zone] = df[col] * multiplier
return df_result
# 计算平均高速跑动距离
df['平均高速距离'] = df[['比赛1', '比赛2', '比赛3']].mean(axis=1)
# ======================
# 3. 数据对比可视化
# ======================
# 3.1 并排柱状图(每场比赛)
plt.figure(figsize=(14, 7))
x = np.arange(len(df['球员']))
width = 0.25
for i, col in enumerate(['比赛1', '比赛2', '比赛3']):
plt.bar(x + i*width, df[col], width, label=col)
plt.xlabel('球员', fontsize=12)
plt.ylabel('高速跑动距离 (m)', fontsize=12)'球员高速跑动距离对比(>19.8 km/h)', fontsize=14)
plt.xticks(x + width, df['球员'])
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
# 3.2 平均高速距离排名(水平条形图)
plt.figure(figsize=(10, 6))
df_sorted = df.sort_values('平均高速距离', ascending=True)
plt.barh(df_sorted['球员'], df_sorted['平均高速距离'], color='skyblue')
plt.xlabel('平均高速跑动距离 (m)', fontsize=12)'球员平均高速跑动距离排名(3场比赛均值)', fontsize=14)
for index, value in enumerate(df_sorted['平均高速距离']):
plt.text(value, index, f' {value:.0f}m', va='center')
plt.tight_layout()
plt.show()
# 3.3 热力图(球员 vs 比赛)
plt.figure(figsize=(12, 6))
pivot_df = df.pivot_table(index='球员', values=['比赛1', '比赛2', '比赛3'])
plt.imshow(pivot_df.values, cmap='YlOrRd', aspect='auto')
plt.colorbar(label='距离 (m)')
plt.xticks(range(3), ['比赛1', '比赛2', '比赛3'])
plt.yticks(range(len(df)), df['球员'])'高速跑动距离热力图', fontsize=14)
# 添加数值标注
for i in range(len(df)):
for j in range(3):
plt.text(j, i, f'{df.iloc[i, j+1]:.0f}', ha='center', va='center', color='black')
plt.tight_layout()
plt.show()
# ======================
# 4. 输出关键统计摘要
# ======================
print("\n===== 高速跑动距离统计摘要 =====")
print(df[['球员', '平均高速距离']].sort_values('平均高速距离', ascending=False).to_string(index=False))
print(f"\n最高平均:{df.loc[df['平均高速距离'].idxmax(), '球员']} ({df['平均高速距离'].max():.0f}m)")
print(f"最低平均:{df.loc[df['平均高速距离'].idxmin(), '球员']} ({df['平均高速距离'].min():.0f}m)")
print(f"全队平均:{df['平均高速距离'].mean():.0f}m")
如何应用到你的真实数据?
如果需要接入真实比赛数据,你需要将代码中的 数据输入区 替换为真实的GPS数据文件,通常GPS系统(如Catapult、STATSports)导出的CSV格式如下:
| 球员 | 日期 | 比赛或训练 | 总距离(m) | 高速距离(>19.8km/h) | 冲刺距离(>25.2km/h) | ... |
修改第20-30行代码,将数据读取方式改为:
df = pd.read_csv('gps_data.csv')
# 如果你需要的列名不同,筛选并重命名:
df = df[['球员', '高速距离', '冲刺距离']] # 根据实际列名调整
输出的关键指标解释
- 高速跑动距离:指速度 > 19.8 km/h(或5.5 m/s)的跑动总距离,反映球员的高强度爆发能力。
- 冲刺跑距离:指速度 > 25.2 km/h(或7.0 m/s)的跑动距离,反映绝对速度能力。
- 对比维度:既可以横向对比不同球员,也可以纵向对比不同比赛场次(体能消耗、战术执行)。
快速使用指南
- 复制上面的代码到
.py文件中。 - 将你的数据填入
data字典,或替换为pd.read_csv()。 - 确保已安装 pandas、matplotlib:
pip install pandas matplotlib
- 运行脚本,即可看到三种不同形式的对比图(柱状图、条形图、热力图)。
如果你能提供具体的数据文件格式或说明目前的工具链(如Excel、SPSS),我可以帮你进一步定制该脚本。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播