当前位置: 首页 > news >正文

告别失眠焦虑!用Python+SQLite把小米手环睡眠数据变成Excel报表(保姆级教程)

用Python解锁小米手环睡眠数据从原始记录到可视化分析的全流程指南深夜盯着天花板数羊的日子该结束了。作为一位长期被睡眠问题困扰的技术爱好者我发现小米手环记录的原始数据远比App展示的图表丰富得多——只是这些宝藏数据被锁在了系统深处。本文将带你用Python和SQLite完成一次数据掘金之旅把那些被埋没的睡眠细节转化为直观的Excel报表。1. 数据获取从手环到计算机的完整迁移1.1 备份准备与注意事项在开始前请确保小米运动App版本≥5.0在应用商店检查更新手机剩余存储空间≥2GB准备Type-C数据线或对应接口的充电线关键操作步骤打开手机设置 → 更多设置 → 备份与恢复选择手机备份恢复 → 勾选仅小米运动避免不必要的数据备份点击立即备份等待进度条完成通常需要3-5分钟注意不同MIUI版本路径可能略有差异EMUI/ColorOS用户需在文件管理器中直接搜索.bak文件1.2 备份文件处理实战获取到的.bak文件需要经过两次转换# 文件结构转换示例Windows环境 MIUI_BACKUP → ANDROID_BACKUP → 可解压的tar文件推荐使用开源工具ABE(Android Backup Extractor)进行转换# 转换后目录结构示例 apps/ └── com.xiaomi.hm.health └── db └── origin_db_xxxx无后缀数据库文件2. 数据库解析揭开睡眠数据的层层面纱2.1 SQLite数据库结构解析使用DB Browser for SQLite打开文件后关键表结构如下表名关键字段数据类型说明date_datadate, summaryTEXT核心数据存储位置user_infoheight, weightINTEGER用户身体数据devicemac_addressTEXT设备标识信息睡眠数据存储逻辑# summary字段的JSON结构示例 { slp: { st: 1625094000, # 开始时间戳 ed: 1625126400, # 结束时间戳 dp: 120, # 深睡分钟数 lt: 240, # 浅睡分钟数 wk: 30, # 清醒分钟数 dt: 90 # REM睡眠分钟数 } }2.2 时间戳转换技巧小米使用Unix时间戳存储时间数据转换方法包括# Python转换示例 import datetime timestamp 1625094000 dt datetime.datetime.fromtimestamp(timestamp) print(dt.strftime(%Y-%m-%d %H:%M:%S)) # 输出2021-06-30 22:00:00对于Excel用户可以直接使用公式(A1/86400)DATE(1970,1,1)TIME(8,0,0) # 假设A1存储时间戳3. Python自动化处理从原始数据到结构化表格3.1 数据提取完整代码import sqlite3 import pandas as pd import ast from datetime import datetime def parse_sleep_data(db_path): conn sqlite3.connect(db_path) query SELECT date, summary FROM date_data ORDER BY date df pd.read_sql_query(query, conn) sleep_records [] for _, row in df.iterrows(): try: data ast.literal_eval(row[summary]) slp data.get(slp, {}) record { date: row[date], bedtime: datetime.fromtimestamp(slp.get(st, 0)), wakeup_time: datetime.fromtimestamp(slp.get(ed, 0)), deep_sleep: slp.get(dp, 0), light_sleep: slp.get(lt, 0), rem_sleep: slp.get(dt, 0), awake: slp.get(wk, 0) } sleep_records.append(record) except: continue return pd.DataFrame(sleep_records) # 使用示例 df parse_sleep_data(origin_db_xxxx) df.to_excel(sleep_analysis.xlsx, indexFalse)3.2 数据增强技巧在基础数据上可以计算更多指标# 计算睡眠效率 df[sleep_efficiency] (df[deep_sleep] df[light_sleep] df[rem_sleep]) / (df[awake] df[deep_sleep] df[light_sleep] df[rem_sleep]) * 100 # 计算入睡潜伏期假设有就寝时间记录 df[sleep_latency] (df[bedtime] - df[record_time]).dt.total_seconds() / 604. 可视化分析发现你的睡眠密码4.1 基础睡眠指标看板使用pandas的绘图功能快速生成趋势图import matplotlib.pyplot as plt # 每周平均睡眠时长 weekly df.resample(W, onbedtime).mean() weekly[[deep_sleep, light_sleep, rem_sleep]].plot(kindarea, stackedTrue) plt.title(Weekly Sleep Composition) plt.ylabel(Minutes) plt.savefig(sleep_trend.png, dpi300)4.2 高级分析方向睡眠周期分析结合深睡、浅睡、REM的交替规律作息规律性评分计算入睡时间标准差外部因素关联导入运动、咖啡因摄入等数据做相关性分析睡眠质量评估标准参考指标优秀良好需改进深睡比例20%15-20%15%入睡时间15分钟15-30分钟30分钟睡眠效率90%85-90%85%5. 个性化追踪方案设计5.1 自动化日报生成使用Python-docx库创建包含关键指标的日报from docx import Document from docx.shared import Inches def generate_daily_report(df, date): doc Document() day_data df[df[date] date].iloc[0] doc.add_heading(fSleep Report - {date}, 0) doc.add_picture(sleep_trend.png, widthInches(6)) table doc.add_table(rows3, cols2) table.style LightShading table.cell(0,0).text Total Sleep Time table.cell(0,1).text f{day_data[total_sleep]} minutes # 添加更多指标... doc.save(freport_{date}.docx)5.2 异常睡眠检测设置智能提醒规则# 检测睡眠异常情况 def detect_anomalies(df): anomalies [] for i in range(1, len(df)): prev, curr df.iloc[i-1], df.iloc[i] if curr[deep_sleep] prev[deep_sleep] * 0.6: anomalies.append(fDeep sleep dropped 40% on {curr[date]}) # 添加其他检测规则... return anomalies把这段代码添加到你的日常数据分析流程中当睡眠模式出现显著变化时系统会自动标记可能需要注意的日子。配合Python的邮件发送功能如smtplib甚至可以实现异常预警自动推送。我在实际使用中发现每周日晚上生成的睡眠报告加上简单的趋势分析比单纯看手环上的数字要有用得多。特别是当把睡眠数据与日历日程关联后能清晰看到工作会议前后睡眠质量的变化模式——这或许就是数据驱动的生活优化吧。
http://www.gsyq.cn/news/1397900.html

