基于数据可视化学习的卡路里消耗预测分析

ops/2025/2/25 2:35:35/

数据分析实操集合:

1、关于房间传感器监测数据集的探索
2、EEMD-LSTM模型择时策略 — 1.EEMD分解与LSTM模型搭建
3、EEMD-LSTM模型择时策略 — 2. 量化回测
4、国际超市电商销售数据分析
5、基于问卷调查数据的多元统计数据分析与预测(因子分析、对应分析与逻辑回归)
6、手写文本识别
7、语音情感识别
8、电商会员门店消费数据分析
9、糖尿病风险预测模型分析与构建
10、基于卷积神经网络(CNN)和ResNet50的水果与蔬菜图像分类系统
11、学生抑郁情况可视化分析及预测
12、人脸表情识别(GUI实时识别)
13、基于LSTM的机场天气分析及模型预测

运动能量消耗数据分析

Background:数据集包含了来自不同用户的多项体征数据,包括性别、年龄、身高、体重等基本信息,以及运动持续时间、心率和体温等与身体活动相关的数据。

通过分析这些数据,探索用户在进行身体活动时的热量消耗情况,即目标变量Calories,从而为个性化健身计划或健康管理提供数据支持。
数据分析
基础统计分析
影响因素分析
构建预测模型

总结:通过数据分析可视化,清晰直观发现 持续时间越长,燃烧的卡路里就越高。心率跳动与燃烧的卡路里呈正相关。持续时间增加会导致心率和体温增加。

Importing Libraries 导入库

import numpy as np
import pandas as pdimport matplotlib.pyplot as plt
import seaborn as snsfrom scipy.stats import shapiro, kstest, mannwhitneyu, ttest_ind, levenefrom sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.metrics import mean_absolute_error

数据准备

data = pd.read_csv("/home/mw/input/02141492/calories.csv")
data.sample(5)

在这里插入图片描述

data.describe()

在这里插入图片描述

data.select_dtypes('object').describe()
Data Preprocessing 数据预处理
data.shape
data.isnull().sum()

在这里插入图片描述

data.columns = data.columns.str.lower()
# 删除无关特征(如 User_Id)
# data = data.drop(columns=["User_Id"])del data['user_id']
data.plot.box(subplots=True, figsize=(10,5))
plt.tight_layout()

在这里插入图片描述
身高、体重、心率和体温存在异常值。
Data Distribution 数据分布

import seaborn as sns
print(sns.__version__)
!pip install -U seaborn
import seaborn as sns
print(sns.__version__)

ps:由于histplot 函数是在 seaborn 0.11.0 版本中引入的; seaborn 需更新到 0.11.0 以上。

fig, axes = plt.subplots(4,2, figsize=(10,10))for i, column in enumerate(data.columns):row = i // 2col = i % 2if column in data.select_dtypes(np.number).columns:sns.histplot(data[column], ax=axes[row, col])else:count_values = data[column].value_counts()sns.barplot(x=count_values.index, y=count_values.values, ax=axes[row,col])axes[row, col].set_title(f'Distribution of {column}')axes[row, col].set_ylabel('frequency')plt.tight_layout()

在这里插入图片描述

Correlations Analysis 相关性分析
sns.heatmap(data[data.select_dtypes(np.number).columns].corr(), annot=True)

在这里插入图片描述
1.持续时间越长,燃烧的卡路里就越高。
2.心率越快,燃烧的卡路里就越高。
3.年龄和燃烧的卡路里具有较弱的相关性。
4.持续时间增加会导致心率和体温增加。

gender_calories = data.groupby('gender')['calories'].mean()sns.barplot(x=gender_calories.index, y=gender_calories.values, palette='viridis')
plt.ylabel('average calories')
plt.title('Average Calories per Gender')

在这里插入图片描述
据观察,男性组的平均卡路里燃烧量略高于女性组。

