一、项目描述
1.背景描述
本数据集涵盖了与睡眠和日常习惯有关的诸多变量。如性别、年龄、职业、睡眠时间、睡眠质量、身体活动水平、压力水平、BMI类别、血压、心率、每日步数、以及是否有睡眠障碍等细节。
2.数据说明
解释说明:睡眠障碍
类型 | 说明 |
无 | 没有表现出任何特定的睡眠障碍。 |
失眠 | 有入睡或保持睡眠的困难,导致睡眠不足或质量差 |
睡眠呼吸暂停 | 在睡眠过程中出现呼吸暂停,导致睡眠模式紊乱和潜在的健康风险 |
3.数据来源
4.问题描述
全面的睡眠指标:探索睡眠时间、质量和影响睡眠模式的因素。
生活方式因素:分析身体活动水平、压力水平和BMI类别。
心血管健康:检查血压和心率测量。
睡眠障碍分析:识别睡眠障碍的发生,如失眠和睡眠呼吸暂停。
二、数据分析
1.数据读取
import pandas as pd # encoding要设置,moren utf-8打不开 data=pd.read_csv('Sleep_health_and_lifestyle_dataset.csv',encoding='gb2312') data.head()
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
ID | 性别 | 年龄 | 职业 | 睡眠时长 | 睡眠质量 | 身体活动水平 | 压力水平 | BMI | 血压 | 心率 | 每日步数 | 睡眠障碍 | |
0 | 1 | 男性 | 27 | 软件工程师 | 6.1 | 6 | 42 | 6 | 超重 | 126/83 | 77 | 4200 | 无 |
1 | 2 | 男性 | 28 | 医生 | 6.2 | 6 | 60 | 8 | 正常 | 125/80 | 75 | 10000 | 无 |
2 | 3 | 男性 | 28 | 医生 | 6.2 | 6 | 60 | 8 | 正常 | 125/80 | 75 | 10000 | 无 |
3 | 4 | 男性 | 28 | 销售代表 | 5.9 | 4 | 30 | 8 | 肥胖 | 140/90 | 85 | 3000 | 睡眠呼吸暂停 |
4 | 5 | 男性 | 28 | 销售代表 | 5.9 | 4 | 30 | 8 | 肥胖 | 140/90 | 85 | 3000 | 睡眠呼吸暂停 |
2.值范围分析
data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 374 entries, 0 to 373 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ID 374 non-null int64 1 性别 374 non-null object 2 年龄 374 non-null int64 3 职业 374 non-null object 4 睡眠时长 374 non-null float64 5 睡眠质量 374 non-null int64 6 身体活动水平 374 non-null int64 7 压力水平 374 non-null int64 8 BMI 374 non-null object 9 血压 374 non-null object 10 心率 374 non-null int64 11 每日步数 374 non-null int64 12 睡眠障碍 374 non-null object dtypes: float64(1), int64(7), object(5) memory usage: 38.1+ KB
分析可见无空值
3.值范围分析
data['BMI'].unique()
array(['超重', '正常', '肥胖'], dtype=object)
data['睡眠障碍'].unique()
array(['无', '睡眠呼吸暂停', '失眠'], dtype=object)
data['职业'].unique()
array(['软件工程师', '医生', '销售代表', '老师', '护士', '工程师', '会计师', '科学家', '律师', '营业员', '主管'], dtype=object)
data['性别'].unique()
array(['男性', '女性'], dtype=object)
data['血压'].unique()
array(['126/83', '125/80', '140/90', '120/80', '132/87', '130/86', '117/76', '118/76', '128/85', '131/86', '128/84', '115/75', '135/88', '129/84', '130/85', '115/78', '119/77', '121/79', '125/82', '135/90', '122/80', '142/92', '140/95', '139/91', '118/75'], dtype=object)
4.血压处理
data = pd.concat([data,data['血压'].str.split('/',expand = True)],axis = 1) data.rename({0:'收缩压',1:'舒张压'},inplace=True,axis=1) data['收缩压']=data['收缩压'].astype('float32') data['舒张压']=data['舒张压'].astype('float32') data.drop('血压', axis=1) data.head()
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
ID | 性别 | 年龄 | 职业 | 睡眠时长 | 睡眠质量 | 身体活动水平 | 压力水平 | BMI | 血压 | 心率 | 每日步数 | 睡眠障碍 | 收缩压 | 舒张压 | |
0 | 1 | 男性 | 27 | 软件工程师 | 6.1 | 6 | 42 | 6 | 超重 | 126/83 | 77 | 4200 | 无 | 126.0 | 83.0 |
1 | 2 | 男性 | 28 | 医生 | 6.2 | 6 | 60 | 8 | 正常 | 125/80 | 75 | 10000 | 无 | 125.0 | 80.0 |
2 | 3 | 男性 | 28 | 医生 | 6.2 | 6 | 60 | 8 | 正常 | 125/80 | 75 | 10000 | 无 | 125.0 | 80.0 |
3 | 4 | 男性 | 28 | 销售代表 | 5.9 | 4 | 30 | 8 | 肥胖 | 140/90 | 85 | 3000 | 睡眠呼吸暂停 | 140.0 | 90.0 |
4 | 5 | 男性 | 28 | 销售代表 | 5.9 | 4 | 30 | 8 | 肥胖 | 140/90 | 85 | 3000 | 睡眠呼吸暂停 | 140.0 | 90.0 |
5.热力图
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.figure(figsize=(10,6)) sns.heatmap(data.drop('ID',axis=1).corr(),annot=True,fmt="1.1f");