Files

188 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 银发群体高温多时间尺度预警和服务优化可视化研究
本科毕业设计 — 河南理工大学计算机科学与技术学院
## 项目概述
针对焦作市和郑州市老年群体,利用 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+MHAFocal 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 VRAMCPU 也可运行但训练较慢)
- 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