kstest_res = []
kruskal_test = []fig, axes = plt.subplots(1,2, figsize=(10,5))for i, gender in enumerate(data['gender'].unique()):to_test = data [ data['gender'] == gender]['calories']stats, pvalue =  kstest(to_test, 'norm')if pvalue > 0.05:assumption = 'normal'else:assumption = 'not normal'kstest_res.append([gender, pvalue, assumption])kruskal_test.append(to_test)sns.histplot(to_test, ax=axes[i], palette='viridis')axes[i].set_title(f'Distribution for {gender} calories')axes[i].set_ylabel('frequency')kstest_df = pd.DataFrame(kstest_res, columns=['gender','pvalue','assumption'])
kstest_df

在这里插入图片描述
如图男性和女性卡路里的分布不呈正态。

stats, pvalue = mannwhitneyu(*kruskal_test, alternative='greater') if pvalue <= 0.05:assumption = 'reject H0'
else:assumption = 'accept H0'print('Kruskal pvalue:',pvalue,'\nAssumption:',assumption)

在这里插入图片描述
p值表明,男性燃烧的卡路里并不明显高于女性。

Feature Engineering 特征工程
encoder = LabelEncoder()model_data = data.copy()
model_data['gender'] = encoder.fit_transform(model_data['gender'])model_data.sample(5)
Predictive Modelling 预测建模

训练和测试

x = model_data[['gender', 'age', 'height', 'weight', 'duration', 'heart_rate','body_temp']]
y = model_data['calories']x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=42)
sns.scatterplot(x=x_train['heart_rate'], y=y_train, color=sns.color_palette('viridis')[4])sns.scatterplot(x=x_test['heart_rate'], y=y_test, color=sns.color_palette('viridis')[2])

在这里插入图片描述

Random Forest Regressor 随机森林回归
rf_model = RandomForestRegressor(n_estimators=1000, max_depth=15, max_features=3, oob_score=True, random_state=42)rf_model.fit(x_train, y_train)
rf_predicted = rf_model.predict(x_test)
rf_score = rf_model.score(x_test, y_test)
rf_mae = mean_absolute_error(y_test, rf_predicted)
rf_oob = rf_model.oob_score_rf_df = pd.DataFrame({'model':['Random Forest'], 'r2_score':[rf_score], 'rf_mae':[rf_mae], 'oob_score':[rf_oob]})
sns.scatterplot(x=x_test['heart_rate'], y=y_test, color=sns.color_palette('viridis')[4])
sns.lineplot(x=x_test['heart_rate'], y=rf_predicted, color=sns.color_palette('viridis')[2])

在这里插入图片描述
Key Indicators 关键指标

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltrf_fi = pd.DataFrame({'feature':x.columns, 'importances':rf_model.feature_importances_})# 对 DataFrame 按照 'importances' 排序
rf_fi_sorted = rf_fi.sort_values(by='importances', ascending=False)# 使用 seaborn 绘制条形图
sns.barplot(data=rf_fi_sorted, x='importances', y='feature', palette='viridis')# 显示图表
plt.show()

在这里插入图片描述
持续时间对预测燃烧的卡路里影响最大。
Model Performance 模型性能

rf_df

在这里插入图片描述

# 检查缺失值
print(data.isnull().sum())# 如果有缺失值,可以选择填充或删除
data = data.dropna()  # 删除缺失值# 分离特征和目标变量
X = data.drop(columns=["calories"])
y = data["calories"]

在这里插入图片描述

# 标准化特征
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(x)
构建 XGBoost 模型

用 XGBoost 构建预测模型,并通过交叉验证评估模型性能

from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split, cross_val_score# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 初始化 XGBoost 模型
model = XGBRegressor(n_estimators=100,  # 树的数量learning_rate=0.1,  # 学习max_depth=4,  # 树的最大深度random_state=42
)# 训练模型
model.fit(X_train, y_train)# 交叉验证评估
cv_scores = cross_val_score(model, X_train, y_train, cv=5, scoring="neg_mean_squared_error")
print("Cross-Validation RMSE:", np.sqrt(-cv_scores).mean())

