基于每日情绪标签与持续时长的情绪曲线绘制与低谷周期识别(教学级健康管理原型)
内容不涉及心理诊断、不推荐产品、不做疗效承诺、无任何引流。
一、实际应用场景描述
在智能健康管理课程中,情绪监测(Mood Monitoring)是心理健康管理的核心技能之一。
本程序适用于:
- 个人情绪自我管理
- 心理咨询辅助记录
- 学校心理健康教育
- 健康管理专业实验教学
核心目标:
- 录入每日情绪标签与持续时长
- 绘制一周情绪变化趋势
- 识别情绪低谷周期
- 输出非临床观察建议
✅ 不替代心理医生
✅ 不做精神科诊断
✅ 仅作为健康意识与数据素养工具
二、痛点引入(真实可感知)
痛点 表现
情绪模糊 “今天还行”无法量化
记忆偏差 忘记前几天真实状态
看不到趋势 只关注单日情绪
低谷难发现 情绪下滑过程被忽略
工具过重 专业量表门槛太高
👉 需要一个轻量、本地、可视化的情绪记录工具
三、核心逻辑讲解(工程视角)
1️⃣ 数据模型设计
DailyMood
├── date 日期
├── mood_label 情绪标签
├── duration 持续时长(小时)
└── intensity 情绪强度(1–10)
2️⃣ 情绪量化规则(教学用)
情绪标签 基础分值
愉悦 9
平静 7
中性 5
低落 3
焦虑 2
沮丧 1
3️⃣ 情绪指数计算
当日情绪指数 =
基础分值 × 强度系数 × 时长系数
4️⃣ 低谷识别逻辑
- 连续 ≥3 天 情绪指数低于阈值
- 或单日情绪指数显著下降
5️⃣ 可视化
- 使用
"matplotlib"
- 折线图展示一周趋势
- 标注低谷区间
四、Python 模块化代码(可直接运行)
📁 项目结构
mood_tracker_tool/
│
├── main.py
├── models.py
├── analyzer.py
├── visualizer.py
├── storage.py
└── README.md
✅ models.py(数据建模)
"""
models.py
每日情绪数据模型
"""
class DailyMood:
def __init__(self, date, mood_label, duration, intensity):
self.date = date
self.mood_label = mood_label
self.duration = duration
self.intensity = intensity
✅ analyzer.py(分析与低谷识别)
"""
analyzer.py
情绪指数计算与低谷识别
"""
MOOD_SCORE = {
"愉悦": 9,
"平静": 7,
"中性": 5,
"低落": 3,
"焦虑": 2,
"沮丧": 1
}
def calculate_mood_index(record):
base = MOOD_SCORE.get(record.mood_label, 5)
duration_factor = min(record.duration / 12, 1.5)
intensity_factor = record.intensity / 10
return base * duration_factor * intensity_factor
def detect_low_periods(records, threshold=4.0, min_days=3):
low_days = []
result = []
for i, r in enumerate(records):
index = calculate_mood_index(r)
if index < threshold:
low_days.append(i)
else:
if len(low_days) >= min_days:
result.append((low_days[0], low_days[-1]))
low_days = []
if len(low_days) >= min_days:
result.append((low_days[0], low_days[-1]))
return result
✅ visualizer.py(可视化)
"""
visualizer.py
绘制情绪曲线
"""
import matplotlib.pyplot as plt
from analyzer import calculate_mood_index
def plot_mood_curve(records, low_periods):
dates = [r.date for r in records]
values = [calculate_mood_index(r) for r in records]
plt.figure(figsize=(8, 4))
plt.plot(dates, values, marker="o", label="情绪指数")
for start, end in low_periods:
plt.axvspan(start, end, color="red", alpha=0.2, label="情绪低谷")
plt.ylim(0, 10)
plt.xlabel("日期")
plt.ylabel("情绪指数")
plt.title("一周情绪变化曲线")
plt.legend()
plt.tight_layout()
plt.show()
✅ storage.py(本地存储)
"""
storage.py
JSON 本地存储
"""
import json
FILE_PATH = "mood_records.json"
def save_records(records):
data = [r.__dict__ for r in records]
with open(FILE_PATH, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
✅ main.py(交互入口)
"""
main.py
情绪曲线与低谷识别工具
"""
from models import DailyMood
from analyzer import detect_low_periods
from visualizer import plot_mood_curve
from storage import save_records
def main():
print("=== 一周情绪记录工具 ===")
records = []
for _ in range(7):
date = input("日期(YYYY-MM-DD):")
mood = input("情绪标签:")
duration = float(input("持续时长(小时):"))
intensity = int(input("情绪强度(1-10):"))
records.append(DailyMood(date, mood, duration, intensity))
lows = detect_low_periods(records)
print("\n【情绪低谷周期】")
for start, end in lows:
print(f"第 {start+1} 天 至 第 {end+1} 天")
plot_mood_curve(records, lows)
save_records(records)
print("✅ 数据已保存")
if __name__ == "__main__":
main()
五、README 与使用说明
# 情绪曲线与低谷识别工具(教学版)
## 项目说明
用于记录每日情绪标签与持续时长,绘制情绪曲线并识别低谷周期。
## 依赖安装
```bash
pip install matplotlib
```
## 使用方式
```bash
python main.py
```
## 适用范围
- 心理健康教学
- 健康管理课程
- 个人情绪记录
## 注意事项
- 非心理诊断工具
- 不替代专业帮助
- 结果仅作教学与自我观察
六、核心知识点卡片(教学向)
分类 内容
Python 类、列表、函数
数据分析 情绪量化、趋势识别
可视化 Matplotlib 折线图
心理健康 情绪监测概念
工程思想 模块化与解耦
可扩展性 可接入数据库 / App
七、总结(工程师视角)
这是一个完全中立、去营销化、可教学的原型系统:
✅ 不制造情绪焦虑
✅ 不伪装成诊疗工具
✅ 不依赖复杂心理学理论
它真正展示的是:
如何用 Python 把主观情绪转化为客观、可观察、可讨论的数据
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!