相关文章:

  • 为什么你的咨询工具留不住用户?Lovable框架中隐藏的3层情感化设计机制大揭秘
  • Unity 2020.1 保姆级教程:用Sprite Editor切割序列帧,5分钟搞定跑酷角色动画
  • 从IMU到机器人定位:手把手教你用ESKF搞定非线性状态估计(附Python代码)
  • 从‘看不懂’到‘门儿清’:手把手教你解读Linux性能监控命令的输出(附真实案例)
  • 告别Animator!用Unity Playable API手撸一个轻量级动画播放器(附完整代码)
  • 储层计算与Transformer架构对比及优化策略
  • 免费在线笔记网站推荐:无需注册,电脑手机实时同步,还支持加密分享
  • Ubuntu 18.04无线网卡驱动避坑指南:以Realtek RTL8168为例,聊聊开源驱动的那些事儿
  • STM32裸机环境移植CanFestival实战:从零构建CANopen从站
  • 2026年Q2评价高地埋式污水处理设备技术选型指南:絮凝沉淀池、MBR膜生物反应器、一体化污水处理设备、厌氧反应器选择指南 - 优质品牌商家
  • 人工智能通识课:大语言模型
  • 告别Excel手工报表!Lovable低代码看板搭建全流程(含17个可复用模板)
  • 量子搜索算法:从Grover到确定性递归Oracle的演进
  • Linux文件搜索实战:从‘找不到’到‘秒定位’,我的效率提升秘籍(附常用命令清单)
  • AI 术语通俗词典:Token
  • 数据同步利器 Kettle:Windows 安装配置及基础使用详解
  • 不追新概念只做可信落地:JBoltAI让企业AI从能用变敢用
  • Unity动画师必看:用Parent Constraints替代父子关系,轻松实现角色装备的动态绑定
  • LeetCode 32:最长有效括号 | 栈与动态规划
  • 金装裁决(传世元神版)| 正版复古传世,元神合击热血归来
  • 从理论到实战:用Python复现一篇边缘计算顶会论文的完整流程(以任务卸载为例)
  • 安全左移与自主可控:Gitee Team 如何支撑关键领域行业 DevSecOps 落地
  • 3.1万Star!PageIndex:不用向量数据库,RAG准确率做到98.7%
  • 旅游API聚合响应超时频发?Lovable自研弹性熔断网关上线后P99延迟压降至187ms——架构图+Go源码片段首次公开
  • 观察taotoken在多模型聚合调用时的自动路由与故障转移效果
  • Java高级全套教程(二)—— RocketMQ超详细实战详解
  • 企业知识库的升级,不是把文档放一起,而是把知识变成能力
  • 最好用的开源问卷系统:调问DWSurvey二次开发自由,一站式搞定调研与系统集成
  • 2026年Q2乐山可靠正宗跷脚牛肉:乐山美食排行榜/乐山美食探店/乐山美食推荐/乐山美食攻略/乐山美食有哪些/乐山美食街/选择指南 - 优质品牌商家
  • 3分钟极速上手DeTikZify:科研图表自动化生成终极指南