# 银发群体高温多时间尺度预警和服务优化可视化研究

本科毕业设计 — 河南理工大学计算机科学与技术学院

## 项目概述

针对焦作市和郑州市老年群体，利用 ERA5-Land 气象再分析数据（2010-2024年），构建了基于 XGBoost 和 LSTM-Attention 的多时间尺度高温健康风险预警模型，并开发了 ECharts 可视化大屏系统。

### 核心成果

- **数据集**：109.6万条序列样本（14天×19特征），覆盖短期(3d)/中期(7d)/长期(30d)预测
- **XGBoost 模型**：短期 F1=0.933，中期 F1=0.920，长期 F1=0.858（主力模型）
- **LSTM-Attention 模型**：983K 参数，BiLSTM+MHA，Focal Loss 训练（受限于类别不平衡）
- **可视化大屏**：Flask + ECharts 5.5，深色科技蓝风格，6 面板
- **学位论文**：LaTeX 编写的 7 章本科毕业论文，56 页，GB/T 7714 参考文献

### 技术栈

| 层 | 技术 |
|----|------|
| 数据获取 | ERA5-Land (CDS API), cdsapi 0.7.7 |
| 数据处理 | Python 3.13, xarray, h5netcdf, h5py, pandas, numpy |
| 深度学习 | PyTorch 2.12.0+cu126 (CUDA 12.6) |
| 传统模型 | XGBoost 2.0+, scikit-learn 1.3+ |
| Web 后端 | Flask 3.0+ |
| 前端 | ECharts 5.5, CSS Grid, Glassmorphism |
| 包管理 | uv |
| 论文 | LaTeX (XeLaTeX + ctexbook), GB/T 7714 |

## 环境配置

### 系统要求

- Python 3.13
- NVIDIA GPU（推荐 RTX 4060+，8GB VRAM；CPU 也可运行但训练较慢）
- Windows 11 / Linux

### 安装

```bash
# 创建虚拟环境
uv venv
# 安装依赖（含 CUDA PyTorch）
uv sync
```

### ERA5 数据下载配置

1. 注册 Copernicus CDS 账号：https://cds.climate.copernicus.eu/
2. 接受 ERA5-Land 数据许可协议
3. 创建 `~/.cdsapirc`：
```
url: https://cds.climate.copernicus.eu/api
key: <your-api-key>
```

## 运行指南

### 1. 数据获取与预处理

```bash
# 下载 ERA5 数据（焦作+郑州，各180个月，预计耗时约5天）
python -m src.data.download_era5

# 解压 ZIP 格式 NetCDF 文件（CDS 新格式）
python -m src.data.extract_zips

# 运行预处理管线（耗时约27分钟）
python -m src.data.preprocess
```

### 2. 模型训练与评估

```bash
# 训练 LSTM-Attention 模型
python -m src.models.train

# 模型评估（含 XGBoost 训练 + 对比图表生成）
python -m src.models.evaluate
```

### 3. 启动可视化大屏

```bash
python -m src.web.app
# 浏览器访问 http://localhost:5005
```

### 4. 编译论文

```bash
cd thesis
xelatex -interaction=nonstopmode main
xelatex -interaction=nonstopmode main
# 或使用 Makefile: make
```

## 项目结构

```
├── data/
│   ├── raw/era5/           # ERA5 NetCDF 文件（焦作180+郑州180）
│   ├── processed/          # 预处理后 NPZ 序列和 CSV 特征
│   └── external/           # 死亡率/人口/暴露反应数据
├── src/
│   ├── data/
│   │   ├── download_era5.py      # CDS API 下载
│   │   ├── extract_zips.py       # ZIP→NetCDF 解压
│   │   ├── preprocess.py         # 预处理管线（597行, 8步）
│   │   └── collect_mortality.py  # 死亡率数据整理
│   ├── models/
│   │   ├── lstm_attention.py     # LSTM-Attention 模型定义
│   │   ├── xgboost_baseline.py   # XGBoost 基线
│   │   ├── train.py              # 训练脚本（365行）
│   │   └── evaluate.py           # 评估脚本（295行）
│   ├── web/
│   │   ├── app.py                # Flask 后端（4 API）
│   │   └── static/index.html     # ECharts 大屏（6面板）
│   └── utils/
│       └── config.py             # 全局配置常量
├── notebooks/
│   └── eda.ipynb                 # 探索性数据分析
├── outputs/
│   ├── models/                   # best_model.pt (12MB)
│   ├── figures/                  # 混淆矩阵/模型对比图
│   └── logs/                     # 训练日志
└── thesis/                       # LaTeX 学位论文（56页）
    ├── main.tex                  # 主文件（~130行结构）
    ├── chapters/                 # 12个章/附录 tex 文件
    │   ├── abstract.tex
    │   ├── ch1-intro.tex ~ ch7-conclusion.tex
    │   ├── references.tex
    │   ├── acknowledgments.tex
    │   └── appendix-*.tex        # 附录A~C
    └── refs.bib
```

## 模型架构

```
输入 (14天 × 19特征)
 → Linear 投影 (19 → 128)
 → 2层 BiLSTM (128, dropout=0.3)
 → Multi-Head Self-Attention (4 heads, d_k=32)
 → LSTM 投影 (256 → 128)
 → 三头输出
    ├── 短期头 (128→64→4)
    ├── 中期头 (128→64→4)
    └── 长期头 (128→64→4)
```
总参数量：983,628

## 实验结果

| 时间尺度 | 指标 | XGBoost | LSTM-Attention |
|---------|------|---------|----------------|
| 短期(3d) | Accuracy | **0.9908** | 0.9263 |
| 短期(3d) | F1-Macro | **0.9325** | 0.2404 |
| 中期(7d) | Accuracy | **0.9886** | 0.9259 |
| 中期(7d) | F1-Macro | **0.9195** | 0.2404 |
| 长期(30d)| Accuracy | **0.9782** | 0.9260 |
| 长期(30d)| F1-Macro | **0.8576** | 0.2404 |

XGBoost 在三个时间尺度上均大幅领先。LSTM 受限于极度类别不平衡（低风险类占94-96%），经6轮调优未收敛。

## 风险等级定义

| 等级 | 体感温度 | 颜色 |
|------|---------|------|
| 0级 低风险 | HI < 32°C | 绿 |
| 1级 中风险 | 32 ≤ HI < 35°C | 黄 |
| 2级 高风险 | 35 ≤ HI < 38°C | 橙 |
| 3级 严重风险 | HI ≥ 38°C | 红 |

## 数据来源

| 数据 | 来源 | 时间范围 |
|------|------|----------|
| 气象数据 | ERA5-Land (Copernicus CDS) | 2010-2024 |
| 体感温度 | NOAA Rothfusz 公式 | — |
| 相对湿度 | Magnus 公式 | — |
| 暴露反应曲线 | Chen et al. (2018) Lancet Planetary Health | — |
| 人口数据 | 第七次全国人口普查 (2020) | 2020 |

## 仓库

https://lhy-git.liuhangyv.top/Serendipity/elderly-heat-warning
