昨天写年度总结,突然想起来以前安卓手机上有两年多的 SleepBot 睡眠数据,今天终于整理好,用 Node.js 预处理数据,用 ECharts 画成图表了。

数据是从网页版 SleepBot 导出的,我没想到它非常贴心地提供了 CSV 数据下载,实在非常感动!

从 2013 年 3 月起,我使用 SleepBot 跟踪睡眠数据,安卓手机里下载了 App,睡觉的时候点一下开始睡觉,起床的时候点一下起床了。期间由于换手机之类的原因中断过一段时间,直到今年 8 月份换成 SleepBetter,但是这个应用只是比较好看,功能性上远不如 SleepBot,所以在买了 Pro 版用了半个月之后失望地弃用了。

SleepBot 数据的一个缺点就在于记录睡觉和起床时间是手动的,考虑到我失眠非常严重,我也不知道自己睡着的真实时间,有时候失眠时间比较久我会起来重置一下再睡。所以以下数据存在一定误差,通常意味着统计的睡眠时间早于实际的睡眠时间。

为此,我买了 Misfit Flash 手环,在挑选的时候,主要看中的是 API 的开放程度,其次是美观。使用 Misfit 两个月了,它会自动记录睡眠时间,但是有时候躺床上看书的时候也会被误判成睡觉,所以如果是这时候,睡觉前可以手动点一下准备睡觉。总体而言,我对 Misfit 还是比较满意的,上周更新的时候突然不能更新了,导致我一周的数据有点混乱,不过客服很给力,一直跟我邮件交流,最后终于解决了这个问题。最近 Misfit 又更新了更多 API,准备等我数据多一点的时候做一点统计。

以下统计基于的数据是从 2013 年 3 月到 2015 年 8 月的 856 条 SleepBot 记录。

上图是这两年多以来的睡觉起床时间分布图,圆圈的大小表示记录条数的多少,虚线表示平均。需要注意的是,为了便于理解,在这张图表中,睡觉时间不管是 23:59 还是 00:01,都是以起床那天是星期几决定横坐标的。

平均睡觉时间是凌晨 1:10,对这个数据我有点意外,虽然有时候是会两三点睡,但是我以为平均下来也就 12 点的样子。平均起床时间是 8:34,倒也比我预想的早,或许是因为近期起得晚,而最近的两个月没有计算在内。

周五、周六、周日通常睡得晚,想着休息日就晚点睡,难得回家可以看电视之类的。尤其是周六晚上(最右边一列,因为起床是周日,下略),通常觉得是最后一天休息的日子,所以会看电视看到比较晚。另外一个有意思的发现是,原来周四都会睡得比较早,大概想着马上周末了,心情好开心,早早就愿意睡觉了。周日晚上(最左上角)通常是住学校的,家里睡了两天席梦思大床,来学校普遍睡得晚了。

再看起床时间。即使周日晚上睡得晚,周一早上也是工作日中起得早的,我感觉周一还是比较有动力有拼劲的,可能想着早点起床去实验室干活。等到了周四周五就越来越想放弃了,哎,还是让我多睡一会儿吧!相应地,周一也比较乖乖早睡,所以周二早上就起得来。而周三下午往往要汇报进度,所以上午赶紧起床!周六周日理所当然起得晚,但是有意思的是,周六在九点半左右起的概率比较大,而周日则分布比较平均,想来好笑,这大概就是为什么我妈每次都说她没买早饭的时候我起得早,买了早饭又睡过去了。

下面,我们来看一个更有意思的统计——一周中的哪天更容易失眠?

统计发现,原来失眠和周几息息相关,住在家里舒服的床上(周五、周六)失眠的概率明显小于在学校睡觉。尤其是周五睡得最好,睡了一周硬板床,回家一躺下就能睡着了哈哈~ 相反,从家里到学校的那天——周日晚上的失眠率是最高的。相比之下,周四的失眠率很低,睡眠就比较好,和上面一张图得到的结论比较统一。

看来,我失眠的主要原因大概还是工作日压力太大了呀~

最后,我分析了这两年的睡眠时间变化。

日记本不在身边,我只能根据微博时间线想起一些大概的影响因素。

比如 2015 年 1 月的这个最明显的睡觉和起床时间都严重延后的现象,大概是因为当时在赶着写研究的小论文吧。

另外一个有趣的时间点是 2013 年 7 月,睡得晚还记得早,平均睡眠时间都不满 6 小时。翻了下微博,发现是在赶动画课程大作业。另外,还可能和当时在写《Three.js 入门指南》有关。

看来睡眠的波动性还挺大的,睡得好的时候和差的时候的每月平均值都可以差到 3 个小时之多。

暂时就分析到这里,等以后想到有意思的东西再研究看看。