健身房会员锻炼数据可视化分析实战教学
通过对健身房会员锻炼数据的可视化分析,我们得到了以下结论:男性会员略多于女性会员。随着年龄的增长,最大心率呈现下降趋势。不同年龄段的卡路里消耗量存在波动,但总体趋势不明显。经验水平较高的会员在锻炼时消耗的卡路里更多。不同年龄段的平均体重存在差异,全体平均体重约为74.10 kg。46-60岁年龄段的会员最多。体重分布较为均匀。饮水量与卡路里消耗量之间存在一定的正相关关系。锻炼频率较高的会员心率指标
目录
项目背景和目的
在当今健康意识日益增强的时代,健身房会员的锻炼数据成为了健身房运营者和研究人员的重要资源。通过对这些数据的分析,可以更好地了解会员的锻炼习惯、偏好以及锻炼效果,从而提供更个性化的服务和优化锻炼计划。本文将通过一个名为《健身房会员锻炼数据可视化》的项目,展示如何利用Python进行健身房会员锻炼数据的可视化分析。
PyTorch框架基础架构
PyTorch是一个开源的机器学习框架,具有以下核心组件:
-
张量(Tensors):类似于NumPy的ndarray,但可以在GPU上运行,支持自动求导。
-
自动求导(Autograd):记录张量操作以构建计算图,并自动计算梯度。
-
神经网络模块(nn.Module):提供了构建神经网络的模块化接口,包括各种预定义的层类型。
-
优化器(Optimizers):提供了多种优化算法,如SGD、Adam等,用于模型参数更新。
-
数据加载器(DataLoader):帮助高效地加载和批处理数据。
用途
PyTorch广泛用于研究和生产环境中的深度学习任务,包括但不限于:
-
图像分类
-
目标检测
-
自然语言处理
-
强化学习
选择PyTorch的原因
在这个项目中,我们选择PyTorch作为深度学习框架,主要基于以下原因:
-
动态计算图:PyTorch采用动态图机制,允许在运行时修改计算图,提供了更大的灵活性。
-
易用性:PyTorch的API设计直观,易于学习和使用,适合快速开发和实验。
-
强大的社区支持:PyTorch拥有活跃的社区和丰富的资源,遇到问题时容易找到解决方案。
-
与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()
用于绘制计数柱状图。
项目总结
通过对健身房会员锻炼数据的可视化分析,我们得到了以下结论:
-
男性会员略多于女性会员。
-
随着年龄的增长,最大心率呈现下降趋势。
-
不同年龄段的卡路里消耗量存在波动,但总体趋势不明显。
-
经验水平较高的会员在锻炼时消耗的卡路里更多。
-
不同年龄段的平均体重存在差异,全体平均体重约为74.10 kg。
-
46-60岁年龄段的会员最多。
-
体重分布较为均匀。
-
饮水量与卡路里消耗量之间存在一定的正相关关系。
-
锻炼频率较高的会员心率指标也较高。
-
运动时长与能量消耗之间存在明显的正相关关系。
-
峰值心率与训练时长之间存在一定的线性关系。
-
经验水平较高的会员在相同运动时长下消耗的卡路里更多。
-
不同锻炼类型的分布较为均匀。
-
卡路里消耗与锻炼时长、锻炼频率之间存在较强的正相关性。
这些结论为健身房运营者提供了有价值的参考,可以帮助他们更好地了解会员的锻炼习惯和偏好,从而制定更有效的营销策略和锻炼计划。
未来工作
未来,我们可以进一步扩展这个项目,包括但不限于:
-
引入更多数据源,如会员的健康状况、饮食习惯等。
-
使用机器学习算法进行预测分析,如预测会员的卡路里消耗量或锻炼频率。
-
开发一个交互式仪表板,让健身房运营者可以实时查看和分析数据。
希望这个项目能够为健身房运营者提供有价值的洞见,并激发更多人对数据可视化的兴趣。
更多推荐

所有评论(0)