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

告别失眠焦虑!用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甚至可以实现异常预警自动推送。我在实际使用中发现每周日晚上生成的睡眠报告加上简单的趋势分析比单纯看手环上的数字要有用得多。特别是当把睡眠数据与日历日程关联后能清晰看到工作会议前后睡眠质量的变化模式——这或许就是数据驱动的生活优化吧。