本文目录导读:

我来为您分析一个展示体能消耗数据差异的Python案例,这个案例会比较不同运动方式、不同人群的体能消耗差异:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建示例数据
def create_exercise_data():
"""创建不同运动方式的体能消耗数据"""
data = {
'运动方式': ['跑步', '游泳', '骑行', '瑜伽', '力量训练', '登山', '跳绳', '散步'],
'卡路里消耗(kcal/h)': [600, 700, 500, 200, 400, 550, 800, 150],
'心率提升(bpm)': [150, 145, 130, 90, 120, 140, 160, 85],
'运动强度指数': [8.5, 9.0, 7.5, 3.5, 6.5, 8.0, 9.5, 2.5]
}
return pd.DataFrame(data)
def create_personal_data():
"""创建不同人群的体能数据"""
data = {
'人群': ['普通上班族', '业余运动员', '专业运动员', '老年人', '青少年', '健身爱好者'],
'基础代谢率(BMR)': [1500, 1800, 2200, 1200, 1600, 2000],
'最大摄氧量(VO2max)': [35, 45, 65, 28, 40, 55],
'静息心率(bpm)': [75, 60, 55, 80, 70, 62]
}
return pd.DataFrame(data)
# 1. 不同运动方式消耗对比
def plot_exercise_comparison():
"""绘制不同运动方式的消耗对比"""
df = create_exercise_data()
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
# 1.1 柱状图 - 卡路里消耗
ax1 = axes[0, 0]
bars = ax1.bar(df['运动方式'], df['卡路里消耗(kcal/h)'], color='skyblue', edgecolor='navy')
ax1.set_title('不同运动方式卡路里消耗对比', fontsize=14, fontweight='bold')
ax1.set_xlabel('运动方式')
ax1.set_ylabel('卡路里消耗 (kcal/h)')
ax1.tick_params(axis='x', rotation=45)
# 添加数据标签
for bar in bars:
height = bar.get_height()
ax1.text(bar.get_x() + bar.get_width()/2., height + 10,
f'{int(height)}', ha='center', va='bottom', fontweight='bold')
# 1.2 条形图 - 运动强度
ax2 = axes[0, 1]
colors = plt.cm.RdYlGn(df['运动强度指数'] / max(df['运动强度指数']))
bars2 = ax2.barh(df['运动方式'], df['运动强度指数'], color=colors)
ax2.set_title('不同运动方式强度指数', fontsize=14, fontweight='bold')
ax2.set_xlabel('强度指数')
# 在条上添加数值
for i, (v, bar) in enumerate(zip(df['运动强度指数'], bars2)):
ax2.text(v, i, f' {v:.1f}', va='center', fontweight='bold')
# 1.3 散点图 - 心率与卡路里关系
ax3 = axes[1, 0]
scatter = ax3.scatter(df['心率提升(bpm)'], df['卡路里消耗(kcal/h)'],
s=100, c=df['运动强度指数'], cmap='viridis')
ax3.set_title('心率提升与卡路里消耗关系', fontsize=14, fontweight='bold')
ax3.set_xlabel('心率提升 (bpm)')
ax3.set_ylabel('卡路里消耗 (kcal/h)')
# 标注每种运动
for i, row in df.iterrows():
ax3.annotate(row['运动方式'],
(row['心率提升(bpm)'], row['卡路里消耗(kcal/h)']),
xytext=(5, 5), textcoords='offset points', fontsize=9)
plt.colorbar(scatter, ax=ax3, label='强度指数')
# 1.4 雷达图 - 综合对比(选择主要运动)
ax4 = axes[1, 1]
main_exercises = ['跑步', '游泳', '力量训练', '登山', '跳绳']
metrics = ['卡路里消耗', '心率提升', '强度指数']
# 归一化数据
radar_data = df[df['运动方式'].isin(main_exercises)].copy()
angles = np.linspace(0, 2 * np.pi, len(metrics), endpoint=False).tolist()
angles += angles[:1]
for idx, (_, row) in enumerate(radar_data.iterrows()):
values = [
row['卡路里消耗(kcal/h)'] / 10,
row['心率提升(bpm)'] / 2,
row['运动强度指数']
]
values += values[:1]
# 归一化
values_norm = [v / max(values) * 100 if '卡路里' in metrics[i] else v / 80 * 100
for i, v in enumerate(values)]
ax4.plot(angles, values_norm, 'o-', linewidth=2, label=row['运动方式'])
ax4.fill(angles, values_norm, alpha=0.25)
ax4.set_title('主要运动综合对比', fontsize=14, fontweight='bold')
ax4.set_xticks(angles[:-1])
ax4.set_xticklabels(metrics)
ax4.set_ylim(0, 100)
ax4.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0))
ax4.grid(True)
plt.tight_layout()
plt.savefig('exercise_comparison.png', dpi=300, bbox_inches='tight')
plt.show()
# 2. 不同人群体能差异
def plot_personal_comparison():
"""展示不同人群的体能数据差异"""
df = create_personal_data()
fig, axes = plt.subplots(1, 3, figsize=(16, 6))
# 2.1 基础代谢率对比
ax1 = axes[0]
bars = ax1.bar(df['人群'], df['基础代谢率(BMR)'],
color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7', '#DDA0DD'])
ax1.set_title('不同人群基础代谢率对比', fontsize=14, fontweight='bold')
ax1.set_ylabel('基础代谢率 (kcal/day)')
ax1.tick_params(axis='x', rotation=45)
for bar in bars:
height = bar.get_height()
ax1.text(bar.get_x() + bar.get_width()/2., height + 20,
f'{int(height)}', ha='center', va='bottom', fontweight='bold')
# 2.2 最大摄氧量对比
ax2 = axes[1]
bars2 = ax2.bar(df['人群'], df['最大摄氧量(VO2max)'],
color=['#FF8A5C', '#A8E6CF', '#FFB6C1', '#98D8C8', '#FFD93D', '#FF8C94'])
ax2.set_title('最大摄氧量对比 (VO2max)', fontsize=14, fontweight='bold')
ax2.set_ylabel('VO2max (ml/kg/min)')
ax2.tick_params(axis='x', rotation=45)
for bar in bars2:
height = bar.get_height()
ax2.text(bar.get_x() + bar.get_width()/2., height + 0.5,
f'{height:.0f}', ha='center', va='bottom', fontweight='bold')
# 2.3 心率对比表
ax3 = axes[2]
ax3.axis('off')
table_data = df[['人群', '静息心率(bpm)']].copy()
# 创建表格
table = ax3.table(cellText=table_data.values,
colLabels=['人群', '静息心率'],
cellLoc='center', loc='center')
table.auto_set_font_size(False)
table.set_fontsize(10)
table.scale(1.2, 1.5)
# 给表格添加颜色
for i in range(len(table_data)):
if table_data.iloc[i, 1] < 60:
table[(i+1, 1)].set_facecolor('#90EE90') # 绿色 - 优秀
elif table_data.iloc[i, 1] < 70:
table[(i+1, 1)].set_facecolor('#FFD700') # 黄色 - 良好
else:
table[(i+1, 1)].set_facecolor('#FF6B6B') # 红色 - 需注意
ax3.set_title('静息心率对比', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig('personal_comparison.png', dpi=300, bbox_inches='tight')
plt.show()
# 3. 数据分析函数
def analyze_data():
"""进行详细的数据分析"""
df_exercise = create_exercise_data()
df_personal = create_personal_data()
print("=" * 60)
print("体能消耗数据分析报告")
print("=" * 60)
# 运动数据分析
print("\n【运动方式分析】")
max_cal = df_exercise.loc[df_exercise['卡路里消耗(kcal/h)'].idxmax()]
min_cal = df_exercise.loc[df_exercise['卡路里消耗(kcal/h)'].idxmin()]
print(f"最高卡路里消耗运动: {max_cal['运动方式']} - {max_cal['卡路里消耗(kcal/h)']} kcal/h")
print(f"最低卡路里消耗运动: {min_cal['运动方式']} - {min_cal['卡路里消耗(kcal/h)']} kcal/h")
print(f"最大消耗差距: {max_cal['卡路里消耗(kcal/h)'] - min_cal['卡路里消耗(kcal/h)']} kcal/h")
# 人群差异分析
print("\n【人群体能差异】")
max_bmr = df_personal.loc[df_personal['基础代谢率(BMR)'].idxmax()]
min_bmr = df_personal.loc[df_personal['基础代谢率(BMR)'].idxmin()]
print(f"最高基础代谢群体: {max_bmr['人群']} - {max_bmr['基础代谢率(BMR)']} kcal/day")
print(f"最低基础代谢群体: {min_bmr['人群']} - {min_bmr['基础代谢率(BMR)']} kcal/day")
print(f"代谢率差异比例: {max_bmr['基础代谢率(BMR)'] / min_bmr['基础代谢率(BMR)']:.1f}倍")
# 相关性分析
corr_cal_hr = df_exercise['卡路里消耗(kcal/h)'].corr(df_exercise['心率提升(bpm)'])
print(f"\n【相关性分析】")
print(f"卡路里消耗与心率相关性: {corr_cal_hr:.2f}")
# 计算建议
print("\n【个性化建议】")
print("1. 高强度运动(跳绳/游泳): 适合快速减脂,但注意心率控制")
print("2. 中等强度(跑步/登山): 适合健康维护,建议每周3-5次")
print("3. 低强度(散步/瑜伽): 适合恢复期和初学者")
return df_exercise, df_personal
# 主程序
if __name__ == "__main__":
# 运行数据分析
df_ex, df_per = analyze_data()
# 生成可视化图表
plot_exercise_comparison()
plot_personal_comparison()
print("\n图表已保存到当前目录")
这个案例的特点:
📊 主要功能
-
多维度数据对比
- 8种不同运动方式的卡路里消耗
- 6类不同人群的体能指标
- 心率、强度等多参数对比
-
丰富的可视化
- 柱状图:直观对比数据
- 雷达图:综合评估多维度
- 散点图:展示数据关联
- 表格:精确数值显示
-
数据分析功能
- 自动找出最大值/最小值
- 计算差异比例
- 相关性分析
- 个性化建议
🎯 展示的核心差异
- 运动方式差异:跳绳(800kcal/h) vs 散步(150kcal/h),差5.3倍
- 人群差异:专业运动员基础代谢是老年人的1.8倍
- 强度与效果关系:心率越高,通常消耗越多
这个案例能很好地展示体能消耗数据的差异,既有数据对比又有可视化呈现,方便理解和分析!
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播