0%

晚安

遵守上周的约定,这周总算是定期发布了2020年「朝花夕拾」的第二十六期 晚安,在上期的记录中,我告诉自己要搭建起自己的睡眠数据监控系统,这周我来介绍下我是如何折腾的。封面来自今天在家拍摄的晚霞,晚安,希望大家都能够睡个好觉。

记录

在例行每周数据回顾之前,先来看看这周拍摄的光影,仍旧没有出门,但是天朗气清留下了美丽的晚霞,并且抓到了太阳落山的全程。

白昼越来越短,黑夜越来越长,下午四点半在家里拍摄,不一会儿太阳就开始触碰山尖

知春西里一号楼十六层,这个机位也还不错,但是如果能够上楼顶就更好了,下次问问

将近五点,太阳已经全部落山,整个过程就两三分钟

落日的同时,人间烟火,我就在这样的小格子里面的一间

接下来,继续每周的数据回顾,首先是 RescueTime

可以看到,相比于上周,这周总的生产力是要提升的。这周基本实践了上周的策略,工作时间专门找独立时间来处理企业微信上面的消息,而不是一直在线。因为如果真的有什么很要紧的工作的话,打我电话啊,反正我也在企业微信上面置顶了信息。真的,要求时刻在线,时刻能够回复消息对于精力的耗费太大了,这个方法继续坚持。

因为临近月末,对于每个数据监控,现在也增加月末的数据总结,我们看看 RescueTime 的 11月数据:

可以看到,Distracting Time 从月初相对较大的比例,到月末有了一个明显的减少。这是为什么呢?因为我的 Kindle 到货了 :)开个玩笑,其实从一个多月以前开始,就一直想着要减少自己无意义刷手机的行为。我对自己的这个行为深恶痛绝,但是一直没有根治过,也许是为了放松,但是经常性的在几个App之间切换而无所得,反而有的是巨大的空虚感。其中尤其以微博、微信朋友圈等App为甚。其实也是能够从这些渠道获取一些有效信息的,但是在我看来成本太大,所以我关闭了微信朋友圈、卸载了微博,并不是永远不再使用,至少这个冬天,我想要让自己沉下心来,扎扎实实做一些记录,做一些积淀。

如果说11月份的数据还不够明显的话,可以看看9月份的数据,在工作之余,微博、微信、B站这几个是耗时最多的应用(10月因为有段时间去旅行了,所以数据并没有那么明显)。虽然卸载了微博、关闭了朋友圈,但是像 The Social Dilemma 中描述的很像,这个过程有一个戒断反应,有时候你会控制不住自己去把它们找回来。每次这个时候你要想一想,那里到底有什么那么重要的东西,让你不得不去开启它们呢?现在的我仍然处于戒断反应之中,过去的一个星期重新下载了微博一次、重新开启了朋友圈5次,虽然之后都卸载关闭了,但是仍然在和自己较量中。加油吧,希望下周总结的时候这个数据能够有改进。

不刷微博微信后,你的信息源何来呢?当我问出这个问题的时候,足以反映出一个问题:你是多么的害怕和这个世界隔离。但是真的会隔离吗,我依旧会在休息空隙看微信订阅号。但是下班回家后我不会再看手机消息了,因为平时下班比较晚,到家基本上就10点了,如果像以前那样每次都刷刷手机,基本上一个小时就过去了。这看起来是一个还可以接受的时间,实际上随着自己每天心情的状态改变,加上各种杂七杂八的事情,经常会拖到凌晨十二点半,甚至有时候到一两点。现在的做法很简单,到家后直接手机关机,直接拿起 Kindle 看书,看累了就睡觉。

关于 Kindle 看书,实际上还有很多问题没有解决。因为很久没有专门的时间看书了(读研后?),现在看书也没有一个明确的门类清单,有时候也没能够很专注其中。关于这个问题,希望下周能够有一个决断。

话题扯远了,我们继续回顾数据,Google Calendar 的每日总结现在仍然搁置,下周得有个交代了,你拖更太久了 :)接下来看 Forest

Forest - Nov 22 ~ Nov 28, 2020
Forest November

健身是另一大事宜,这周跑步情况与上周相比基本持平,还在找回节奏的过程中,下周希望可以破四。回顾十一月的跑步情况,在数据监控回归之后总算维持了稳定。

Running - Nov 22 ~ Nov 28, 2020
Running November

世界

