# 银发群体高温多时间尺度预警和服务优化可视化研究 — 设计文档 > 本科毕业设计 | 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 Baseline:XGBoost 三个独立分类器,同等特征,用于对比。 ### 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 可用 |