做程序根据你的作息自动推荐最佳入睡时间,颠覆熬夜靠硬扛。

📅 发布时间:2026/7/15 17:48:19 👁️ 浏览次数:
做程序根据你的作息自动推荐最佳入睡时间,颠覆熬夜靠硬扛。
睡眠守护者 - 基于作息的智能入睡推荐系统 README.md# SleepGuardian - 智能入睡推荐系统## 项目简介SleepGuardian 是一款基于Python开发的智能睡眠助手通过分析用户的作息时间、生物钟规律和睡眠质量数据自动推荐最佳入睡时间帮助用户告别熬夜硬扛的生活方式。## ✨ 主要功能- 自动分析作息时间规律- 基于生物钟理论计算最佳入睡时间- ⚠️ 熬夜风险预警- 睡眠质量评估- 个性化改善建议## 安装依赖bashpip install datetime schedule numpy pandas matplotlib## 快速开始bashpython sleep_guardian.py## 项目结构sleep_guardian/├── main.py # 主程序入口├── config.py # 配置文件├── core/ # 核心模块│ ├── circadian.py # 生物钟计算│ ├── sleep_analyzer.py # 睡眠分析器│ └── recommender.py # 推荐引擎├── utils/ # 工具模块│ ├── data_loader.py # 数据加载│ └── visualizer.py # 可视化└── tests/ # 测试文件## 使用场景- 数字艺术创作者优化创作与休息节奏- 程序员避免深夜编码导致的健康损害- 学生党平衡学习与健康作息- 自由职业者建立规律生活模式️ 完整代码实现1. 主程序入口 (main.py)SleepGuardian - 智能入睡推荐系统基于数字文化艺术创新创业课程理念设计融合生物钟科学、行为心理学与数据驱动决策import sysfrom datetime import datetime, timedeltafrom typing import Dict, List, Optionalimport json# 导入核心模块from config import Configfrom core.circadian import CircadianCalculatorfrom core.sleep_analyzer import SleepAnalyzerfrom core.recommender import SleepRecommenderfrom utils.data_loader import DataLoaderfrom utils.visualizer import Visualizerclass SleepGuardian:睡眠守护者主类整合所有功能模块提供完整的睡眠管理解决方案def __init__(self):初始化系统组件self.config Config()self.circadian_calc CircadianCalculator()self.analyzer SleepAnalyzer(self.config)self.recommender SleepRecommender(self.circadian_calc, self.config)self.loader DataLoader()self.visualizer Visualizer()# 用户数据缓存self.user_profile: Dict {}self.sleep_history: List[Dict] []def run(self):主运行循环print( * 60)print( 欢迎使用 SleepGuardian 智能睡眠助手)print( 基于数字文化艺术创新创业课程 - 科技改善生活)print( * 60)while True:self._show_main_menu()choice input(\n请选择功能 (输入数字): ).strip()if choice 1:self._onboarding_flow() # 新用户引导elif choice 2:self._daily_routine() # 日常使用elif choice 3:self._view_analytics() # 数据分析elif choice 4:self._health_check() # 健康检测elif choice 5:self._export_report() # 导出报告elif choice 0:print(\n 感谢使用愿您夜夜好梦)breakelse:print(❌ 无效选择请重试)def _show_main_menu(self):显示主菜单print(\n - * 40)print( 主菜单)print(- * 40)print(1. 新用户设置)print(2. 每日作息分析)print(3. 睡眠数据分析)print(4. 健康状况检测)print(5. 导出睡眠报告)print(0. 退出程序)print(- * 40)class SleepGuardianDemo:演示版本 - 展示核心功能的简化实现便于理解和教学使用def __init__(self):初始化演示系统self.config Config()self.circadian CircadianCalculator()self.recommender SleepRecommender(self.circadian, self.config)# 模拟用户作息数据self.demo_schedule {wake_time: 07:30, # 起床时间work_start: 09:00, # 工作开始work_end: 18:00, # 工作结束creative_session: 19:30, # 创意工作时间数字艺术创作screen_time_limit: 180, # 屏幕时间限制分钟exercise_time: 07:00, # 运动时间caffeine_cutoff: 14:00, # 咖啡因截止时间}print( SleepGuardian 演示模式启动)print( 模拟数字艺术创作者的一天作息\n)def demo_scenario():演示场景数字艺术创作者小明的睡前准备guardian SleepGuardianDemo()print( * 70)print( 实际应用场景描述)print( * 70)print(小明是一名自由插画师经常在深夜赶稿创作数字艺术作品。最近他发现白天精神不济创意枯竭甚至出现失眠症状。作为一名典型的熬夜硬扛型创作者他需要科学的入睡指导。【痛点分析】✘ 深夜灵感来袭就硬撑着创作到凌晨✘ 不知道何时该停止工作准备入睡✘ 蓝光刺激影响褪黑素分泌✘ 缺乏规律的作息导致生物钟紊乱✘ 第二天工作效率低下形成恶性循环)print( * 70)print( 核心逻辑讲解)print( * 70)print(【生物钟理论基础】人体生物钟昼夜节律周期约为24.2小时受光照调节。最佳入睡窗口基于以下因素计算1. 褪黑素分泌曲线通常在睡前2小时开始上升2. 体温最低点通常在凌晨4-5点入睡应在其前4-6小时3. 睡眠压力累积清醒时间越长睡眠驱动力越强4. 光照暴露蓝光抑制褪黑素需提前减少屏幕时间【算法核心公式】optimal_bedtime wake_time - REM_cycle_duration × cycles_needed- wind_down_period其中- REM_cycle_duration ≈ 90分钟一个完整睡眠周期- cycles_needed ∈ [5, 6]成年人理想睡眠周期数- wind_down_period ≈ 60分钟放松准备时间)print(\n * 70)print( 模块化解耦演示)print( * 70)# 演示各个模块的独立功能demo_modules(guardian)def demo_modules(guardian: SleepGuardianDemo):模块化功能演示# 模块1: 生物钟计算器 print(\n 【模块1】CircadianCalculator - 生物钟计算器)print(- * 50)# 计算当前生物钟相位current_phase guardian.circadian.calculate_circadian_phase(guardian.demo_schedule[wake_time],guardian.demo_schedule[creative_session])print(f 当前生物钟相位: {current_phase[phase]})print(f 相位值: {current_phase[value]:.2f} (0峰值清醒, 1深度睡眠))print(f 状态描述: {current_phase[description]})print(f 建议动作: {current_phase[recommendation]})# 计算最佳入睡时间bedtime guardian.circadian.calculate_optimal_bedtime(guardian.demo_schedule[wake_time],target_cycles5.5 # 5.5个睡眠周期 8.25小时)print(f\n 基于5.5个睡眠周期的最佳入睡时间: {bedtime.strftime(%H:%M)})# 模块2: 推荐引擎 print(\n\n 【模块2】SleepRecommender - 智能推荐引擎)print(- * 50)recommendation guardian.recommender.generate_recommendation(guardian.demo_schedule,current_activitydigital_art_creation)print(f⏰ 推荐入睡时间: {recommendation[optimal_bedtime].strftime(%H:%M)})print(f 熬夜风险等级: {recommendation[risk_level]})print(f⚠️ 风险提示: {recommendation[warning_message]})print(\n 详细建议:)for i, tip in enumerate(recommendation[tips], 1):print(f {i}. {tip})# 模块3: 熬夜风险评估 print(\n\n 【模块3】熬夜风险评估器)print(- * 50)late_work_scenarios [{activity: coding, duration: 120, intensity: high},{activity: digital_art, duration: 180, intensity: very_high},{activity: light_reading, duration: 60, intensity: low},]for scenario in late_work_scenarios:risk guardian.recommender.assess_late_work_risk(scenario)print(f\n活动: {scenario[activity]} ({scenario[duration]}分钟))print(f 风险评分: {risk[score]}/100)print(f 风险级别: {risk[level]})print(f 影响预估: {risk[impact]})# 模块4: 渐进式调整建议 print(\n\n 【模块4】渐进式作息调整建议)print(- * 50)adjustment_plan guardian.recommender.create_adjustment_plan(current_bedtime01:30,target_bedtime23:00,days_available14)print(从 01:30 → 23:00 的14天调整计划:)for day, time in adjustment_plan[schedule].items():change ⏪ if int(time[:2]) 12 else ⏩print(f Day {day}: {time} {change})print(f\n调整策略: {adjustment_plan[strategy]})print(f预期效果: {adjustment_plan[expected_outcome]})if __name__ __main__:demo_scenario()2. 配置文件 (config.py)配置文件模块集中管理系统参数和用户偏好设置from dataclasses import dataclass, fieldfrom typing import Dict, Listfrom enum import Enumclass RiskLevel(Enum):风险等级枚举LOW 低风险MODERATE 中等风险HIGH 高风险CRITICAL 极高风险dataclassclass SleepConfig:睡眠配置参数类基于科学研究的最佳实践值# 生理参数 REM_CYCLE_MINUTES: int 90 # REM睡眠周期时长分钟MIN_SLEEP_CYCLES: float 5.0 # 最少睡眠周期数MAX_SLEEP_CYCLES: float 6.5 # 最多睡眠周期数WIND_DOWN_MINUTES: int 60 # 放松准备时间分钟# 生物钟参数 MELATONIN_ONSET_HOURS: float 2.0 # 褪黑素分泌提前时间小时CORE_BODY_TEMP_LOWEST_HOUR: int 5 # 体温最低点凌晨CIRCADIAN_PHASE_THRESHOLD: float 0.7 # 生物钟相位阈值# 行为参数 BLUE_LIGHT_CUTOFF_MINUTES: int 90 # 蓝光暴露截止时间分钟CAFFEINE_HALF_LIFE_HOURS: int 6 # 咖啡因半衰期小时ALCOHOL_SLEEP_DISRUPTION: bool True # 酒精对睡眠的影响# 风险阈值 RISK_SCORE_LOW: int 30RISK_SCORE_MODERATE: int 60RISK_SCORE_HIGH: int 80# 用户偏好默认值 DEFAULT_WAKE_TIME: str 07:30DEFAULT_SLEEP_GOAL: str 23:00SCREEN_TIME_WARNING: int 120 # 屏幕时间警告阈值分钟dataclassclass UserProfile:用户档案类存储个人化参数name: str age: int 25chronotype: str intermediate # morning, intermediate, eveningwork_type: str creative # creative, technical, office, shifthealth_conditions: List[str] field(default_factorylist)sleep_goals: Dict field(default_factorydict)def to_dict(self) - Dict:return {name: self.name,age: self.age,chronotype: self.chronotype,work_type: self.work_type,health_conditions: self.health_conditions,sleep_goals: self.sleep_goals}class Config:主配置类整合所有配置项并提供访问接口def __init__(self):self.sleep SleepConfig()self.user UserProfile()# 活动强度映射表self.activity_intensity {coding: {mental_load: 9, blue_light: 10, stress: 7},digital_art: {mental_load: 8, blue_light: 9, stress: 6},writing: {mental_load: 7, blue_light: 8, stress: 5},video_editing: {mental_load: 8, blue_light: 10, stress: 7},meeting: {mental_load: 6, blue_light: 7, stress: 8},reading: {mental_load: 4, blue_light: 5, stress: 3},light_reading: {mental_load: 2, blue_light: 2, stress: 1},meditation: {mental_load: 1, blue_light: 0, stress: -2},exercise: {mental_load: 3, blue_light: 0, stress: -1},}# 熬夜风险因素权重self.late_work_risk_weights {blue_light_exposure: 0.25,cognitive_stimulation: 0.30,stress_increase: 0.20,circadian_disruption: 0.25,}# 预设的用户画像模板USER_PROFILES {creative_night_owl: UserProfile(name创意夜猫子,age28,chronotypeevening,work_typecreative,health_conditions[],sleep_goals{target_bedtime: 00:30, wake_time: 08:30}),tech_morning_person: UserProfile(name技术晨型人,age32,chronotypemorning,work_typetechnical,health_conditions[mild_insomnia],sleep_goals{target_bedtime: 22:00, wake_time: 06:00}),student_flexible: UserProfile(name灵活学生,age20,chronotypeintermediate,work_typeoffice,health_conditions[],sleep_goals{target_bedtime: 23:00, wake_time: 07:00}),}3. 生物钟计算器 (core/circadian.py)生物钟计算器模块基于昼夜节律理论计算最佳睡眠时间核心科学原理1. 视交叉上核(SCN)作为主生物钟2. 褪黑素分泌与光暗周期的关系3. 核心体温变化与睡眠启动4. 睡眠压力(腺苷)积累模型from datetime import datetime, timedelta, timefrom typing import Dict, Tuple, Optionalimport mathimport randomclass CircadianCalculator:生物钟计算器科学基础:- 人类生物钟周期约24.2小时比地球自转长12分钟- 光信号通过视网膜-下丘脑束调节SCN- 褪黑素在暗环境中由松果体分泌促进睡眠- 核心体温在睡眠前1-2小时开始下降def __init__(self, configNone):初始化生物钟计算器Args:config: 配置对象包含生理参数self.config config or None# 生物钟关键时间点相对起床时间# 这些值是基于大量研究的平均数据self.CIRCADIAN_MARKERS {melatonin_onset: -14.5, # 褪黑素开始分泌小时负数表示起床前temperature_min: -4, # 核心体温最低点alertness_peak_1: 2, # 第一次警觉高峰上午post_lunch_dip: 6, # 午饭后警觉性下降alertness_peak_2: 11, # 第二次警觉高峰傍晚melatonin_peak: 14, # 褪黑素分泌高峰}# 不同睡眠阶段的时间需求self.SLEEP_STAGES {NREM1: 5, # 非快速眼动1期入睡期NREM2: 45, # 非快速眼动2期浅睡期NREM3: 20, # 非快速眼动3期深睡期REM: 25, # 快速眼动期做梦期}def calculate_circadian_phase(self,wake_time: str,current_time: Optional[str] None) - Dict:计算当前生物钟相位核心逻辑:1. 将时间转换为相对于起床时间的小时数2. 根据生物钟曲线计算相位值3. 返回相位描述和对应建议Args:wake_time: 起床时间字符串 HH:MMcurrent_time: 当前时间默认为现在Returns:Dict: 包含相位信息、描述和建议# 解析时间wake_hour, wake_minute map(int, wake_time.split(:))wake_datetime datetime.now().replace(hourwake_hour,minutewake_minute,second0,microsecond0)if current_time:curr_hour, curr_minute map(int, current_time.split(:))current_datetime datetime.now().replace(hourcurr_hour,minutecurr_minute,second0,microsecond0)else:current_datetime datetime.now()# 计算相对于起床时间的时间差小时time_since_wake (current_datetime - wake_datetime).total_seconds() / 3600# 标准化到24小时周期考虑生物钟漂移# 生物钟周期约为24.2小时这里简化为24小时计算circadian_hours time_since_wake % 24# 计算生物钟相位值 (0-1)# 使用余弦函数模拟昼夜节律曲线# 峰值在醒来后2小时警觉性最高phase_value self._calculate_phase_value(circadian_hours)# 确定相位标签和建议phase_info self._interpret_phase(phase_value, circadian_hours)return {phase: phase_info[label],value: phase_value,circadian_hour: round(circadian_hours, 2),time_since_wake: round(time_since_wake, 2),description: phase_info[description],recommendation: phase_info[recommendation],optimal_activity: phase_info[optimal_activity]}def _calculate_phase_value(self, circadian_hours: float) - float:计算生物钟相位值使用改进的余弦函数模拟昼夜节律:- 醒来后2小时达到警觉峰值相位值≈0- 醒来后14小时达到睡眠峰值相位值≈1Args:circadian_hours: 相对于起床的生物钟小时数Returns:float: 相位值 (0完全清醒, 1深度睡眠倾向)# 相位偏移峰值在醒来后2小时peak_offset 2.0# 使用余弦函数周期24小时# 将2小时映射到cos(0)114小时映射到cos(π)-1normalized (circadian_hours - peak_offset) / 12.0phase (math.cos(normalized * math.pi) 1) / 2return min(max(phase, 0), 1) # 限制在0-1范围内def _interpret_phase(self,phase_value: float,circadian_hours: float) - Dict:解释生物钟相位含义Args:phase_value: 相位值 (0-1)circadian_hours: 生物钟小时数Returns:Dict: 相位解释信息if phase_value 0.2:return {label: 警觉高峰期,description: 皮质醇水平高警觉性强认知表现最佳,recommendation: 适合处理复杂任务、创意工作和重要决策,optimal_activity: [深度创作, 编程攻坚, 重要会议]}elif phase_value 0.4:return {label: ☀️ 稳定清醒期,description: 警觉性良好注意力集中思维敏捷,recommendation: 继续进行创造性工作适合团队协作,optimal_activity: [设计工作, 代码审查, 头脑风暴]}elif phase_value 0.55:return {label: ️ 午后回落期,description: 自然警觉性下降可能出现午后困倦,recommendation: 避免复杂决策可安排简单任务或短暂休息,optimal_activity: [文档整理, 邮件处理, 轻量阅读]}elif phase_value 0.7:return {label: 二次警觉期,description: 傍晚时分警觉性再次提升但已接近生物钟夜间,recommendation: 适合收尾工作为睡眠做准备,optimal_activity: [项目收尾, 明日规划, 环境整理]}elif phase_value 0.85:return {label: 睡眠准备期,description: 褪黑素开始分泌体温下降困意渐浓,recommendation: 减少蓝光暴露进行放松活动,optimal_activity: [冥想, 轻柔拉伸, 阅读纸质书]}else:return {label: 深度睡眠期,description: 生物钟强烈指向睡眠继续清醒会破坏恢复,recommendation: 立即准备睡眠避免任何刺激性活动,optimal_activity: [准备就寝, 呼吸练习, 感恩日记]}def calculate_optimal_bedtime(self,wake_time: str,target_cycles: float 5.5,wind_down: int 60) - datetime:计算最佳入睡时间核心算法:1. 基于起床时间和目标睡眠周期数计算理论入睡时间2. 考虑褪黑素分泌提前时间3. 加入放松准备时间Args:wake_time: 起床时间 HH:MMtarget_cycles: 目标睡眠周期数默认5.5个周期≈8.25小时wind_down: 放松准备时间分钟Returns:datetime: 最佳入睡时间wake_hour, wake_minute map(int, wake_time.split(:))# 计算总睡眠时间分钟cycle_minutes self.config.REM_CYCLE_MINUTES if self.config else 90total_sleep_minutes int(target_cycles * cycle_minutes)# 褪黑素分泌提前时间小时melatonin_delay self.config.MELATONIN_ONSET_HOURS if self.config else 2.0# 计算入睡时间bedtime_delta timedelta(hours-(total_sleep_minutes / 60 melatonin_delay),minutes-wind_down)wake_datetime datetime.now().replace(hourwake_hour,minutewake_minute,second0,microsecond0)optimal_bedtime wake_datetime bedtime_delta# 处理跨天情况if optimal_bedtime.day ! wake_datetime.day:optimal_bedtime optimal_bedtime.replace(daywake_datetime.day)return optimal_bedtimedef get_sleep_pressure(self, hours_since_wake: float) - float:计算睡眠压力腺苷积累模型睡眠压力随清醒时间线性增加但在下午有轻微下降餐后效应Args:hours_since_wake: 清醒小时数Returns:float: 睡眠压力值 (0-100)# 基础线性增长pressure min(hours_since_wake * 4.17, 100) # 24小时达到100%# 午后下降餐后嗜睡效应if 5 hours_since_wake 7:pressure - 15 * math.sin((hours_since_wake - 5) * math.pi / 2)return max(pressure, 0)def assess_circadian_disruption(self,actual_bedtime: str,natural_bedtime: str) - Dict:评估生物钟紊乱程度Args:actual_bedtime: 实际入睡时间natural_bedtime: 自然入睡时间基于生物钟Returns:Dict: 紊乱评估结果actual_hour, actual_min map(int, actual_bedtime.split(:))natural_hour, natural_min map(int, natural_bedtime.split(:))actual_total_min actual_hou利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