目录

项目背景和目的

PyTorch框架基础架构

用途

选择PyTorch的原因

与其他框架的对比

数据来源和预处理

可视化部分

性别分布

年龄与最大心率的关系

年龄与卡路里消耗的关系

经验水平与卡路里消耗的关系

按年龄划分的平均体重

​编辑年龄组分布

体重分布

水分摄入与能量消耗的关系

按经验水平划分的性别分布

函数介绍

项目总结

未来工作


项目背景和目的

在当今健康意识日益增强的时代,健身房会员的锻炼数据成为了健身房运营者和研究人员的重要资源。通过对这些数据的分析,可以更好地了解会员的锻炼习惯、偏好以及锻炼效果,从而提供更个性化的服务和优化锻炼计划。本文将通过一个名为《健身房会员锻炼数据可视化》的项目,展示如何利用Python进行健身房会员锻炼数据的可视化分析。

PyTorch框架基础架构

PyTorch是一个开源的机器学习框架,具有以下核心组件:

  1. 张量(Tensors):类似于NumPy的ndarray,但可以在GPU上运行,支持自动求导。

  2. 自动求导(Autograd):记录张量操作以构建计算图,并自动计算梯度。

  3. 神经网络模块(nn.Module):提供了构建神经网络的模块化接口,包括各种预定义的层类型。

  4. 优化器(Optimizers):提供了多种优化算法,如SGD、Adam等,用于模型参数更新。

  5. 数据加载器(DataLoader):帮助高效地加载和批处理数据。

用途

PyTorch广泛用于研究和生产环境中的深度学习任务,包括但不限于:

  • 图像分类

  • 目标检测

  • 自然语言处理

  • 强化学习

选择PyTorch的原因

在这个项目中,我们选择PyTorch作为深度学习框架,主要基于以下原因:

  1. 动态计算图:PyTorch采用动态图机制,允许在运行时修改计算图,提供了更大的灵活性。

  2. 易用性:PyTorch的API设计直观,易于学习和使用,适合快速开发和实验。

  3. 强大的社区支持:PyTorch拥有活跃的社区和丰富的资源,遇到问题时容易找到解决方案。

  4. 与Python生态集成:与NumPy等Python库无缝集成,便于数据预处理和后处理。

与其他框架的对比

相比之下,其他框架如TensorFlow、Keras等也有各自的优势:

  • TensorFlow:在生产环境中部署模型方面表现出色,具有强大的静态图优化能力。

  • Keras:以用户友好著称,提供了简单的高层接口,适合快速构建原型。

然而,PyTorch的动态图和调试便利性使其在研究和开发阶段更具优势,这也是我们选择它的主要原因。

通过展示训练过程中的损失变化和对框架的详细介绍,我们可以更全面地理解和评估深度学习项目。

数据来源和预处理

数据来源于Kaggle竞赛平台,包含973条记录。我们首先加载数据并进行预处理,包括缺失值处理和重复值检查。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_csv('/kaggle/input/test1/gym_members_exercise_tracking.csv')

# 查看数据基本信息
df.info()
df.describe().T

数据预处理部分包括按年龄分组计算平均体重,计算全体平均体重。

# 按年龄分组计算平均体重
age_weight_mean = df.groupby("Age")["Weight (kg)"].mean().reset_index(name="Average weight")

# 计算全体平均体重
overall_mean = age_weight_mean["Average weight"].mean()

可视化部分

性别分布

我们首先绘制性别分布的饼图,以了解健身房会员的性别比例。

# 计算DataFrame中"Gender"列各性别的出现次数
gender_counts = df["Gender"].value_counts()

# 创建一个新的图形窗口
plt.figure()

# 绘制饼图
plt.pie(gender_counts, labels=gender_counts.index, autopct='%1.1f%%')
plt.title("Gender distribution")
plt.show()

从图中可以看出,健身房会员中男性会员略多于女性会员。

年龄与最大心率的关系

接下来,我们分析年龄与最大心率之间的关系。

