a0478b0b11
搭建完整的项目目录结构,配置项目依赖与元信息,添加数据下载、预处理、模型训练、可视化相关的核心业务代码,补充项目设计文档与.gitignore配置,导入初始外部参考数据文件。
315 lines
13 KiB
Markdown
315 lines
13 KiB
Markdown
# 银发群体高温多时间尺度预警和服务优化可视化研究 — 设计文档
|
||
|
||
> 本科毕业设计 | 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 可用 |
|