嫦娥五号发射成功

  • 背景:2020年11月24日,中国的首个月球采样返回任务「嫦娥五号」发射成功
  • 分析:这是中国的第六次探月人物,也是人类时隔44年将再次从月球带回岩石和土壤样品,上一次月球采样返回任务,还是1976年苏联的月球24号。

伊朗核科学家被暗杀

  • 背景:2020年11月27日,伊朗核计划负责人法赫里扎德近被暗杀身亡。据路透社报道,伊朗当天在写给联合国秘书长古特雷斯和联合国安理会的信中称,有“强烈迹象表明以色列对暗杀一名伊朗科学家负有责任”,伊朗保留自卫的权利。
  • 跟进:西方普遍认为,这是美国和以色列主使,具体执行的是以色列情报机构摩萨德
  • 分析:这是继年初苏莱曼尼被美军无人机导弹猎杀后,伊朗核心人物遭到暗杀事件。拜登政府已经表态重返伊朗核协议,也就是说相对于特朗普政府美国的中东政策将会大幅转变。这个关头以色列暗杀法赫里扎德,再加上几天前 内塔尼亚胡 访问了沙特阿拉伯,舆论分析是 内塔尼亚胡 在给美国新一任政府传递信息,希望美国能够继续遏制伊朗。

回归

总算聊到了今天的主题「睡眠」,其实刚才也在社交网络戒断的时候也提到了无意义刷手机对于睡眠的影响。为了有一个更加健康的睡眠,为了自己的生活更有节奏,还是希望自己能够记录自己的睡眠数据,从而能够更好的指导自己的生活。

睡眠数据中,最最基本的维度就是每天何时入睡、何时苏醒。当然你可以自己手动记录在相应的手机App上,但是这种方法太考验人的毅力了,我们需要一种无侵入式的记录方式。那么这种情况下的解决思路就是智能穿戴设备,比如智能手环、智能手表等,通过再添加一些传感器让硬件来解放人。

令人开心的是,事实上我已经佩戴 小米手环3 将近两年了,而小米也有 小米运动 App 来对数据做专门的统计。然而令人失望的是,小米运动的睡眠数据统计做的极烂,我想要看到一周的每天何时起床何时苏醒都看不到,只能够看到一些可能都不是很准的深睡时间、浅睡时间。也许这些数据以后会很有用,但是我现阶段只想看入睡和苏醒时间。

接下来我又找到了小米手机自带的 健康小米穿戴 两个应用,这两个数据统计做的还不错,但是不支持 小米手环3,只支持小米手环4和小米手环5。雷布斯你个倒霉孩子,又想骗我买新设备,还真别说我还真动了这个念头,毕竟也不贵。可是最重要的是过去两年的数据啊。哼哼,雷布斯你难不倒我的,我在 知乎的这个回答 发现了这个 链接 ,在这里你可以导出你手环中所有的数据。

话不多说,睡眠数据以CSV格式保存,格式如下,我的数据是从 2019年11月21日 开始算起的:

1
2
3
4
5
date,lastSyncTime,deepSleepTime,shallowSleepTime,wakeTime,start,stop
2019-01-21,1548087470,119,372,22,1547998080,1548028860
2019-01-22,1548173888,114,388,40,1548084300,1548116820
2019-01-23,1548260294,120,347,45,1548174000,1548204720
2019-01-24,1548346721,95,145,16,1548263280,1548278640

其中的几个字段意义如下:

  • lastSyncTime:上次数据同步时间
  • deepSleepTime:深睡的时间
  • shallowSleepTime:浅睡的时间
  • wakeTime:清醒的时间
  • start:每天晚上的入睡时间
  • stop:每天早上起来的时间

其中最关键的就是 startstop 字段,有了这两个数据,我就可以基本统计出过去两年里面的睡眠模式了。这里 是一个程序媛小姐姐在五年前(嗯很久远了)统计的睡眠数据,还用 ECharts 很漂亮的可视化了出来。

【今天晚上又到了睡觉的时间,明天早上补完后面的部分吧,我一定会回来的!—— 2020.11.28 22:00】

雷布斯你放心,下一款最新的小米手环我一定会支持你的。

【周日出去浪了,今天把上期朝花夕拾剩余的部分给补起来 —— 2020.11.30 17:00】

参考 这里 的数据可视化,我简单的分析了入睡时间和起床时间,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/env python3
# -*- coding: UTF-8 -*-
import csv
import time
import datetime
from pyecharts.charts import Scatter
from pyecharts import options as opts

datafile = "sleep.csv"