# 创建图形窗口
plt.figure(figsize=(10, 6))

# 绘制折线图
sns.lineplot(data=df, x="Age", y="Max_BPM", label="Max BPM", color="b")

# 设置标题和轴标签
plt.title("Relationship between Age and Max BPM", fontsize=16)
plt.xlabel("Age", fontsize=12)
plt.ylabel("Max BPM", fontsize=12)

# 显示图例
plt.legend()

# 显示图形
plt.show()

图中显示,随着年龄的增长,最大心率呈现下降趋势。

年龄与卡路里消耗的关系

我们进一步分析年龄与卡路里消耗之间的关系。

# 创建图形窗口
plt.figure(figsize=(10, 6))

# 绘制折线图
sns.lineplot(data=df, x="Age", y="Calories_Burned", label="Calories Burned", color="g")

# 设置标题和轴标签
plt.title("Relationship between Age and Calories Burned", fontsize=16)
plt.xlabel("Age", fontsize=12)
plt.ylabel("Calories Burned (kcal)", fontsize=12)

# 显示图例
plt.legend()

# 显示图形
plt.show()

图中显示,不同年龄段的卡路里消耗量存在波动,但总体趋势不明显。

经验水平与卡路里消耗的关系

我们还可以分析经验水平与卡路里消耗之间的关系。

# 创建图形窗口
plt.figure(figsize=(12, 6))

# 绘制折线图
sns.lineplot(data=df, x="Session_Duration (hours)", y="Calories_Burned", hue="Experience_Level", marker="o")

# 设置标题和轴标签
plt.title("Calories Burned by Experience Level over Time", fontsize=16)
plt.xlabel("Session Duration (hours)", fontsize=12)
plt.ylabel("Calories Burned (kcal)", fontsize=12)

# 显示图形
plt.show()

图中显示,经验水平较高的会员在锻炼时消耗的卡路里更多。

按年龄划分的平均体重

我们按年龄分组计算平均体重,并绘制折线图。

# 创建图形窗口(宽度10英寸,高度6英寸)
plt.figure(figsize=(10, 6))

# 绘制折线图
sns.lineplot(data=age_weight_mean, x="Age", y="Average weight", marker="o")

# 添加全局平均线
plt.axhline(overall_mean, color='red', linestyle='--', linewidth=2, label=f'Average: {overall_mean:.2f} kg')

# 添加平均值文字标注
plt.text(age_weight_mean["Age"].max(), overall_mean - 1, f'Average: {overall_mean:.2f} kg', color='red', fontsize=12)

# 设置标题和轴标签
plt.title("Average weight by age")
plt.xlabel("Age")
plt.ylabel("Average weight (kg)")

# 显示图例
plt.legend()

# 显示图形
plt.show()

年龄组分布

我们对会员的年龄进行分组,并绘制柱状图。

import matplotlib.pyplot as plt
import pandas as pd

# 定义年龄分组边界值
bins = [18, 26, 36, 46, 60]

# 定义每个分组的标签名称
labels = ['18-25', '26-35', '36-45', '46-60']

# 创建新的年龄分组列
df["Age Group"] = pd.cut(df["Age"], bins=bins, labels=labels, right=False)

# 初始化画布
plt.figure(figsize=(8, 5))

# 绘制柱状图
df["Age Group"].value_counts(sort=False).plot(kind="bar", color="skyblue", edgecolor="black")

# 添加图表标题和轴标签
plt.title("Age Group Distribution")
plt.xlabel("Age Group")
plt.ylabel("Count")

# 显示图形
plt.show()

图中显示,46-60岁年龄段的会员最多。

体重分布

我们绘制体重分布的直方图。

# 导入可视化库
import matplotlib.pyplot as plt  # 基础绘图库
import seaborn as sns  # 高级统计可视化库

# 创建图形窗口
plt.figure(figsize=(10, 6))

# 绘制直方图
sns.histplot(df["Weight (kg)"], bins=15, kde=True, color="skyblue", edgecolor="black")

