Files
elderly-heat-warning/docs/superpowers/specs/2026-05-26-elderly-heat-warning-design.md
T
Serendipity a0478b0b11 feat: 初始化老年群体高温预警项目基础工程
搭建完整的项目目录结构,配置项目依赖与元信息,添加数据下载、预处理、模型训练、可视化相关的核心业务代码,补充项目设计文档与.gitignore配置,导入初始外部参考数据文件。
2026-05-26 20:05:10 +08:00

315 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 银发群体高温多时间尺度预警和服务优化可视化研究 — 设计文档
> 本科毕业设计 | 2026-05-26 | 方案 C:混合架构
---
## 1. 项目概述
### 1.1 目标
构建一个面向焦作、郑州两市的**高温热浪对老年群体健康风险的预测预警系统**,包含深度学习预测模型和 Web 可视化大屏两部分,并撰写完整的 LaTeX 学位论文。
### 1.2 约束
| 约束 | 值 |
|------|-----|
| 学术层级 | 本科毕业论文(河南理工大学计算机学院) |
| 工期 | 4-5 周出初稿(时间较紧) |
| GPU | NVIDIA RTX 4060 Laptop 8GB |
| Python 环境 | uv 新建虚拟环境 |
| 地理范围 | 焦作市 + 郑州市 |
| 时间尺度 | 短期(1-3天) + 中期(7天) + 长期(30天) |
### 1.3 成功标准
1. LSTM-Attention 模型在测试集上 Macro F1 ≥ 0.70
2. XGBoost baseline 完成对比实验
3. Web 大屏 6 个面板全部可交互展示
4. 模型推理 + API 响应 ≤ 2 秒
5. LaTeX 论文 ≥ 30 页,参考文献 ≥ 35 篇
6. 代码可复现,README 包含完整运行说明
---
## 2. 整体架构
```
┌─────────────────────────────────────────────────────────┐
│ 数据层 (Data Layer) │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ ERA5 气象数据 │ │ 统计年鉴死亡率 │ │ 地方统计局数据 │ │
│ └──────┬───────┘ └──────┬───────┘ └───────┬───────┘ │
│ └─────────────────┼─────────────────┘ │
│ ┌──────▼──────┐ │
│ │ 数据预处理管道 │ │
│ └──────┬──────┘ │
├───────────────────────────┼─────────────────────────────┤
│ 模型层 (Model Layer) │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ LSTM + Attention │ │ XGBoost Baseline │ │
│ │ 三头输出(短/中/长) │ │ 三个独立分类器 │ │
│ └──────────┬───────────┘ └──────────┬───────────┘ │
│ └───────────┬───────────┘ │
│ ┌──────▼──────┐ │
│ │ 模型对比评估 │ │
│ └──────┬──────┘ │
├───────────────────────────┼─────────────────────────────┤
│ 可视化层 (Visualization Layer) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Flask API 后端 │ │
│ └──────────────────────┬───────────────────────────┘ │
│ ┌──────────────────────▼───────────────────────────┐ │
│ │ HTML/ECharts 大屏前端 (6 面板) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
### 2.1 技术选型
| 层 | 技术 | 理由 |
|----|------|------|
| 数据处理 | xarray + pandas + numpy | ERA5 NetCDF 读取 |
| 深度学习 | PyTorch + pytorch-lightning | 训练结构化 |
| 传统模型 | xgboost + scikit-learn | Baseline 对比 |
| 后端 | Flask | 轻量快速 |
| 前端 | 纯 HTML + ECharts + MapV | 无需构建工具 |
| 包管理 | uv | 快速安装 |
| 论文 | LaTeX (XeLaTeX + ctexbook) | 中文支持 |
---
## 3. 数据方案
### 3.1 气象数据:ERA5-Land
| 项目 | 详情 |
|------|------|
| 来源 | Copernicus CDS (`cds.climate.copernicus.eu`) |
| 变量 | 2m气温、相对湿度、地表气压、风速、降水量 |
| 时空范围 | 2010-2024,焦作(35.24°N,113.22°E) + 郑州(34.75°N,113.62°E) |
| 分辨率 | 0.1°×0.1° 逐日 |
| 格式 | NetCDF → xarray |
| 获取 | 免费注册,cdsapi Python 库下载 |
### 3.2 死亡率数据
| 策略 | 来源 | 粒度 |
|------|------|------|
| 第一方案 | 《中国卫生健康统计年鉴》+ 文献暴露-反应曲线 | 省级年度 |
| 第二方案 | 知网/CNKI 硕博论文附录 | 城市月度 |
| 补充指标 | 百度指数"中暑"搜索量、120急救公开数据 | 日级 |
### 3.3 人口数据
- 第七次人口普查(老龄化率、人口结构)
- 《河南省统计年鉴》(历年变化趋势)
- LandScan 全球人口格网(可选)
### 3.4 预处理流程
```
ERA5 NetCDF → 坐标提取 → 日值聚合 → 特征工程
├── 热浪识别(连续3天>35°C)
├── 滑动平均温度
├── 昼夜温差
└── 滞后效应(lag 0-7天)
死亡率数据 → 数字化/录入 → 时间对齐 → 人口标准化
全数据集 → 统一 DataFrame → 训练/验证/测试(7:1.5:1.5,按时间序)
```
### 3.5 特征工程
- 最高/最低/平均温度
- 热浪天数、热浪强度
- 滞后温度(lag 0,1,3,7天)
- 湿度、体感温度(Heat Index
- 月份/季节 one-hot
- 城市 one-hot
---
## 4. 模型设计
### 4.1 问题定义
- **输入**:过去 14 天气象特征序列 + 时间特征
- **输出**:三个时间尺度的风险等级(低/中/高/严重,4 分类)
### 4.2 主模型:LSTM + Attention
```
输入序列 (lookback=14天)
→ 特征嵌入层 (Linear, →64维)
→ 2层 BiLSTM (128→64, dropout=0.3)
→ Multi-Head Attention (4 heads)
→ 三分支输出 (短期头/中期头/长期头,各4分类)
```
| 超参数 | 值 |
|--------|-----|
| Lookback | 14 天 |
| LSTM 层 | 2 (双向) |
| 隐藏维度 | 128→64 |
| Dropout | 0.3 |
| Attention heads | 4 |
| 损失函数 | Focal Loss |
| 优化器 | AdamW (lr=1e-3) |
| Batch size | 32 |
| Epochs | 100 (Early Stop, patience=15) |
### 4.3 BaselineXGBoost
三个独立分类器,同等特征,用于对比。
### 4.4 风险等级定义
| 等级 | 条件 | 颜色 |
|------|------|------|
| 低 | 体感温度 < 32°C | 🟢 绿 |
| 中 | 体感温度 32-35°C | 🟡 黄 |
| 高 | 体感温度 35-38°C 或连续3天>35°C | 🟠 橙 |
| 严重 | 体感温度 ≥ 38°C 且连续3天>35°C | 🔴 红 |
### 4.5 评估指标
- Accuracy + Macro F1(分类)
- 混淆矩阵
- MAE/RMSE(连续温度预测)
- LSTM vs XGBoost 对比表
---
## 5. 可视化大屏
### 5.1 布局(6 面板)
```
┌────────────────────────────────────────────────┐
│ 高温热浪与老年群体健康预警平台 │
│ 焦作·郑州 | 日期/时间 │
├───────────────────┬───────────┬────────────────┤
│ ① 双城温度热力图 │ ② 风险等级 │ ③ 老年人口概况 │
│ (MapV+百度地图) │ (仪表盘) │ (数字+饼图) │
├───────────────────┴───────────┴────────────────┤
│ ④ 温度-死亡率关联 (双Y轴折线) │
│ ⑤ 多尺度预警时间线 (条形图) │
├────────────────────────────────────────────────┤
│ ⑥ 历史高温事件回顾 (柱状图+折线) │
└────────────────────────────────────────────────┘
```
### 5.2 交互流程
- 前端 `fetch('/api/predict')` → Flask 加载模型 → 推理 → 返回 JSON
- 静态页面 + 纯 ECharts,无需前端构建工具
- 深色科技蓝主题(`#0a1632` 背景)
### 5.3 API 端点
| 端点 | 方法 | 返回 |
|------|------|------|
| `/` | GET | 大屏首页 |
| `/api/predict` | GET | 最新预测结果 JSON |
| `/api/history` | GET | 历史数据(可选日期范围) |
| `/api/risk` | GET | 当前风险等级 + 建议 |
---
## 6. 论文大纲
### 6.1 章节结构(约 30-40 页)
| 章节 | 内容 | 预计页数 |
|------|------|----------|
| 摘要 | 中英文摘要 | 2 |
| 第1章 | 绪论(背景、现状、内容、路线) | 5-6 |
| 第2章 | 相关理论与技术基础 | 5-6 |
| 第3章 | 数据获取与预处理 | 5-6 |
| 第4章 | 多时间尺度高温预警模型 | 6-8 |
| 第5章 | 预警可视化系统设计与实现 | 5-6 |
| 第6章 | 实验结果与分析 | 4-5 |
| 第7章 | 总结与展望 | 1-2 |
| 参考文献 | 35-45 篇 | 3-4 |
| 致谢/附录 | | 2-3 |
### 6.2 LaTeX 配置
- 引擎:XeLaTeX
- 文档类:ctexbook
- 参考文献:BibLaTeX + GB/T 7714
- 字体:思源宋体/黑体(免费商用)
- 编译:latexmk -xelatex
---
## 7. 目录结构
```
project/
├── data/ # 数据目录
│ ├── raw/ # 原始下载数据
│ ├── processed/ # 预处理后数据
│ └── external/ # 外部参考数据
├── src/
│ ├── data/ # 数据获取与预处理
│ │ ├── download_era5.py
│ │ ├── download_mortality.py
│ │ └── preprocess.py
│ ├── models/ # 模型
│ │ ├── lstm_attention.py
│ │ ├── xgboost_baseline.py
│ │ └── train.py
│ ├── web/ # Web 可视化
│ │ ├── app.py # Flask 后端
│ │ ├── static/
│ │ │ └── index.html # 大屏前端
│ │ └── templates/
│ └── utils/ # 工具函数
│ ├── config.py
│ └── metrics.py
├── notebooks/ # 探索性分析
│ └── eda.ipynb
├── outputs/ # 输出
│ ├── models/ # 训练好的模型权重
│ ├── figures/ # 论文插图
│ └── logs/ # 训练日志
├── thesis/ # LaTeX 论文
│ ├── main.tex
│ ├── chapters/
│ ├── figures/
│ ├── refs.bib
│ └── Makefile
├── docs/
│ └── superpowers/specs/ # 设计文档
├── pyproject.toml
├── README.md
└── .gitignore
```
---
## 8. 实施阶段
| 阶段 | 内容 | 预计时间 |
|------|------|----------|
| **Phase 1** | 环境搭建、数据下载与预处理 | 第 1 周 |
| **Phase 2** | 探索性数据分析 + 特征工程 | 第 1-2 周 |
| **Phase 3** | LSTM-Attention 模型实现与训练 | 第 2-3 周 |
| **Phase 4** | XGBoost Baseline + 模型对比 | 第 3 周 |
| **Phase 5** | Flask 后端 + ECharts 大屏前端 | 第 3-4 周 |
| **Phase 6** | LaTeX 论文撰写 | 第 2-5 周(并行) |
---
## 9. 风险与缓解
| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| ERA5 下载速度慢 | 中 | 只下载双城附近网格,减小请求量 |
| 死亡率数据无法获取日粒度 | 中 | 使用文献暴露-反应曲线替代 |
| 训练不收敛 | 低 | 从简单模型逐步增加复杂度 |
| 时间不足 | 高 | 论文与代码并行撰写;XGBoost 优先确保 baseline 可用 |