main
银发群体高温多时间尺度预警和服务优化可视化研究
本科毕业设计 — 河南理工大学计算机科学与技术学院
项目概述
针对焦作市和郑州市老年群体,利用 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
安装
# 创建虚拟环境
uv venv
# 安装依赖(含 CUDA PyTorch)
uv sync
ERA5 数据下载配置
- 注册 Copernicus CDS 账号:https://cds.climate.copernicus.eu/
- 接受 ERA5-Land 数据许可协议
- 创建
~/.cdsapirc:
url: https://cds.climate.copernicus.eu/api
key: <your-api-key>
运行指南
1. 数据获取与预处理
# 下载 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. 模型训练与评估
# 训练 LSTM-Attention 模型
python -m src.models.train
# 模型评估(含 XGBoost 训练 + 对比图表生成)
python -m src.models.evaluate
3. 启动可视化大屏
python -m src.web.app
# 浏览器访问 http://localhost:5005
4. 编译论文
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
Description
Languages
TeX
50.3%
Python
34.7%
HTML
11.6%
Jupyter Notebook
3.2%
Makefile
0.2%