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

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

## 概述

本项目针对焦作市和郑州市老年群体，构建了基于 LSTM-Attention 的多时间尺度高温健康风险预警模型，并开发了 ECharts 可视化大屏系统。

### 核心功能

- **多时间尺度预警**：短期（1-3天）、中期（7天）、长期（30天）三级高温健康风险预测
- **深度学习模型**：BiLSTM + Multi-Head Attention，三头输出同时预测三个时间尺度
- **基线对比**：XGBoost 三分类器，验证深度学习方法有效性
- **可视化大屏**：6 面板深色科技蓝风格 Web 大屏，含温度趋势、风险预警、人口统计等
- **完整论文**：LaTeX 学位论文，含 7 个章节 + 参考文献 + 附录

### 技术栈

| 层 | 技术 |
|----|------|
| 数据处理 | Python, xarray, pandas, numpy |
| 气象数据 | ERA5-Land (CDS API) |
| 深度学习 | PyTorch 2.12, CUDA 12.6 |
| 传统模型 | XGBoost, scikit-learn |
| Web 后端 | Flask |
| 可视化 | ECharts 5.5 |
| 包管理 | uv |
| 论文 | LaTeX (XeLaTeX + ctexbook) |

## 环境配置

### 系统要求

- Python 3.13
- NVIDIA GPU (推荐，RTX 4060 或以上)
- Windows 11 / Linux

### 安装

```bash
# 创建虚拟环境
uv venv --python "D:\settings\Language\Python\Python 3.13.13\python.exe"

# 安装依赖
uv pip install -e .
```

### CDS API 配置（数据下载必需）

1. 注册 Copernicus CDS 账号：https://cds.climate.copernicus.eu/
2. 获取 API Key
3. 创建 `~/.cdsapirc`：
```
url: https://cds.climate.copernicus.eu/api
key: <UID>:<API_KEY>
```

## 运行指南

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

```bash
# 下载 ERA5 气象数据（需要 CDS API 配置）
python -m src.data.download_era5

# 收集死亡率与人口数据
python -m src.data.collect_mortality

# 运行预处理管道
python -m src.data.preprocess
```

### 2. 探索性数据分析

```bash
jupyter notebook notebooks/eda.ipynb
```

### 3. 模型训练

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

# 模型评估与对比
python -m src.models.evaluate
```

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

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

### 5. 论文编译

```bash
cd thesis
make
# 或手动: xelatex main && biber main && xelatex main && xelatex main
```

## 项目结构

```
project/
├── data/
│   ├── raw/era5/          # ERA5 原始 NetCDF 文件
│   ├── processed/         # 预处理后 CSV 和 NPZ 序列
│   └── external/          # 死亡率/人口/暴露反应数据
├── src/
│   ├── data/              # 数据获取与预处理
│   │   ├── download_era5.py
│   │   ├── collect_mortality.py
│   │   └── preprocess.py
│   ├── models/            # 模型定义与训练
│   │   ├── lstm_attention.py
│   │   ├── xgboost_baseline.py
│   │   ├── train.py
│   │   └── evaluate.py
│   ├── web/               # Web 可视化
│   │   ├── app.py
│   │   └── static/index.html
│   └── utils/
│       └── config.py      # 全局配置
├── notebooks/
│   └── eda.ipynb          # 探索性数据分析
├── outputs/
│   ├── models/            # 训练好的模型权重
│   ├── figures/           # 论文和评估图表
│   └── logs/              # 训练日志
├── thesis/                # LaTeX 学位论文
│   ├── main.tex
│   ├── chapters/          # 各章节 tex 文件
│   ├── refs.bib           # 参考文献
│   └── Makefile
└── docs/superpowers/      # 设计文档和计划
```

## 模型架构

```
输入 (14天气象序列)
  → Linear 嵌入 (16 → 128)
  → 2层 BiLSTM (128, dropout=0.3)
  → Multi-Head Attention (4 heads)
  → Linear 投影 (256 → 128)
  → 三头输出
     ├── 短期头 (128→64→4)
     ├── 中期头 (128→64→4)
     └── 长期头 (128→64→4)
```

总参数量：~983K

## 风险等级定义

| 等级 | 条件 | 颜色 |
|------|------|------|
| 低风险 | 体感温度 < 32°C | 绿 |
| 中风险 | 体感温度 32-35°C | 黄 |
| 高风险 | 体感温度 35-38°C 或连续 3 天 >35°C | 橙 |
| 严重风险 | 体感温度 >= 38°C 且连续 3 天 >35°C | 红 |

## 数据来源

| 数据 | 来源 | 时间范围 |
|------|------|----------|
| 气象数据 | ERA5-Land (Copernicus CDS) | 2010-2024 |
| 死亡率 | 中国卫生健康统计年鉴 | 2010-2023 |
| 暴露反应曲线 | Chen et al. (2018) Lancet Planet Health | — |
| 人口数据 | 第七次全国人口普查 (2020) | 2020 |
| 老龄化率 | 河南省统计年鉴 | 2010-2023 |
