小米运动睡眠数据导出并分析(python)

背景:我本身是做数据分析的,因为长期失眠所以想看看自己小米手环上面的数据,找找原因。因为小米运动上自带的 表比较粗浅,所以就想自己导出数据,深入分析一波。

1 备份小米运动并导出

https://blog.csdn.net/MizarTian/article/details/85414507

我再代为详细描述一下数据导出的流程:

1.小米运动数据打包。打包路径(以MIUI12.5.2为例):设置->更多设置->备份与恢复->手机备份恢复->第三方应用程序和应用数据(仅勾选小米运动)->立即备份

2.手机链接电脑,将数据拷贝置电脑,手机上的存放路径是:MIUI/backup/AllBackup/(以你备份时间命名的文件夹)/小米运动。把底下.bak文件拷贝到电脑。

2 拆包bak文件

保存文件,并将后缀名改为(.bat)。这个文件和先前的jar文件应处于同一文件夹下。
双击打开bat文件,按提示将bak文件拖入程序窗口内,按下回车,等待一会儿就可以找到与bak文件同名的tar文件了。

3 找到数据文件

使用解压工具解压tar文件,找到文件夹apps/com.xiaomi.hm.health/db ,按文件大小排序,最大的文件应当是我们所需的文件,名称是origin_db_xxxx,没有任何后缀。

我接着从“读取文件”部分开始介绍:

4 读取文件

原文中读取文件推荐使用SQLite Database Browser,但我使用的是SQLite Expert Personal。

使用软件打开origin_db_xxxx,效果如下:

 这个文件其实是一个库,而我们的睡眠数据是保存在这个库底下的表“date_data”底下的字段“summary”,也就是睡眠数据其实是以文本日志的形式存放的,并且这个日志中还有步数、运动量等等数据,于是就涉及到日志的解读和数据的提取。

summary的解读

我复制了几个summary到Notepad++,并且跟自己手机上面的小米运动数据进行比对,最后总结如下:

1.summary首先看起来就像一个python字典;

2.睡眠就保存在字典里面的key”slp”底下;

3.而”slp”本身的value本身也是一个字典,

        3.1.”st”代表睡眠开始时间,以数字形式存储时间;

        3.2.”ed”代表睡眠结束时间,以数字形式存储时间;

        以上2个时间是以1970/1/1 8:00开始,计算秒的数量,由于有些人可能需要用excel分析,所以这里附上这个数字在excel里面的转换公式:=X/(60*60*24)+25569.3333333333

为何是用这个公式,留给大家自己思考。

        3.3.”dp”代表深睡时间,深睡的分钟数;

        3.4.”lt”代表浅睡时间,浅睡的分钟数;

        3.5.”wk”代表清醒时间,清醒的分钟数;

        3.6.”dt”代表REM时间,REM的分钟数;

        3.7.”odd_stage”代表小睡数据,是一个list,里面每个元素保持一个阶段的小睡数据,每个元素都是 一个字典,该字典key解读如下:

                3.7.1.”start”代表小睡开始时间,从昨日凌晨开始算起的分钟数;

                3.7.2.”stop”代表小睡结束时间,从昨日凌晨开始算起的分钟数;

                在我后面的分析中,我会把这个时间转化了以今日凌晨开始算起的小时数,转换公式为:X/60-24。

既然,以上数据长得这么像一个python字典,我自然选用python开始数据提取:

Python数据提取与导出

以上代码涉及两个参考:

1.对sqlite3数据库的连接:

https://www.cnblogs.com/DHUtoBUAA/p/7389125.html

2.字符串转换为字典:

https://www.cnblogs.com/xiao-xue-di/p/11414210.html

数据分析

后面的数据分析以及更为灵活的加工就在excel里面进行,这里就不加赘言。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树基本技能数据库操作215254 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月6日
下一篇 2021年6月6日

相关推荐