feat: 论文大幅扩写 — 42页,完整数学公式+实际数据+系统描述

This commit is contained in:
2026-05-28 13:09:08 +08:00
parent 4e41de3772
commit 2bdafc56bb
8 changed files with 620 additions and 173 deletions
+142 -43
View File
@@ -1,71 +1,170 @@
\chapter{数据获取与预处理}
\section{研究区域概况}
本章详细描述从原始ERA5-Land再分析数据到机器学习就绪数据集的全流程管线,包括数据获取、质量控制、体感温度计算、特征工程和序列化构建。
本研究选取焦作市和郑州市作为研究区域。两市位于河南省中部偏北,属于暖温带大陆性季风气候,夏季炎热多雨,冬季寒冷干燥,年平均气温约14-15℃,7月平均气温可达27-28℃,极端高温超过40℃。
\section{研究区域与数据时空范围}
焦作市总面积4071平方公里,常住人口约352万,其中65岁及以上人口占比约12.8\%。郑州市作为河南省省会,总面积7446平方公里,常住人口约1274万,老龄化率约11.6\%。两市的城镇化率均超过65\%,城市热岛效应与人口老龄化叠加,使得高温健康防护问题尤为突出
本研究选取焦作市(35.24°N, 113.22°E)和郑州市(34.75°N, 113.62°E)为研究区域,两市同属暖温带大陆性季风气候,夏季炎热特征显著。数据覆盖2010年1月1日至2024年12月31日共15年(180个月),时间分辨率为6小时(每日00:00、06:00、12:00、18:00 UTC
ERA5-Land数据集的原始空间分辨率为0.1°×0.1°(约9 km),本研究以城市坐标为中心,截取±0.5°范围的网格区域(约11×11网格点),覆盖城区及近郊范围,兼顾城区热岛效应和郊区对照。
\section{数据来源}
\subsection{ERA5-Land气象再分析数据}
ERA5-Land是欧洲中期天气预报中心(ECMWF)提供的全球陆地表面再分析数据集,空间分辨率0.1°×0.1°(约9 km),时间分辨率最高为1小时。本研究通过Copernicus Climate Data Store (CDS) API获取2010-2024年间焦作市和郑州市的网格点气象数据
ERA5-Land是欧洲中期天气预报中心(ECMWF)生产的全球陆地表面再分析数据集,是ERA5的增强版本,在陆地变量上具有更高的空间分辨率0.1° vs 0.25°)。数据通过Copernicus Climate Data Store (CDS) API获取,使用cdsapi Python库(v0.7.7)逐月下载
获取的气象变量包括
\begin{itemize}
\item 2m温度(2m temperature
\item 2m露点温度(2m dewpoint temperature
\item 地表气压(surface pressure
\item 10m风速U分量和V分量
\item 总降水量(total precipitation
\item 地表太阳辐射(surface solar radiation downwards
\end{itemize}
本研究获取以下6个气象变量:
\begin{table}[H]
\centering
\caption{ERA5-Land获取变量一览}
\begin{tabular}{cccc}
\toprule
\textbf{NetCDF变量名} & \textbf{中文名称} & \textbf{单位} & \textbf{原始时间分辨率} \\
\midrule
t2m & 2m气温 & K & 6小时 \\
d2m & 2m露点温度 & K & 6小时 \\
sp & 地表气压 & Pa & 6小时 \\
u10 & 10m风速U分量 & m/s & 6小时 \\
v10 & 10m风速V分量 & m/s & 6小时 \\
tp & 总降水量 & m & 6小时(累积) \\
\bottomrule
\end{tabular}
\end{table}
每城市每月生成1个NetCDF文件,两城市共360个文件,数据总量约76 MB。经ZIP解压后得到标准NetCDF4格式,使用h5netcdf后端通过xarray库进行读取和拼接。每个文件包含约124个时间步(31天×4时次/天),单个城市15年拼接后共21,916个时间步。
\subsection{人口与健康数据}
人口数据来源于第七次全国人口普查公报(2020年),包括分年龄段人口结构、老龄化率等基础指标。健康统计数据来源于河南省卫生健康统计年鉴,包括各月死亡人数、门急诊就诊人次等
人口数据来源于第七次全国人口普查公报(2020年)以及河南省统计年鉴,包括分年龄段人口结构0-14岁、15-64岁、65岁及以上)、老龄化率等基础指标。暴露-反应关系参考Chen等(2018)发表的中国多城市温度-死亡关联曲线,构建了13点暴露-反应映射表(温度-相对风险)
\subsection{高温预警与极端天气历史记录}
\section{数据预处理管线}
收集焦作和郑州市2010-2024年高温预警发布记录和极端天气事件记录,用于标注和验证模型预警的准确性
预处理管线包含8个顺序步骤,由Python脚本\texttt{src/data/preprocess.py}实现,自动遍历焦作和郑州两个城市。
\section{数据预处理}
\subsection{步骤1:多文件加载与拼接}
\subsection{时间分辨率统一}
使用xarray的\texttt{open\_mfdataset}函数,以\texttt{by\_coords}模式沿valid\_time维度拼接同城市的所有月度NetCDF文件。拼接后按时间排序并去重,确保时间轴的连续性和单调性。
原始ERA5-Land数据为小时级别,需将其聚合为日尺度数据。对于温度变量,计算日最大值、最小值和平均值;对于降水量、太阳辐射等累积变量,计算日总量。
\subsection{步骤2:日聚合与单位转换}
\subsection{缺失值处理}
由于CDS API下载过程中可能产生网络中断导致部分时段数据缺失,采用线性插值和前后日平均值填充相结合的方法处理缺失值。若连续缺失超过30天,则使用历史同期多年平均值进行填充。
\subsection{异常值检测}
对温度数据中的异常值进行检测和修正。温度超出历史同期均值±3倍标准差范围的被视为异常值,采用前后值线性插值修正。
\subsection{特征工程}
在基础气象变量的基础上,构建以下衍生特征:
将6小时间隔数据按valid\_time重采样为日平均值,并执行单位转换:
\begin{itemize}
\item 热浪指数:日最高温度连续超过阈值(32℃/35℃)的天数
\item 昼夜温差:日最高温度与日最低温度之差
\item 连续高温天数:日最高温度超过35℃的连续天数
\item 湿热指数:结合温度和湿度计算的体感温度
\item 季节编码:月份的正弦/余弦编码
\item 滞后特征:前1天、前3天、前7天的温度值
\item 温度变量:K $\rightarrow$ °C$T_C = T_K - 273.15$
\item 降水量:m $\rightarrow$ mm$\times 1000$),ERA5降水变量存储的是日均累积值
\item 列重命名:t2m→temp\_mean, d2m→dewpoint\_mean, sp→pressure\_mean, u10→u\_wind, v10→v\_wind, tp→precip
\end{itemize}
\section{数据集构建}
单个城市日聚合后生成约5,479条日记录(15年×365天,扣除闰年差异和非完整日)。
\subsection{样本构造}
\subsection{步骤3:相对湿度计算}
采用滑动窗口方法构造监督学习样本。以历史N天的气象特征序列为输入,以未来T天的健康风险等级为目标变量。分别构建短期(输入7天,输出1-3天)、中期(输入30天,输出7天)和长期(输入90天,输出30天)三个时间尺度的数据集
利用Magnus公式从气温和露点温度计算相对湿度(详见第2.4.1节式2.17-2.19)。湿度值是体感温度计算的关键输入,也是独立的气候特征
\subsection{训练集与测试集划分}
\subsection{步骤4:体感温度计算}
采用时间序列划分方法,使用2010-2019年数据作为训练集,2020-2022年数据作为验证集,2023-2024年数据作为测试集,以模拟真实预测场景
利用NOAA Rothfusz公式计算每日体感温度(Heat Index,详见第2.4.2节式2.20-2.24)。体感温度融合了气温和湿度的联合效应,是高温健康风险评估的核心指标。当气温低于26.7°C时使用简化线性公式,高于此阈值时使用完整Rothfusz回归,并进行NOAA标准湿度修正
\subsection{数据归一化}
\subsection{步骤5:特征工程}
对所有数值型特征采用Z-score标准化(均值为0,标准差为1),标准化参数基于训练集计算并应用于验证集和测试集。
在6个基础气象变量+相对湿度+体感温度共8个直接变量的基础上,构建以下衍生特征(共19维):
\begin{table}[H]
\centering
\caption{特征工程构建的衍生特征(共19维)}
\begin{tabular}{cll}
\toprule
\textbf{序号} & \textbf{特征名} & \textbf{说明} \\
\midrule
1-2 & latitude, longitude & 网格中心经纬度 \\
3 & temp\_mean & 日均气温(°C \\
4 & dewpoint\_mean & 日均露点温度(°C \\
5 & pressure\_mean & 日均地表气压(hPa \\
6 & u\_wind & 10m风速U分量 \\
7 & v\_wind & 10m风速V分量 \\
8 & precip & 日均降水量(mm \\
9 & rh & 日均相对湿度(\%),Magnus公式 \\
10 & heat\_index & 体感温度(°C),NOAA公式 \\
11 & temp\_7d\_avg & 7天滚动平均气温 \\
12 & temp\_14d\_avg & 14天滚动平均气温 \\
13 & temp\_lag\_0 & 当前温度(同temp\_mean \\
14 & temp\_lag\_1 & 前1天温度滞后 \\
15 & temp\_lag\_3 & 前3天温度滞后 \\
16 & temp\_lag\_7 & 前7天温度滞后 \\
17 & heatwave & 热浪标识(≥3天HI>32°C \\
18 & heatwave\_strength & 热浪强度(连续高温天数) \\
\bottomrule
\end{tabular}
\end{table}
滞后特征用于捕捉温度的短期自回归效应——今天的风险不仅取决于今天的温度,还受前期热量累积的影响。热浪标识和强度特征则捕捉持续性高温事件的叠加效应。
\subsection{步骤6:风险标签计算}
基于日均体感温度(Heat Index),按照第2.4.3节定义的阈值将每条日记录标注为0-3级风险标签。对于多时间尺度预测任务,标签为未来窗口内的众数风险等级(多数投票法)。
\subsection{步骤7:滑动窗口序列构建}
采用长度为14天的滑动窗口,从日特征数据中生成监督学习样本:
\begin{itemize}
\item \textbf{输入X}:连续14天×19特征的矩阵,形状为(14, 19)
\item \textbf{输出y}:三元组(短期标签, 中期标签, 长期标签),分别对应未来3天、7天和30天的众数风险等级
\end{itemize}
滑动窗口从第14天开始滑动至倒数第30天(为长期预测保留足够的未来标签),单个城市约生成547,879条样本。
\subsection{步骤8:数据集保存与合并}
将每个城市的序列数据保存为压缩NPZ格式,同时生成合并数据集:
\begin{table}[H]
\centering
\caption{预处理产出文件}
\begin{tabular}{lcc}
\toprule
\textbf{文件} & \textbf{样本数} & \textbf{说明} \\
\midrule
jiaozuo\_sequences.npz & 547,879 & 焦作市序列数据,X(14,19), y(3,) \\
zhengzhou\_sequences.npz & 547,879 & 郑州市序列数据,X(14,19), y(3,) \\
sequences\_combined.npz & 1,095,758 & 两市合并序列数据 \\
features\_jiaozuo.csv & 547,893 & 焦作日特征CSV \\
features\_zhengzhou.csv & 547,893 & 郑州日特征CSV \\
features\_combined.csv & 1,095,786 & 两市合并日特征CSV \\
\bottomrule
\end{tabular}
\end{table}
\section{类别分布与数据不平衡}
预处理后的风险标签分布呈现极度的类别不平衡:
\begin{table}[H]
\centering
\caption{训练集风险等级分布(基于y\_short标签)}
\begin{tabular}{lccc}
\toprule
\textbf{风险等级} & \textbf{焦作市} & \textbf{郑州市} & \textbf{占比} \\
\midrule
0级(低风险) & 529,142 (96.6\%) & 515,007 (94.0\%) & 约94-97\% \\
1级(中风险) & 10,437 (1.9\%) & 17,118 (3.1\%) & 约2-3\% \\
2级(高风险) & 5,921 (1.1\%) & 11,098 (2.0\%) & 约1-2\% \\
3级(严重风险)& 2,379 (0.4\%) & 4,656 (0.9\%) & <1\% \\
\bottomrule
\end{tabular}
\end{table}
这一极度不平衡(多数类比少数类多两个数量级以上)是机器学习建模面临的核心挑战,直接影响了后续损失函数的选择(Focal Loss vs Cross-Entropy)和模型训练的收敛行为。
\section{数据集划分}
采用严格的时间序列划分(不打乱样本),以模拟真实预测场景「用历史数据训练、预测未来」:
\begin{itemize}
\item \textbf{训练集:}70\%(约767,030条),对应2010年至约2020年中期
\item \textbf{验证集:}15\%(约164,363条),对应约2020年中期至2022年中期
\item \textbf{测试集:}15\%(约164,365条),对应约2022年中期至2024年12月
\end{itemize}
时间序列划分确保测试集中的数据在时间上完全晚于训练集,避免数据泄露(Data Leakage)。所有标准化参数(均值、标准差)仅基于训练集计算,然后应用于验证集和测试集。