在这里插入图片描述

模型评估
评估模型在测试集上的性能,并绘制预测结果与实际值的对比图。

# 预测测试集
y_pred = model.predict(X_test)# 计算评估指标
from sklearn.metrics import mean_squared_error, r2_scoremse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print("MSE:", mse)
print("R²:", r2)# 绘制预测结果与实际值的对比图
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], color="red", linestyle="--")
plt.xlabel("Actual Calories")
plt.ylabel("Predicted Calories")
plt.title("Actual vs Predicted Calories")
plt.show()

在这里插入图片描述

特征重要性分析

分析特征对模型预测的贡献程度,帮助理解哪些因素对热量消耗的影响最大

# 获取特征重要性
feature_importances = model.feature_importances_
feature_names = x.columns# 绘制特征重要性条形图
sns.barplot(x=feature_importances, y=feature_names, palette="viridis")
plt.xlabel("Importance")
plt.ylabel("Features")
plt.title("Feature Importances")
plt.show()

在这里插入图片描述
持续时间对预测燃烧的卡路里影响最大。

# 若需要完整数据集以及代码请点击以下链接
https://mbd.pub/o/bread/mbd-aJWUlJ9u

http://www.ppmy.cn/ops/161094.html

相关文章

Redis 设置密码无效问题解决

一、验证密码有没有生效 运行cmd&#xff0c;cd到redis的目录下 输入“redis-cli.exe” 回车 输入“auth 123456” 回车 若错误&#xff0c;说明没有设置密码或者设置的密码没有生效 输入“exit” 回车就立即退出redis 二、解决方案是&#xff1a;直接修改后缀是 .conf 的…

【Redis】基础知识入门

文章目录 Redis 入门SQL && NoSQLRedis 介绍 Redis 常见命令Redis数据结构介绍通用命令String 类型基本内容介绍常见的命令key 的结构 Hash类型基本内容介绍常见命令 List类型基本内容介绍常见命令 Set类型基本内容介绍常见命令 SortedSet 类型基本内容介绍常见命令 Re…

【Python爬虫(55)】Scrapy进阶:深入剖析下载器与下载中间件

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

Deepin(Linux)设置开机自动启动 MySQL

要在系统启动时自动启动 MySQL&#xff0c;可以通过配置 systemd 来实现。由于已经完成了 MySQL 的安装并且能够启动 MySQL 服务&#xff0c;接下来我们将创建一个 systemd 服务单元文件&#xff0c;让 MySQL 在系统启动时自动启动。 1. 创建 systemd 服务文件 首先&#xff…

拼多多面试题记录

0 问题汇总 以下内容为经过豆包的回答,不一定对,只为自己学习使用 1 C++11有哪些新特性? 语言易用性增强 统一的初始化语法 C++11 引入了花括号初始化器(列表初始化),可以用于各种类型的初始化,包括基本类型、数组、容器等,并且可以防止窄化转换。 自动类型推导 auto …

PHP2(WEB)

##解题思路 打开页面什么线索都没有&#xff0c;目录扫描只是扫出来一个index.php&#xff0c;而源代码没有东西&#xff0c;且/robots.txt是不允许访问的 于是一番查询后发现&#xff0c;有个index.phps的文件路径&#xff0c;里头写着一段php的逻辑&#xff0c;对url的id参数…

管道-过滤器、隐式调用、解释器架构风格对比

管道-过滤器、隐式调用与解释器架构风格对比 1. 管道过滤器风格&#xff08;Pipe-Filter&#xff09; 核心思想&#xff1a;系统由一系列独立的过滤器&#xff08;处理单元&#xff09;组成&#xff0c;通过管道&#xff08;数据通道&#xff09;连接&#xff0c;数据按顺序流…

全面汇总windows进程通信(三)

在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: RPC(远程过程调用,Remote Pr…