项目背景
背景描述
本数据集涵盖了与睡眠和日常习惯有关的诸多变量。如性别、年龄、职业、睡眠时间、睡眠质量、身体活动水平、压力水平、BMI类别、血压、心率、每日步数、以及是否有睡眠障碍等细节。
- 数据集的主要特征: 综合睡眠指标:
- 探索睡眠持续时间、质量和影响睡眠模式的因素。
- 生活方式因素:分析身体活动水平、压力水平和 BMI 类别。
- 心血管健康:检查血压和心率测量值。
- 睡眠障碍分析:确定失眠和睡眠呼吸暂停等睡眠障碍的发生。
- 数据集列:人员 ID:
- 每个人的标识符。
- 性别:人员的性别(男性/女性)
- 年龄:人员的年龄(以年为单位)。
- 职业:人的职业或职业。
- 睡眠持续时间(小时):该人每天睡眠的小时数。
- 睡眠质量(量表:1-10):对睡眠质量的主观评分,范围从1到10。
- 身体活动水平(分钟/天):该人每天进行身体活动的分钟数。
- 压力水平(等级:1-10):对人所经历的压力水平的主观评级,范围从1到10。
- BMI 类别:人的 BMI 类别(例如,体重不足、正常、超重)。
- 血压(收缩压/舒张压):人的血压测量值,表示收缩压超过舒张压。
- 心率 (bpm):人的静息心率(以每分钟心跳数为单位)。
- 每日步数:此人每天的步数。
- 睡眠障碍:人体内是否存在睡眠障碍(无、失眠、睡眠呼吸暂停)。
有关睡眠障碍专栏的详细信息:
类型 | 说明 |
无 | 个体没有表现出任何特定的睡眠障碍。 |
失眠 | 个人难以入睡或保持睡眠状态,导致睡眠不足或质量差。 |
睡眠呼吸暂停 | 个人在睡眠期间呼吸暂停,导致睡眠模式中断和潜在的健康风险。 |
睡眠健康和生活方式数据集包括400行和13列,涵盖了与睡眠和日常习惯相关的广泛变量。它包括性别、年龄、职业、睡眠持续时间、睡眠质量、身体活动水平、压力水平、身体质量指数分类、血压、心率、每日步数以及是否存在睡眠障碍等详细信息。
在这里,我们将使用已经可供使用的“Sleep _ health _ and _ life style _ dataset . CSV”数据库,下面您将看到数据的分析、数据的处理以及使用机器模型的学习分类来实现我们的目标。
导入库
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import plotly.express as px from sklearn.metrics import accuracy_score, confusion_matrix, classification_report from yellowbrick.classifier import ConfusionMatrix from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import r2_score from sklearn.metrics import mean_absolute_error, mean_squared_error from sklearn.model_selection import GridSearchCV from sklearn.model_selection import RandomizedSearchCV from sklearn.preprocessing import LabelEncoder
导入数据
df = pd.read_csv('/kaggle/input/sleep-health-and-lifestyle-dataset/Sleep_health_and_lifestyle_dataset.csv', sep = ',') • 1
这里我们可以看到,我们有分类和连续变量,我们也可以看到,我们没有空值。
- Person ID(个人ID):每个人的标识符。
- Gender(性别):人的性别(男/女)。
- Age(年龄):以年为单位的人的年龄。
- Occupation(职业):人的职业或专业。
- Sleep Duration (hours)(睡眠持续时间(小时)):人每天睡眠的小时数。
- Quality of Sleep (scale: 1-10)(睡眠质量(等级:1-10):对睡眠质量的主观评价,范围从1到10。
- Physical Activity Level (minutes/day)(身体活动水平(分钟/天)):个人每天从事身体活动的分钟数。
- Stress Level (scale: 1-10)(压力水平(等级:1-10)):对人所经历的压力水平的主观评级,范围从1到10。
- BMI Category(身体质量指数类别):个人的身体质量指数类别(例如,体重不足、正常、超重)。
- Blood Pressure (systolic/diastolic)(血压(收缩压/舒张压)):个人的血压测量值,表示为收缩压/舒张压。
- Heart Rate (bpm)(心率(bpm)):人的静息心率,单位为每分钟心跳数。
- Daily Steps(每日步数):此人每天走的步数。
- Sleep Disorder(睡眠障碍):人是否存在睡眠障碍(无、失眠、睡眠呼吸暂停)。
数据分析
corr = df.corr().round(2) plt.figure(figsize = (25,20)) sns.heatmap(corr, annot = True, cmap = 'YlOrBr')
分类变量。
在这里,当我们查看分类变量时,我们可以看到我们的数据在男性和女性之间分布良好,查看身体质量指数,我们可以看到大多数人在正常和超重之间,当我们查看我们的目标变量时,我们可以看到大多数人没有睡眠问题,那些有睡眠问题的人在失眠和睡眠呼吸暂停之间分布良好。
plt.figure(figsize = (20, 10)) plt.subplot(2, 2, 1) plt.gca().set_title('Variable Gender') sns.countplot(x = 'Gender', palette = 'Set2', data = df) plt.subplot(2, 2, 2) plt.gca().set_title('Variable BMI Category') sns.countplot(x = 'BMI Category', palette = 'Set2', data = df) plt.subplot(2, 2, 3) plt.gca().set_title('Variable Sleep Disorder') sns.countplot(x = 'Sleep Disorder', palette = 'Set2', data = df)
看看职业一栏,我们可以看到我们有一些优势职业。
连续变量。
当我们看我们的分类变量时,我们可以看到,我们在大多数变量中没有一个模式,几乎所有的变量在一些数据中显示平衡,而在另一些数据中不显示平衡。
plt.figure(figsize = (15, 18)) plt.subplot(4, 2, 1) sns.histplot(x = df['Age'], kde = False) plt.subplot(4, 2, 2) sns.histplot(x = df['Sleep Duration'], kde = False) plt.subplot(4, 2, 3) sns.histplot(x = df['Quality of Sleep'], kde = False) plt.subplot(4, 2, 4) sns.histplot(x = df['Physical Activity Level'], kde = False) plt.subplot(4, 2, 5) sns.histplot(x = df['Stress Level'], kde = False) plt.subplot(4, 2, 6) sns.histplot(x = df['Heart Rate'], kde = False) plt.subplot(4, 2, 7) sns.histplot(x = df['Daily Steps'], kde = False)
查看箱线图,我们可以确认我们没有需要处理的异常值
plt.title("Boxplot Age", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Age"])
plt.title("Boxplot Sleep Duration", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Sleep Duration"])
plt.title("Boxplot Quality of Sleep", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Quality of Sleep"])
plt.title("Boxplot Physical Activity Level", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Physical Activity Level"])
plt.title("Boxplot Stress Level", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Stress Level"])
plt.title("Boxplot Heart Rate", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Heart Rate"])
plt.title("Boxplot Daily Steps", fontdict = {'fontsize': 20}) sns.boxplot(x=df["Daily Steps"])
双变量分析。
当我们比较我们的目标变量和分类变量时,我们可以看到有趣的模式,例如女性比男性有更多的睡眠问题,同样的,当我们看身体质量指数变量时,超重的人更有可能有睡眠问题,正常体重的人通常没有任何问题。
当我们看病人的职业时,我们可以看到一个非常有趣的事情,教授,护士和售货员更有可能有睡眠问题,当我们看律师,医生和工程师时,我们可以看到他们一般没有任何问题。
plt.figure(figsize = (20, 10)) plt.suptitle("Analysis Of Variable Sleep Disorder",fontweight="bold", fontsize=20) plt.subplot(2, 1, 1) plt.gca().set_title('Variable Gender') sns.countplot(x = 'Gender', hue = 'Sleep Disorder', palette = 'Set2', data = df) plt.subplot(2, 1, 2) plt.gca().set_title('Variable BMI Category') sns.countplot(x = 'BMI Category', hue = 'Sleep Disorder', palette = 'Set2', data = df)
plt.figure(figsize = (20, 10)) plt.subplot(2, 1, 1) plt.gca().set_title('Variable Occupation') sns.countplot(x = 'Occupation', hue = 'Sleep Disorder', palette = 'Set2', data = df) plt.subplot(2, 1, 2) plt.gca().set_title('Variable Blood Pressure') sns.countplot(x = 'Blood Pressure', hue = 'Sleep Disorder', palette = 'Set2', data = df)
plt.figure(figsize = (25, 20)) plt.suptitle("Analysis Of Variable Sleep Disorder",fontweight="bold", fontsize=20) plt.subplot(4,2,1) sns.boxplot(x="Sleep Disorder", y="Age", data=df) plt.subplot(4,2,2) sns.boxplot(x="Sleep Disorder", y="Sleep Duration", data=df) plt.subplot(4,2,3) sns.boxplot(x="Sleep Disorder", y="Quality of Sleep", data=df) plt.subplot(4,2,4) sns.boxplot(x="Sleep Disorder", y="Physical Activity Level", data=df) plt.subplot(4,2,5) sns.boxplot(x="Sleep Disorder", y="Stress Level", data=df) plt.subplot(4,2,6) sns.boxplot(x="Sleep Disorder", y="Heart Rate", data=df) plt.subplot(4,2,7) sns.boxplot(x="Sleep Disorder", y="Daily Steps", data=df)