这个python案例显示体能消耗数据差异?

wen python案例 1

本文目录导读:

这个python案例显示体能消耗数据差异?

  1. 📊 主要功能
  2. 🎯 展示的核心差异

我来为您分析一个展示体能消耗数据差异的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图表已保存到当前目录")

这个案例的特点:

📊 主要功能

  1. 多维度数据对比

    • 8种不同运动方式的卡路里消耗
    • 6类不同人群的体能指标
    • 心率、强度等多参数对比
  2. 丰富的可视化

    • 柱状图:直观对比数据
    • 雷达图:综合评估多维度
    • 散点图:展示数据关联
    • 表格:精确数值显示
  3. 数据分析功能

    • 自动找出最大值/最小值
    • 计算差异比例
    • 相关性分析
    • 个性化建议

🎯 展示的核心差异

  • 运动方式差异:跳绳(800kcal/h) vs 散步(150kcal/h),差5.3倍
  • 人群差异:专业运动员基础代谢是老年人的1.8倍
  • 强度与效果关系:心率越高,通常消耗越多

这个案例能很好地展示体能消耗数据的差异,既有数据对比又有可视化呈现,方便理解和分析!

上一篇根据python案例,累计犯规次数已到危险?

下一篇当前分类已是最新一篇

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