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

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

项目概述

针对焦作市和郑州市老年群体,利用 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

安装

# 创建虚拟环境
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. 数据获取与预处理

# 下载 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

S
Description
银发群体高温多时间尺度预警和服务优化可视化研究 - 本科毕业设计
Readme 8.4 MiB
Languages
TeX 50.3%
Python 34.7%
HTML 11.6%
Jupyter Notebook 3.2%
Makefile 0.2%