def get_time(timestamp):
timeStamp = float(timestamp)
timeArray = time.localtime(timeStamp)
sleepDate = time.strftime("%Y-%m-%d", timeArray)
return sleepDate, timeArray.tm_hour


def parse_csv(datafile):
dateTime = []
sleepTime = []
awakeTime = []
with open(datafile, "r") as f:
r = csv.DictReader(f)
for line in r:
if line["deepSleepTime"] == 0:
continue
start, stop = line["start"], line["stop"]
_, pStart = get_time(start)
pDate, pStop = get_time(stop)
dateTime.append(pDate)
sleepTime.append(pStart)
awakeTime.append(pStop)
return dateTime, sleepTime, awakeTime

if __name__ == '__main__':
dateTime, sleepTime, awakeTime = parse_csv(datafile)
scatter = Scatter()
scatter.add_xaxis(dateTime)
#scatter.add_yaxis("入睡时间", sleepTime)
scatter.add_yaxis("起床时间", awakeTime)
scatter.set_global_opts(title_opts=opts.TitleOpts(title="睡眠时间统计"))
scatter.render()

这里的数据分析非常浅显,首先入睡时间和起床时间只是从小时维度做了分析,粒度很粗。然后也没有进一步的按周、按月来分析,没有分析每天的睡眠时间,下次有时间搞一搞吧。

首先看入睡时间,可以看到,入睡时间分布最多的就是0点,也就是凌晨的时候,其次23点和1点也很频繁。11点之前睡很少很少,居然还有21点睡的?我不记得有过这种时刻,难道是手环统计误差?

接下来看起床时间,最广泛的分布是在早上8点-9点这个范围,9点和10点的数据也不少,最可怕的是居然有一天睡到了12点,看了下那是 2019-12-21,那是周六的早上,你真的挺懒的:)

检讨下自己,这个作息真的不太健康,完全暴露了你的懒惰:)下周开始,每周的睡眠数据将会更新到「记录」模块,看看自己能不能做的更好。

【2020.12.06】更新了画图脚本,得出过去两年睡眠数据可视化如下:

附录

有研究表明人睡眠存在一个生物节律,即由4-5个睡眠周期组成,每一个周期又分为5个阶段,由两个时相组成:非快速眼动睡眠相NREM(前4期)和快速眼动睡眠REM(在睡眠70-90分钟后出现)。每个周期持续90分钟左右,每晚可出现4-5个周期。

非快速眼动睡眠相NREM

此睡眠相主要由入眠期、浅睡和中睡期组成,可以伴有少量的深睡期。

入睡期

是睡眠的开始,昏昏欲睡的感觉就属于这一阶段。此时脑波开始变化,频率渐缓,振幅渐小。此阶段是清醒和睡眠之间的转换期,人非常容易醒来,约占睡眠总时间的10%。

浅睡期和中睡期

开始正式睡眠。此时脑波渐呈不规律进行,频率与振幅忽大忽小,其中偶尔会出现被称为“睡眠锭”的高频、大波幅脑波,以及被称为“K结”的低频、很大波幅脑波。此期容易觉醒,入睡困难者,常自行惊醒,约占整个睡眠期的50%。

深睡期

沉睡阶段,被试不易被叫醒。此时脑波变化很大,频率只有每秒1~2周,为慢波睡眠,但振幅增加较大,呈现变化缓慢的曲线。此期睡眠深,觉醒相当困难,在每个睡眠周期中约持续30分钟,然后进入快速眼动睡眠。

这四个阶段的睡眠均不出现眼球快速跳动现象,故统称为非快速眼动睡眠(non-rapideyemovementsleep,简称NREM

睡眠周期

快速动眼期REM

这一阶段以深睡眠为主,脑波迅速改变,出现与清醒状态时的脑波相似的高频率、低波幅脑波,但其中会有特点鲜明的锯齿状波。睡眠者通常会有翻身的动作,并很容易惊醒,似乎又进入阶段1的睡眠,但实际是进入了一个被称为快速眼动睡眠(rapideyemovementsleep,简称REM)的睡眠阶段。因为,此时除了脑波的改变之外,被试的眼球会呈现快速跳动现象。如果此时将其唤醒,大部分人报告说正在做梦。因此,REM就成为睡眠第五个阶段的重要特征,也成为心理学家研究做梦的重要根据。

在整个睡眠周期中,NREM与REM有规律地交替出现,两种不同时相睡眠各出现一次为一个睡眠期。入睡后必须先经过NREM阶段,才能进入REM阶段,而人体只有在经过了REM阶段后才有真正睡过觉的感觉,体能才能得到很好的恢复。