# 设置标题和轴标签
plt.title("Weight Distribution (kg)", fontsize=16, fontweight="bold")
plt.xlabel("Weight (kg)", fontsize=12)
plt.ylabel("Frequency", fontsize=12)

# 添加网格线
plt.grid(True, linestyle='--', alpha=0.7)

# 显示图形
plt.show()

图中显示,体重分布较为均匀。

水分摄入与能量消耗的关系

我们分析饮水量与卡路里消耗之间的关系。

# 创建图形窗口
plt.figure(figsize=(10, 6))

# 绘制散点图
sns.scatterplot(x="Water_Intake (liters)", y="Calories_Burned", data=df, color="purple")

# 设置标题和轴标签
plt.title("Hydration vs Energy Expenditure", fontsize=16)
plt.xlabel("Water Intake (L)", fontsize=12)
plt.ylabel("Calories Burned (kcal)", fontsize=12)

# 显示图形
plt.show()

图中显示,饮水量与卡路里消耗量之间存在一定的正相关关系。

按经验水平划分的性别分布

我们分析不同经验水平下的性别分布情况。

# 创建图形窗口(宽度10英寸,高度6英寸)
plt.figure(figsize=(10, 6))

# 绘制计数柱状图
sns.countplot(data=df, x="Experience_Level", hue="Gender", palette='Set1')

# 设置主标题(字号16pt)
plt.title("Gender Distribution by Experience Level", fontsize=16)

# 设置x轴标签(描述分类变量)
plt.xlabel("Experience Level", fontsize=12)

# 设置y轴标签(明确计数对象)
plt.ylabel("Count of Members", fontsize=12)

# 显示图形
plt.show()

由于绘制的图过多将不再此处一一展示。

函数介绍

在项目中,我们使用了以下关键函数:

1. pd.read_csv()

用于从CSV文件加载数据。

2. df.groupby()

用于按指定列对数据进行分组。

3. sns.lineplot()

用于绘制折线图。

4. plt.pie()

用于绘制饼图。

5. sns.histplot()

用于绘制直方图。

6. sns.scatterplot()

用于绘制散点图。

7. sns.heatmap()

用于绘制热力图。

8. sns.regplot()

用于绘制回归散点图。

9. sns.countplot()

用于绘制计数柱状图。

项目总结

通过对健身房会员锻炼数据的可视化分析,我们得到了以下结论:

  1. 男性会员略多于女性会员。

  2. 随着年龄的增长,最大心率呈现下降趋势。

  3. 不同年龄段的卡路里消耗量存在波动,但总体趋势不明显。

  4. 经验水平较高的会员在锻炼时消耗的卡路里更多。

  5. 不同年龄段的平均体重存在差异,全体平均体重约为74.10 kg。

  6. 46-60岁年龄段的会员最多。

  7. 体重分布较为均匀。

  8. 饮水量与卡路里消耗量之间存在一定的正相关关系。

  9. 锻炼频率较高的会员心率指标也较高。

  10. 运动时长与能量消耗之间存在明显的正相关关系。

  11. 峰值心率与训练时长之间存在一定的线性关系。

  12. 经验水平较高的会员在相同运动时长下消耗的卡路里更多。

  13. 不同锻炼类型的分布较为均匀。

  14. 卡路里消耗与锻炼时长、锻炼频率之间存在较强的正相关性。

这些结论为健身房运营者提供了有价值的参考,可以帮助他们更好地了解会员的锻炼习惯和偏好,从而制定更有效的营销策略和锻炼计划。

未来工作

未来,我们可以进一步扩展这个项目,包括但不限于:

  1. 引入更多数据源,如会员的健康状况、饮食习惯等。

  2. 使用机器学习算法进行预测分析,如预测会员的卡路里消耗量或锻炼频率。

  3. 开发一个交互式仪表板,让健身房运营者可以实时查看和分析数据。

希望这个项目能够为健身房运营者提供有价值的洞见,并激发更多人对数据可视化的兴趣。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