a0478b0b11
搭建完整的项目目录结构,配置项目依赖与元信息,添加数据下载、预处理、模型训练、可视化相关的核心业务代码,补充项目设计文档与.gitignore配置,导入初始外部参考数据文件。
13 KiB
13 KiB
银发群体高温多时间尺度预警和服务优化可视化研究 — 设计文档
本科毕业设计 | 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 成功标准
- LSTM-Attention 模型在测试集上 Macro F1 ≥ 0.70
- XGBoost baseline 完成对比实验
- Web 大屏 6 个面板全部可交互展示
- 模型推理 + API 响应 ≤ 2 秒
- LaTeX 论文 ≥ 30 页,参考文献 ≥ 35 篇
- 代码可复现,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 可用 |