用Python分析睡眠质量与作息习惯

睡眠对身体恢复、认知功能、情绪调节和整体健康至关重要。然而,现代生活节奏快、长时间使用电子设备、精神压力大等因素,使很多人的睡眠质量下降。虽然市面上有如 Fitbit、Apple Health、Sleep Cycle 等优秀的睡眠追踪工具,但使用 Python 自行分析睡眠数据,不仅能保障隐私,还能高度自定义分析方式,从而真正理解自己的作息规律。

我们将一起来构建一个完整的睡眠数据分析器,功能包括:
– 读取睡眠记录 CSV 文件
– 自动计算每晚睡眠时长
– 绘制每日、每周睡眠趋势图
– 检测异常睡眠(如过短或过长)并给出提示
– 对比推荐睡眠时间(7–9小时)并分析是否达标

第一步:准备睡眠记录数据

我们将使用 CSV 文件记录每日睡眠情况。建议你从如 Apple Health、Google Fit、Oura Ring、或手动记录中导出或整理成如下结构:

备注:时间格式可为 24 小时制字符串,每行代表一次完整的夜间睡眠周期。

第二步:设置开发环境

我们将使用以下 Python 库来处理和可视化数据:

“`python
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import seaborn as sns
“`

如果你还没有安装这些库,请使用如下命令:
“`bash
pip install pandas matplotlib seaborn
“`

第三步:加载并解析睡眠时间

将时间字段解析为 datetime 并处理跨天睡眠:

“`python
df = pd.read_csv(“sleep_log.csv”)
df[“Sleep Start”] = pd.to_datetime(df[“Date”] + ” ” + df[“Sleep Start”])
df[“Sleep End”] = pd.to_datetime(df[“Date”] + ” ” + df[“Sleep End”])
df[“Sleep End”] += pd.to_timedelta(df[“Sleep End”] < df[“Sleep Start”], unit=’d’)
df[“Duration (hrs)”] = (df[“Sleep End”] – df[“Sleep Start”]).dt.total_seconds() / 3600
“`

第四步:每日睡眠时长可视化

使用柱状图查看每日睡眠情况,并加上推荐时长范围:

“`python
plt.figure(figsize=(12, 6))
sns.barplot(x=”Date”, y=”Duration (hrs)”, data=df, palette=”coolwarm”)
plt.axhline(7, color=”green”, linestyle=”–“, label=”Recommended Min (7h)”)
plt.axhline(9, color=”orange”, linestyle=”–“, label=”Recommended Max (9h)”)
plt.title(“Daily Sleep Duration”)
plt.ylabel(“Hours Slept”)
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()
“`

第五步:每周睡眠趋势分析

将每日数据重采样为每周平均值:

“`python
df[“Date”] = pd.to_datetime(df[“Date”])
df.set_index(“Date”, inplace=True)
weekly = df[“Duration (hrs)”].resample(“W”).mean()

weekly.plot(marker=”o”, linestyle=”-“, figsize=(10, 5))
plt.title(“Weekly Average Sleep Hours”)
plt.ylabel(“Average Sleep Duration (hrs)”)
plt.axhline(7, color=”green”, linestyle=”–“)
plt.axhline(9, color=”orange”, linestyle=”–“)
plt.grid(True)
plt.show()
“`

第六步:识别异常睡眠行为

筛选睡眠不足 6 小时或超过 10 小时的记录:

“`python
anomalies = df[(df[“Duration (hrs)”] < 6) | (df[“Duration (hrs)”] > 10)]
print(“⚠️ 以下夜晚睡眠时间异常:”)
print(anomalies[[“Sleep Start”, “Sleep End”, “Duration (hrs)”]])
“`

可选:与情绪状态或备注字段关联分析

通过备注字段关键字检测情绪影响:

“`python
df[“is_stressed”] = df[“Notes”].str.contains(“压力|焦虑”)
df.groupby(“is_stressed”)[“Duration (hrs)”].mean()
“`

这个 Python 项目通过数据科学手段将原始的睡眠记录转化为可操作的洞察。你可以看到自己的睡眠规律、识别潜在问题,并逐步建立更健康、科学的作息节奏。长期坚持分析和调整,将显著改善身心状态与生活质量。

有意扩展【科技】相关的知识双语应用题? 去EduRises Microlearning 跨领域学习平台试一试

点击【经验分享】,了解更多关于学习、行业与职业资讯。