Files
elderly-heat-warning/thesis/chapters/ch3-data.tex
T

171 lines
8.4 KiB
TeX
Raw 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.
\chapter{数据获取与预处理}
本章详细描述从原始ERA5-Land再分析数据到机器学习就绪数据集的全流程管线,包括数据获取、质量控制、体感温度计算、特征工程和序列化构建。
\section{研究区域与数据时空范围}
本研究选取焦作市(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)生产的全球陆地表面再分析数据集,是ERA5的增强版本,在陆地变量上具有更高的空间分辨率(0.1° vs 0.25°)。数据通过Copernicus Climate Data Store (CDS) API获取,使用cdsapi Python库(v0.7.7)逐月下载。
本研究获取以下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年)以及河南省统计年鉴,包括分年龄段人口结构(0-14岁、15-64岁、65岁及以上)、老龄化率等基础指标。暴露-反应关系参考Chen等(2018)发表的中国多城市温度-死亡关联曲线,构建了13点暴露-反应映射表(温度-相对风险)。
\section{数据预处理管线}
预处理管线包含8个顺序步骤,由Python脚本\texttt{src/data/preprocess.py}实现,自动遍历焦作和郑州两个城市。
\subsection{步骤1:多文件加载与拼接}
使用xarray的\texttt{open\_mfdataset}函数,以\texttt{by\_coords}模式沿valid\_time维度拼接同城市的所有月度NetCDF文件。拼接后按时间排序并去重,确保时间轴的连续性和单调性。
\subsection{步骤2:日聚合与单位转换}
将6小时间隔数据按valid\_time重采样为日平均值,并执行单位转换:
\begin{itemize}
\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}
单个城市日聚合后生成约5,479条日记录(15年×365天,扣除闰年差异和非完整日)。
\subsection{步骤3:相对湿度计算}
利用Magnus公式从气温和露点温度计算相对湿度(详见第2.4.1节式2.17-2.19)。湿度值是体感温度计算的关键输入,也是独立的气候特征。
\subsection{步骤4:体感温度计算}
利用NOAA Rothfusz公式计算每日体感温度(Heat Index,详见第2.4.2节式2.20-2.24)。体感温度融合了气温和湿度的联合效应,是高温健康风险评估的核心指标。当气温低于26.7°C时使用简化线性公式,高于此阈值时使用完整Rothfusz回归,并进行NOAA标准湿度修正。
\subsection{步骤5:特征工程}
在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)。所有标准化参数(均值、标准差)仅基于训练集计算,然后应用于验证集和测试集。