温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        Sleep Cycle(SC;NorthCube,Gothenburg,Sweden)是一款可在基于android和iOS设备上使用的移动电话应用程序。SC是一个智能闹钟,它可以跟踪你的睡眠模式,并在浅睡眠中唤醒你。SC会跟踪整晚的睡眠情况,并使用30分钟的窗口,在这个窗口中,警报会在最轻的阶段(即浅睡眠)结束,达到所需的警报时间。SC通过两种运动检测模式中的一种来进行睡眠运动检测:(i)使用内置麦克风分析运动的麦克风,或(ii)使用手机内置加速计的加速计。

        本项目利用 pandas + Matplotlib + seaborn + sklearn 等工具包,对睡眠数据进行探索式可视化分析,并构建 KNN、LR、决策树、随机森林等算法实现对睡眠质量的预测建模。

        B站详情与代码下载:基于python个人睡眠质量分析设计与实现_哔哩哔哩_bilibili

2. 功能组成

        基于python个人睡眠质量分析建模的功能主要包括:

3. 数据读取和预处理

        本项目采用 SC提供的数据,并通过iOS上的Northcube的Sleep Cycle应用程序收集。

    Start-开始睡眠时间
    End-结束睡眠时间
    Sleep quality-睡眠质量
    Time in bed-躺在床上的时间
    Wake up-醒来状态
    Sleep Notes-睡眠笔记
    Heart rate-睡眠心率
    Activity (steps)-活动(步骤)

        缺失值分析,检查整个数据集中的空部分,红色部分缺少数据:

        “Wake up”、“Sleep Notes”和“Heart rate”功能中缺少数据。我们可以注意到“卧床时间”的特征是从“开始”和“结束”两个方面来计算的。正如我们所知,睡眠质量不仅取决于睡眠的持续时间“在床上的时间”,还取决于你睡眠的“开始”时刻。

df['Start time'] = pd.Series([val.time() for val in df['Start']])
df['End time'] = pd.Series([val.time() for val in df['End']])
df['Start time in second'] = df['Start time'].apply(lambda x: (x.hour*60+x.minute)*60 + x.second)
df['End time in second'] = df['End time'].apply(lambda x: (x.hour*60+x.minute)*60 + x.second)

4. 数据探索式可视化分析

4.1 非空特征间的相关性

# 相关性的可视化
fig = plt.figure(figsize = (12,10))
r = sns.heatmap(df.corr(),cmap='Oranges')
r.set_title('Correlation')

        检查特征与“睡眠质量”的相关性:

df.corr()['Sleep quality'].sort_values(ascending = False)
Sleep quality           1.000000
Time in bed             0.695206
Start time in second    0.234936
End time in second      0.076523
Heart rate             -0.037846
Activity (steps)       -0.190491

        很明显,“卧床时间”与“睡眠质量”的关系最大,除了它本身。睡眠时间的“开始时间”与“结束时间”的关系更大。

4.2 全局特征 pairplot

4.3 “睡眠质量”和“卧床时间”与单位秒的联合绘图

4.4 开始睡眠和结束睡眠时间的柱状图

4.5 步数 Steps 的分布柱状图

        从上面的柱状图来看,“步数”不是睡眠时的“步数”,而是白天的“步数”,代表白天的活动。

4.6 “睡眠质量”和“活动性”特征与秒级别单位的联合图。

# 特征与睡眠质量"sleep quality" 的相关性
df_new.corr()['Sleep quality'].sort_values(ascending = False)

# Scatter plot
plt.figure(figsize=(10,6))
plt.scatter(df_new['Sleep quality'],df_new['Activity (steps)'], c="g", alpha=0.5, marker=r'$\clubsuit$',
            label="Sleep quality vs. Steps")
plt.xlabel("Sleep quality")
plt.ylabel("Steps during the day")
plt.legend(loc='upper left')
plt.show()

        如果我们只看“睡眠质量”和“步数 step ”之间的相关性,它们就没有那么大的关系了。根据经验,人们普遍认为,白天大量活动可以改善睡眠质量。然而,我们在这里没有看到这种关系。

5. 机器学习建模 Machine Learning

5.1 训练集和测试集划分

X = df[['Time in bed', 'Start time in second','End time in second','Activity (steps)']].values
y = df['Sleep quality'].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)
# In order to normalize the features, it is better to use MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

5.2 LinearRegression Model

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
lm.score(X_test,y_test)

print('test accuracy:', lm.score(X_test,y_test))

5.3 KNN (K nearest neighbors) model

from sklearn.neighbors import KNeighborsClassifier

error_rate =[]
for i in range(1,20):
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train,y_train)
    pred_i = knn.predict(X_test)
    error_rate.append(np.mean(pred_i != y_test))

plt.figure(figsize=(10,6))
plt.plot(range(1,20),error_rate, color ='red',linestyle='dashed',marker='v',
        markerfacecolor = 'blue', markersize=10)
plt.title('Error Rate vs. K value')
plt.xlabel('K')
plt.ylabel('Error Rate')

         同理构建Logistic Regression Model、Decision Tree Model、Random Forest Model 、Support Machine Vector (SVM) Algorithm等机器学习模型,受篇幅限制,此处省略。

        对多个模型的预测结果进行对比:

Linear Regresion Model precision: 0.41236039548039705 
KNN Model precision: 0.06741573033707865 
Logistic Regression Model precision: 0.03932584269662921 
Decision Tree Model precision: 0.05056179775280899 
Random Tree Model precision: 0.03932584269662921 
Support Machine Vector precision: 0.033707865168539325

6. 睡眠质量可视化分析预测系统

6.1 系统首页与注册登陆

6.2 睡眠质量影像因素分析

6.3 睡眠质量相关性分析

6.4 睡眠质量评分预测

7. 总结

        本项目利用 pandas + Matplotlib + seaborn + sklearn 等工具包,对睡眠数据进行探索式可视化分析,并构建 KNN、LR、决策树、随机森林等算法实现对睡眠质量的预测建模。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