ERA5 单层再分析 — 同一张天气图,前四十年只是回推

1940 年起逐小时、0.25°、262 个变量、87 年连续的气象骨架

来源 Copernicus Climate Data Store(CDS)— ECMWF url: https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels发布时间: 2026-10-29最后更新: 2026-10-29 阅读 8
ERA5 单层再分析 — 同一张天气图,前四十年只是回推

信息速览

数据集名称ERA5 单层再分析 — 同一张天气图,前四十年只是回推
数据类型1940–今日逐小时,0.25° 全球格点,262 个变量名,10 成员集合,ERA5T 5 天延迟,CC BY 4.0
规模不适用(全球气象格点场,无个体记录;空间单位为经纬度格心,时间单位为小时)
接入方式Copernicus Climate Data Store(CDS)— ECMWF url: https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels
AI 就绪度

ERA5 是当今气象机器学习用得最多的一张「背景底图」:任何一个想知道某地某小时风多大、雨多少、云多厚的项目,几乎都会先从这里拉一份。它的分量不在精度,而在于把 1940 年以来的大气状态做成了全球、逐小时、口径一致的一套场。

真正让它在 AI 圈立住脚的是另一点:它同时是「预报模型的输入」和「预报模型的答案」。训练一个数据驱动的天气模型,输入的历史天气与要预测的未来天气都来自同一套同化系统,这是它被大规模使用的原因,也是大量论文结果无法外推的原因。

这份条目只讲单层产品——近地面、海面、陆面那些量,不包括气压层上的高空场。一屏速览见下表。

项目 数值 来源
官方全名 ERA5 hourly data on single levels from 1940 to present CDS 数据集页标题
制作方 ECMWF,为 Copernicus C3S 制作,经 CDS 分发 目录 API providers / keywords
时间覆盖 1940 年至昨日,逐小时 数据集页 Data description
时间起点 1940-01-01 目录 extent.temporal
再分析分辨率 0.25°×0.25°(大气) 数据集页 Horizontal resolution
集合统计量分辨率 0.5°×0.5°(大气),海浪 1° 同上
海浪场分辨率 0.5°×0.5° 同上
变量名数(去重) 262 检索进程 inputs.variable 枚举
检索表单分组 15 组,含 Popular 汇总组 检索表单 JSON
交付格式 GRIB(主)、NetCDF(另选) 数据集页 File format / 表单
更新频率 每日,延迟约 5 天 数据集页概述
许可 CC BY 4.0 目录 API license 字段
DOI 10.24381/cds.adbb2d47 目录 API sci:doi
访问门槛 需 CDS 账号并接受条款 客观事实,页内外均可验证

§1 速览:它是什么,也不是什么

§1.1 一句话定义

ERA5 把全球的观测资料(地面站、探空、飞机、船舶、浮标、卫星辐射率……)和一套数值天气预报模式的短时预报,按「数据同化」的方式不断融合,得到一份覆盖 1940 年至今、时间连续的全球大气状态记录。单层版本就是这份记录里贴近地面和海洋表面的那些量:2 米气温、10 米风、海平面气压、降水、云量、辐射收支、土壤温湿度、海浪要素。

它不是一份「观测数据集」。观测是离散的、有洞的、仪器换代过的;ERA5 是把这些观测塞进一个物理上自洽的四维场里,所以每一格每小时都有一个数——包括没有任何仪器观测过的地方。

§1.2 为什么它不是「又一个气象 CSV」

第一层原因是同化这个词的分量。ERA5 的每一个格点值都不是直接从仪器读数来的,而是「模式背景场 + 观测」解出来的分析场。官方在概述里把机制讲得很清楚:每 12 小时,把上一次预报和新到的观测按最优方式结合,得到新的最好估计,再从它发出新的预报;再分析把同一流程用在过去,但降低分辨率以覆盖几十年。

第二层原因是它被同时当作题目和答案。做逐小时的气象要素预测,输入的历史场与未来的验证场往往都来自 ERA5。这一点在 §4 里会展开,因为它是这份数据在 AI 使用中最常见的隐性缺陷。

第三层原因是分层。同一套 ERA5 在 CDS 上拆成了多个集合:高压层与单层、逐小时与月平均、原生分辨率与降采样版。单层只是其中一个格子。搞混了这几个集合,是会白白耗掉几天时间的。

§1.3 三十秒决策卡:你的处境,它能帮你什么

你的处境 它能帮你什么
要训练一个数据驱动的天气预报/临近预报模型 1940 年至今逐小时、全球一致的场,输入与验证都可取自同一套,缺失少、时间轴连续
要给其它数据(地面站、遥感瓦片、健康统计)配一份环境协变量 2 米气温、10 米风、降水、湿度、辐射都在同一时空网格上,按经纬度与时刻直接连接
要做风能、光伏的资源评估或功率预测 100 米风、地面短波辐射、云量、2 米气温都在单层产品里,且历史跨度长
要分析长期气候趋势 能用,但必须说清楚前四十年与后段的性质差别,见 §4 与 §7
要做海洋工程或波浪的后报 有效波高、平均波向、平均波周期都在单层产品里,分辨率比大气粗一档
要研究局部尺度(城市街区、山谷)的天气 给不了,0.25° 在赤道约 28 公里,见下一节

§1.4 不适合谁

如果需求是局地尺度的天气,ERA5 的 0.25° 网格在赤道附近约 28 公里一格,在 40°N 约 21 公里。城市热岛、山谷风、单条山谷的降水落区,这些尺度它分辨不出来。局地研究要用区域再分析、降尺度产品或高分辨率数值模拟,ERA5 更适合做边界条件。

如果需求是某一测站的仪器读数,ERA5 也不能替代。它是格点上的模式分析场,格心值与测站读数之间存在代表性误差,海拔、地表类型、下垫面差异都会造成偏差。要真值,要去找站点观测数据集。

如果需求是原生分辨率的完整 ERA5,单层集合给不了。CDS 页面明确写着这里是「regridded subset」,即降采样重网格后的子集;原生分辨率需要在别处按另一套流程取用,且门槛与流程都不同。

如果需求是未来预报,它更给不了。ERA5 是历史再分析,最新的数据也滞后约 5 天,它是「昨日的天气是什么」,不是「明天的天气会怎样」。

§2 数据构成:四个维度、262 个名字与一张约束表

§2.1 全量规模:哪些数字是官方的,哪些是数出来的

先把口径摆清楚。数据集页上的官方数字只有一组:1940 年至今、逐小时、全球、再分析 0.25°、集合统计量 0.5°、海浪 0.5°、格式 GRIB、日更。

其余数字来自机器可读的元数据,属于「从接口读出来的确定值」,不是估算。

维度 数值 出处在哪 性质
时间起点 1940-01-01 目录 extent.temporal 官方
目录中时间终点 2026-10-23 目录 extent.temporal 官方(随更新滚动)
年份可选数 87 检索表单 year 枚举,1940–2026 接口
每小时可选时次 24 检索表单 time 枚举 官方
再分析纬度格数 721 由 0.25° 与 -90 至 90 的官方描述推得 推算,非官方表述
再分析经度格数 1440 同上,0 至 359.75 推算,非官方表述
变量名(去重) 262 检索进程 inputs.variable 枚举 接口
检索表单分组数 15 检索表单 JSON(含 Popular 组) 接口
各分组合计(含重复) 279 同上 接口
空间包络 经 0–360,纬 -89–89 目录 extent.spatial.bbox 官方
集合成员数 10 数据集页概述「10-member ensemble」 官方
集合抽样间隔 3 小时 同上 官方
更新延迟 约 5 天 同上 官方
早期版修订窗 2–3 个月 同上(ERA5T 段) 官方

经度方向 360 度除以 0.25 得 1440,纬度方向 180 度除以 0.25 得 720 个区间、721 个格心——因为两端都算。表格里标注了「推算」,因为这组数字官方没有写在页面上,是拿来理解数据形状用的,不是引用来源。

§2.2 十五个分组:表单怎么组织变量

打开 CDS 的检索表单,变量被折叠成十五组。这不是科学分类,是表单可用性设计——把常用的放一组、把同类的放在一起。但它很能反映使用者的实际取用习惯。

分组 变量数 里面有什么(举例)
Popular(热门汇总) 11 2 米气温、10 米风 u/v、海平面气压、总降水、海表温度、有效波高、平均波向、平均波周期、露点、地面气压
Temperature and pressure 12 2 米气温、2 米露点、海平面气压、地面气压、边界层高度、对流有效位能等
Wind 8 10 米与 100 米风分量、中性风分量、垂直速度等
Mean rates 39 各类通量的平均速率,量最大的一组
Radiation and heat 24 地面净短波/长波辐射、向下辐射、感热与潜热通量
Clouds 13 低云量、中云量、高云量、总云量、云底高度
Lakes 9 湖面温度、湖底温度、湖冰厚度、混合层深度与温度
Evaporation and runoff 5 蒸发、径流相关量
Precipitation and rain 11 总降水、大尺度降水、对流降水、各类型降水率
Snow 12 雪深、雪密度、雪反照率、各类型降雪
Soil 9 四层土壤温度、四层土壤湿度、土壤类型
Vertical integrals 37 各类垂直积分量
Vegetation 6 低/高植被覆盖、叶面积指数
Ocean waves 43 有效波高、总涌浪、风浪、波谱各阶矩、Stokes 漂移
Other 40 反照率、地形统计量、拖曳系数等

「Popular」组是把其它十四组里最常用的十一个变量提出来做快捷入口,所以它和其他组有重叠。262 是去掉这层重复后的真实变量名数量。

§2.3 一个真实的坑:同一个短名在两个组里

表单里变量用短名表示,比如 2m_temperature。短名全局唯一,这没问题。真正会卡住人的是长名与短名的对应。

文档里提到过一次改名:海浪产品的「10 米风」被改成了 ocean_surface_stress_equivalent_10m_neutral_wind_speed 这类长名,原因是海浪产品与大气产品的风变量发生了参数名冲突。旧代码里如果按数值参数号(param ID)取海浪风,改名后会取到大气风,数值看起来「差不多」,其实完全不是一回事。

这类事故的教训只有一条:变量按短名取,不按参数号取。短名在 CDS 的检索进程里有明确的枚举,是稳定契约。

§2.4 一条格点记录的逐项解剖

一条记录不是一个站点、不是一次过境,而是「某变量 × 某时刻 × 某经纬度格心」上的一个数。展开来看:

维度 取值形态 需要注意什么
valid_time 整点小时,如 2020-01-01 00:00 是分析场被定义的时刻,不是任何单一仪器的观测时间
latitude 0.25° 网格上的格心 指定 area 后网格会重切,格心列表随之变化
longitude 0.25° 网格上的格心 默认 0–359.75,指定 area 时按 -180–180 切
variable 262 个短名之一 同一时刻不同变量的物理语义不同,见 §4
number 0–9 只有 ensemble_members 有这一维
数值本身 定宽浮点 不同变量的量纲与累积语义不同,不能混算

这份解剖里最该记住的一点是最后一行:ERA5 不是一个「变量」表,而是一张「字段」表。同样叫「降水」,total_precipitation 是累积量,mean_total_precipitation_rate 是平均速率。单位差 3600 倍,直接换用会让模型学到完全错误的东西。

§2.5 与同类资源的定位差异

资源 覆盖时间 空间分辨率 时间分辨率 与 ERA5 单层的差别
ERA5 单层(本篇对象) 1940–今 0.25° 逐小时 长历史、多要素、全连续
ERA5 气压层 1940–今 0.25° 逐小时 高空场,不含近地面专用量
ERA5 原生分辨率 1940–今 更细 逐小时 需另走流程,数据量与门槛高
ERA5 月平均 1940–今 0.25° 月 预聚合,做长期统计更省事
格点化站点观测 视数据集而定 视数据集而定 逐日或小时 真值来源,但覆盖不连续

§3 定位层:先分清「哪个 ERA5」,再谈取数

§3.1 一个名字,五个集合

「ERA5」在 CDS 上不是一个条目,而是一个家族。仅同名相关的集合,目录里就有一长串:逐小时单层、逐小时气压层、月平均单层、月平均气压层、每日统计、时间序列、原生分辨率完整版、各类派生指数。它们的 ID 都长得很像,都叫 reanalysis-era5-*。

选错的代价不是「数据不对」,而是「维度和变量名对不上,白跑一遍」。气压层的变量名里带 level 这个维度,单层没有;月平均没有小时这一维。代码里写死一次,换集合就要改一次。

§3.2 「单层」到底指什么

单层不是指「只有一层」,而是指这些量不需要指定气压层。2 米气温指定的是离地 2 米这个高度,10 米风指定的是离地 10 米,海平面气压指定的是海平面。「单层」是个约定俗成的说法,意思是这一堆量的垂直坐标固定或本来就无垂直坐标。

对应的气压层产品才是「要指定层」的:500 hPa 的温度、850 hPa 的风。所以真正的区分轴不是「层数多少」,而是「取数时要不要填 level」。

§3.3 名字、序号与唯一指认

要在一篇论文或一个仓库里指明「我用的是哪份 ERA5」,最稳的写法是:

  1. 集合 ID:reanalysis-era5-single-levels
  2. 检索进程版本:当前 1.0.0
  3. 检索时间戳:你实际发起任务的时间
  4. DOI:10.24381/cds.adbb2d47

只写「ERA5」是不够的,因为至少能指到五个不同的东西;只写「ERA5 逐小时」也不够,因为分不出单层与气压层。四件套齐全,别人才复现得了。

§3.4 版本与时间的错位

ERA5 的「版本」在这里有自己的含义。它不像软件那样有 1.0、1.1,也不像传统数据集那样按年份冻结一个快照。它的更新方式是滚动向前 + 回溯重算:最新的几天先以 ERA5T(早期版)发布,2–3 个月后若发现严重缺陷,会被终版替换。

这意味着同一个 URL、同一个集合 ID、同样的参数,两个月后再跑一次,拿到的文件可能不一样。这不是 bug,是设计。对策写在 §5 的复现性一节。

§3.5 什么时候该用气压层,什么时候该用单层

判断规则只有一条:要的量有没有垂直位置上的特定含义。

气温在 2 米处是单层(2m_temperature),在 500 hPa 上是气压层。风速在 10 米是单层,在 850 hPa 是气压层。海平面气压、降水、云量、辐射、土壤、海浪,这些都在单层产品里,因为它们的定义里不含「某一气压层」这个坐标。

反过来,任何需要指定层的量——温度、位势、湿度、风在某一气压面上的值——都只能去气压层产品。两者不能混,因为变量名与维度都不一样:气压层产品多一个 pressure_level 维,单层没有。

实际项目里常见的做法是两者混用:近地面的量取单层,高空环流取气压层。这时候必须把两个集合的取数记录分开存,因为它们的 DOI 与集合 ID 不同,写论文时是两个不同的数据来源。

§3.6 降采样意味着什么

CDS 页面有一句很短的说明:这里托管的是「regridded subset of the full ERA5 data set on native resolution」。这句话的分量比它看起来大。

原生分辨率的 ERA5 由 IFS 模式计算,水平格距比 0.25° 更细。CDS 提供的单层集合是把它重网格到规则经纬网、并把输出精度降低之后的版本。所以 0.25° 不是 ERA5 的物理分辨率,而是分发分辨率。

两者的差别在小尺度上最明显。模式原生网格上的细节,在从更细的格网插值到 0.25° 的过程中被平滑掉了。高频的信息(小尺度的梯度、锋面的锐利程度、局地环流)在分发版里会被削弱,低频信息(大尺度环流、季节循环、多年趋势)几乎无损。

对绝大多数机器学习任务,这个损失可以接受,因为模型本身也工作在 0.25° 或更粗的尺度上。对要用 ERA5 做降尺度研究的项目,这里是关键——他们需要原生分辨率作为训练目标,那就得走另一条取数路径。

这也解释了为什么相同的「ERA5」在不同论文里表现不一样:有的用原生分辨率,有的用 CDS 分发版,两者不是同一份东西,指标不可直接比较。

§4 质量层:这份数据最容易被误用的四个地方

§4.1 1940 到 1978:为什么官方愿意往回推四十年

ERA5 最初的正式覆盖从 1979 年开始,那是业务气象卫星时代真正的起点。往回推到 1940 是后来做的扩展,官方文档把它当作 ERA5 的一部分在维护,但性质上有明确区别。

道理不复杂:数据同化需要观测。1979 年后,极轨与静止卫星提供的辐射率、云导风、温湿廓线把观测覆盖到了全球海洋与高空;1979 年前,观测主要来自地面站、探空、船舶与飞机,海洋上空大片空白。同化系统在这些空白区只能更多依赖模式自己的短时预报,也就是背景场。

结果是:1940–1978 段的 ERA5 更「像模式」,1979 年后更「像观测」。两者都是 ERA5,但同质性不一样。

对做长期趋势的人,这不是可以忽略的细节。任何跨过 1979 的趋势、方差变化、极端事件频率统计,都要面对「观测系统在同一时间轴上换了一次代」这个事实。§7 会把这条单独列成局限。

§4.2 贯穿案例:某省级风电场出力回溯项目(本案例)

后面几节会反复回到同一个场景,这里先把它的来龙去脉交代清楚。

某省发展改革部门要做一份 1985 年至今的风电资源与出力回溯,用于新场址选址与既有场址的寿命评估。该项目组手上的历史资料只有两样:一座 2010 年建成的测风塔,一套 2015 年上线的场级出力计量。前者给出 70 米高度的逐十分钟风速与风向,后者给出全场每十五分钟的平均有功出力。1985 到 2010 年之间,既有场址的出力没有任何计量,新场址更是一片空白。

该项目组想用 ERA5 单层产品补上这段空白,具体是三步:第一步,用格点的 100 米风与 2 米气温补出 1985–2010 年的资源序列;第二步,用 2010 年后的塔测数据与同期的格点数据做一次统计校准,得到一个从格点到塔测的映射;第三步,把这个映射沿用到 1985–2010,再把校准后的风速通过功率曲线转成出力估计。

这个方案在思路上无可挑剔,在执行上会依次撞上四条坑。四条坑分别对应本节接下来的四小节:第一条是「要的量到底是什么」,第二条是「变量在时间上怎么定义」,第三条是「不确定度能不能借用」,第四条是「观测系统的变化怎么处理」。每一小节写完后都会回到这个项目,说明他们当时怎么撞上、怎么绕开。

第一条坑,也是最先撞上的:他们要的 100 米风速在 ERA5 里究竟属于什么性质的量。单层产品确实有 100m_u_component_of_wind 与 100m_v_component_of_wind,取数时填上就能拿到。但这两个量不是被直接同化进分析场的观测,而是从模式垂直廓线在 100 米处插值得到的三维风诊断量。同化系统直接约束的是模式的动量场与近地层参数化,100 米处的风是这套约束下游的产物。

这个区别在平坦地区不显眼,在复杂地形上会被放大。风电场轮毂高度普遍在 80 到 120 米之间,而 0.25° 格距在 40°N 附近约 21 公里,一个格子内部可能跨越两个山脊与一条河谷。格点上的 100 米风是对这整块地形的平均,测风塔测的是塔位那一点的风,两者在风向相同时可能相差两三成,在背风坡上甚至可以差一个量级。

该项目组最初的判断是「先把 100 米风拉下来,误差以后再修」,于是有了后面的校准步骤。这个顺序在工程上没问题,但它埋下了一个必须交代清楚的前提:校准函数是在一种地形条件下学到的,沿用到 1985 年时假设了地形与地表粗糙度没变。实际上那二十多年里,周边有过一轮林地恢复,粗糙度是变的。这个前提后来被写进了报告的风险章节。

§4.3 变量语义:瞬时、累积、平均,三套规则

单层产品里 262 个变量,按时间语义至少分三类。

类型 短名举例 语义 使用忌讳
瞬时量 2m_temperature、mean_sea_level_pressure 该时刻的分析值 一般可以直接用;但求日均时要考虑时区与日内变化
累积量 total_precipitation、各类积雪 自上一次后处理以来的累积 跨时刻相邻相减;绝对不能直接相加得到日总量以外的量
平均速率 mean_total_precipitation_rate 单位时间平均通量 与累积量相差一个时间因子,混用即错

最容易出事的组合是降水。有人拿 total_precipitation 做日总量,做法是把 24 个小时的值相加;也有人拿它做小时强度,做法是把某个小时的值直接当 mm/h。第二种做法错了 24 倍——那个值本身是「过去一小时累积」,不是速率。

§4.2 的案例里也有同类问题。辐射类变量里既有「累积的太阳辐射」,也有「平均的通量」,光伏出力建模如果把两者混着喂进模型,训练会收敛到一个奇怪的平均值上。

§4.4 降水与云量:格点上的平滑不是噪声

把 ERA5 的单格降水序列画出来,会看到它比站点观测「软」得多。真实降水的空间分布是斑块状的,ERA5 的 0.25° 场已经是对一个约几百平方公里格子的平均,极端值被摊薄,小雨被抹平。

这不是质量问题,是分辨率与目的决定的现象。它用来做气候统计、做区域水资源评估都合适;用来做「某个村今天有没有下雨」就不合适。同一条逻辑适用于云量(低/中/高云都在十余个变量里)、土壤湿度(四层土壤温度和湿度各有其代表深度)、积雪(雪深与雪密度是两回事)。

为什么会软,可以从三个层次理解,每一层都对应一个具体的使用后果。

第一层是格子的物理尺寸。一个 0.25° 的格子在中纬度大约二三十公里见方,面积在几百到一千平方公里。真实的对流性降水常常只落在一个格子的几分之一里,格内的平均必然把强的摊弱、把弱的抹平。所以单格降水的年最大值会系统性地低于格内某个测站的最大值,这与数据集好坏无关,是平均这个动作本身的性质。

第二层是参数化。模式里的降水不是解出来的,是参数化的产物:云微物理方案决定什么时候开始降水、降多少,对流参数化决定积云如何组织。参数化的目标是统计意义上的正确,不是单次事件的正确。ERA5 用的一套参数化在大尺度上校准得很好,在单个对流单体上就未必。

第三层是时间维度。逐小时的降水值本身是一个小时内的累积,而这个小时里模式输出的是多个时间步的累积量。时间上也有一个粗化。

三层叠起来,能得到一个有用的判断规则:用 ERA5 的降水做「区域和超过若干天」的统计是可靠的,做「单个格点单次极端事件」的判断是不可靠的。 前者对平滑不敏感,后者对平滑极度敏感。

§4.2 的案例里没有直接用到降水,但该项目组做的是一个类似的判断。他们要的是「年度平均风速」与「不同风向的频率分布」,两者都是长时段统计量,对逐小时的偏差不敏感。如果他们要做的是「某一天的极端阵风」,那么即使有塔测校准,ERA5 的 100 米风也不够用——它的时间分辨率是逐小时,极端阵风的时间尺度是分钟级。

§4.2 的案例里第三个撞点在这里:他们想用 ERA5 的 100 米风与 2 米气温推断机组效率,气温是好的,风在复杂地形上偏差大。该项目组最后的做法是用 2010 年后的塔测数据做一次逐小时的分位数映射,把 ERA5 的风速分布「扭」到塔测分布上,再把这个映射沿用到 1985–2010。这是个合理做法,但要写清楚:校准函数是在 2010 年后的观测系统下学到的,向前外推时假设了地形与地表没变。

§4.5 集合产品:不确定度不是误差条

ERA5 有 10 个成员的集合,3 小时间隔,大气 0.5°。官方另给了集合均值与离散度,方便直接用。

要理解它是什么:集合不是「10 次独立观测」,是 10 个扰动初值与模式参数下的 10 次同化/预报轨迹。离散度反映的是流依赖的不确定性——敏感的区域、敏感的时段,离散度大;资料多、形势稳定的地方,离散度小。

它不能当作「每个格点每小时的误差估计」。原因有二:其一,集合只有 3 小时间隔、0.5° 分辨率,和 0.25° 逐小时的分析场不在同一网格上,硬插值会引入额外偏差;其二,集合的构造目标是抽样不确定性,不是估计偏差。系统性偏差(比如山地气温偏高、海面风速偏大)不在离散度里体现。

§4.2 的案例里第四条坑正好落在这:该项目组想给回溯的风速序列配一条「不确定度带」,最初的方案是用集合离散度。试过一段就放弃了——离散度在平坦地区的量级与塔测误差相当,在山区只有塔测误差的一半,完全不匹配。最后的做法是分地形用塔测残差估不确定度,集合只用来做趋势稳定性检验。

§4.6 海浪场:分辨率差一档的另一套产品

Ocean waves 组有 43 个变量,是单层产品里第二大的组。它的再分析分辨率是 0.5°,集合统计量是 1°,都比大气粗一档。原因是海浪由谱波浪模式计算,分辨率受限于驱动风场与波谱离散。

做海洋工程、船舶航线、近岸波浪后报的任务会用这一组;做近岸极值统计时要特别注意 0.5° 的格子可能已经包含好几个水深带,近岸浅水效应它代表不了。

§4.7 观测系统的时变:一条贯穿 87 年的隐含协变量

把 §4.1 与 §4.5 放在一起看,有个更一般的结论:ERA5 的质量不是常数,是一条随时间变的曲线。1940–1978 靠常规观测,1979 年卫星加入,1990 年代后期资料同化技术迭代,2000 年代更多卫星仪器接入。

对机器学习的影响是具体的:如果训练集覆盖 87 年,模型会学到「1960 年的风场比 2010 年平滑」这种与真实气候无关的模式。做 87 年跨度建模时,年份本身就该作为协变量进模型,或者按观测系统时代分段建模。

§4.2 的案例里,1985–2010 段正好跨在这条曲线的上升期。该项目组最后在报告里加了一节「数据同质性说明」,明确 1985–2000 的资源统计与 2000 年后的不可直接比较。这一节后来成了评审最认可的部分。

§5 工具层:怎么取、怎么验、怎么复现

§5.1 三条获取路径

路径 门槛 适合 代价
CDS 网页表单 CDS 账号 + 接受条款 一次性小切片、探索 手工点击,不便于批量
CDS 检索 API(cdsapi) 同上,另需 API key 批量、可复现、进流水线 要写脚本,要处理排队
原生分辨率完整版 另有一套流程与门槛 需要原生分辨率的研究 数据量与门槛都高得多

对 95% 的使用者,第二条路径是对的。它的核心价值不在「能自动化」,而在于每一次取数都能被完整记录下来——参数、版本、时间戳,写进仓库就是一个可复现的档案。

在动手写第一行请求之前,有三个决定必须先定下来,因为它们决定了后面所有代码的形状。

第一,变量清单。 是从 262 个里挑出你要的五个十个,还是「先都拉下来再筛」。后者在小区域短时段可行,在长时段上是灾难性的——262 个变量全时段的请求规模会远超单请求上限。正确的做法是先列出研究问题需要哪几个物理量,再从表单里找到对应的短名,而不是在表单里逐个勾。

第二,时间与空间的范围与分块方式。 一个横跨四十年、覆盖半个中国的请求几乎一定超限。分块的两个轴是时间和空间,选哪个轴分,取决于下游怎么用:要做时间序列分析就按时间分块、每块覆盖全区域;要做空间场分析就按空间分块、每块覆盖全时段。混着分,最后拼起来的数组会很别扭。

第三,数据格式。 GRIB 与 NetCDF 的内容一样,只是编码不同。进 Python 生态选 NetCDF,它的坐标与维度名会被 xarray 直接识别;进业务系统或需要长期归档选 GRIB,它的自描述结构在几十年尺度上更稳。两者的体积与精度没有实质差别,不要为「哪个更小」纠结。

这三件事定下来之后,剩下的才是写请求参数。顺序反过来——先写请求、跑到一半发现范围不对——是这份数据上最常见的浪费。

§5.2 认证与环境准备

先在 CDS 网站注册账号,并在个人页找到 API key。把它写进 ~/.cdsapirc:

mkdir -p ~/.cdsapirc.d
cat > ~/.cdsapirc <<'EOF'
url: https://cds.climate.copernicus.eu/api
key: $CDSAPI_KEY
EOF
chmod 600 ~/.cdsapirc

把 key 放在环境变量里而不是明文写进文件,是为了这个文件可以安全地跟着 dotfiles 走。第二条路径的价值在于「能进版本控制」,而版本控制的前提是里面没有密钥。

§5.3 一次最小可运行的取数

import cdsapi

client = cdsapi.Client()

client.retrieve(
    "reanalysis-era5-single-levels",
    {
        "product_type": ["reanalysis"],
        "variable": [
            "2m_temperature",
            "10m_u_component_of_wind",
            "10m_v_component_of_wind",
        ],
        "year": ["2020"],
        "month": ["01"],
        "day": ["01"],
        "time": ["00:00", "06:00", "12:00", "18:00"],
        "data_format": "netcdf",
        "download_format": "unarchived",
        "area": [45, 110, 35, 125],
    },
    "era5_2020_sample.nc",
)

几处值得说明:

area 的顺序是 [北, 西, 南, 东],不是常见的 [南, 北, 西, 东]。写反了不会报错,会拿到一块别处的数据。上面这块是 35–45°N、110–125°E。

data_format 只有 grib 与 netcdf 两个合法值,download_format 只有 unarchived 与 zip。这两个参数容易搞混名字,因为它们是「数据格式」与「打包格式」两件事。

请求里没有 product_type: ensemble_members 就没有 number 维。需要成员时把它加上,返回的数组会多一维。

§5.4 先算体积,再提交

CDS 对每个请求算一个「cost」,单位是数据的规模。这个接口不需要提交任务,可以直接问:

curl -s -X POST \
  "https://cds.climate.copernicus.eu/api/retrieve/v1/processes/reanalysis-era5-single-levels/costing" \
  -H "Content-Type: application/json" \
  -d '{"inputs":{"product_type":["reanalysis"],"variable":["2m_temperature"],
       "year":["2020"],"month":["01"],"day":["01"],"time":["00:00"],
       "data_format":"grib"}}'

返回是 {"id":"size","cost":6.0,"limit":121000.0} 这样的结构。cost 随变量数、时刻数、区域面积线性增长,limit 是单请求上限。

先算再提交的习惯能省下大量时间:一个看起来不大的请求(比如十年的全球 100 米风)可能远超上限,提交后要等很久才发现被拒。

§5.5 读回来:维度顺序与坐标

import xarray as xr

ds = xr.open_dataset("era5_2020_sample.nc")
print(ds)
t2m = ds["t2m"] - 273.15          # K -> degC
print(t2m.dims)                    # ('valid_time', 'latitude', 'longitude')
print(float(t2m.min()), float(t2m.max()))

两件事要留意。第一,t2m 的单位是开尔文,温度类变量都要减 273.15 才是摄氏度;辐射、通量的单位各不相同,混算之前手边要有一张量纲表。第二,NetCDF 的维度名是 valid_time 而不是 time,坐标是 latitude/longitude 而不是 lat/lon——照抄旧代码会 KeyError。

§5.6 把请求固化成可复现的记录

import hashlib, json, datetime, pathlib

def request_fingerprint(params: dict, dataset_id: str = "reanalysis-era5-single-levels") -> str:
    payload = json.dumps(
        {"dataset": dataset_id, "params": params},
        sort_keys=True, ensure_ascii=False,
    ).encode("utf-8")
    return hashlib.sha256(payload).hexdigest()[:16]

params = {
    "product_type": ["reanalysis"],
    "variable": ["2m_temperature"],
    "year": ["2020"], "month": ["01"], "day": ["01"],
    "time": ["00:00"], "data_format": "grib",
}
fp = request_fingerprint(params)
meta = {
    "fingerprint": fp,
    "requested_at": datetime.datetime.now(datetime.timezone.utc).isoformat(),
    "process_version": "1.0.0",
    "doi": "10.24381/cds.adbb2d47",
}
pathlib.Path(f"provenance_{fp}.json").write_text(json.dumps(meta, indent=2))
print(meta)

指纹只覆盖请求参数,不覆盖结果——因为结果会变(§3.4)。所以这份记录要配合「下载后的文件校验和」一起存,两者都在,才能说明「我拿到的就是那一刻的那份」。

§5.7 用约束表预先排雷

官方发布了一份约束文件,按月份列出「哪些变量在某些年份不可取」。它不是缺失数据说明,是规则表。

import json, urllib.request

URL = ("https://object-store.os-api.cci2.ecmwf.int:443/cci2-prod-catalogue/"
       "resources/reanalysis-era5-single-levels/"
       "constraints_785675f80be9c05534592e509d626ced208877822d4b14144bcb46871fe7000c.json")

rules = json.load(urllib.request.urlopen(URL, timeout=120))
target_year, target_month, target_pt = "1940", "01", "ensemble_members"
hits = [
    r for r in rules
    if target_year in r["year"] and target_month in r["month"]
    and target_pt in r["product_type"]
]
blocked = set()
for r in hits:
    blocked.update(r["variable"])
print(len(rules), "条规则;该组合下不可取变量数:", len(blocked))

这段读出来的是规则本身,不是数据。它的用处是:在提交一个横跨几十年的批量请求之前,先把这个组合下不可取的变量剔掉,避免拿到一堆空文件之后才发现。

§5.8 一个常见故障:请求通过了,返回是空的

空结果几乎总有两个来源。

一是变量在该时段不存在。上例里 ensemble_members 在 1940 年 1 月只有 46 个变量可取,其余 200 多个都不提供。按变量名盲拉全时段,会得到「一部分年月有、一部分没有」的数组,下游统计会静默出错。

二是区域坐标写反。area 写成 [35, 110, 45, 125](南在前)时,CDS 会返回一块纬度范围为空或错位的区域,有时直接返回空文件。

两个故障都不报错。所以流程里必须有一个「拉回来之后检查形状」的步骤,而不是相信请求成功就等于数据在。

§5.9 §4.2 的案例在这一层的落地

回到 §4.2 的项目。他们最终的做法:

  1. 用约束表先筛一遍,确认 100 米风、2 米气温在 1985 年起的全时段都可取;
  2. 按省界外扩 2° 取 area,按月分块提交,每块单独记指纹;
  3. 拉回来先检查形状,再检查缺测比例;
  4. 用 2010 年后的塔测做分位数映射,把映射函数的训练时段与样本量写进报告;
  5. 用集合离散度只做趋势稳定性检验,不做误差条。

五步里有三步是为了对付「不报错的错」。这也是这份数据在工程上最需要纪律的地方。

§6 层与层之间:它在本库中的位置

§6.1 库内的地学家底

本库的地球观测与空间类条目目前不多,能直接与 ERA5 形成上下游关系的,主要是三类:卫星影像类(如 EuroSAT 的 Sentinel-2 瓦片)、环境监测类(如 AQS 的地面空气质量监测)、以及全球统计汇编类(如 GBD、世界银行的国别指标)。

ERA5 与它们的关系是「同一空间坐标,不同物理量」。它不替代任何一类,而是给它们配上一层大气状态。

§6.2 与 EuroSAT 的分工

EuroSAT 是 64×64 的 Sentinel-2 瓦片,带经纬度,任务是地表覆盖分类。ERA5 可以在两处与它配合:一是给瓦片配当日的温度、降水、云量做协变量;二是用云量字段反推「这张瓦片拍摄时云是不是很厚」,辅助质量筛查。

两边的分辨率差得远:10 米对 28 公里。这种配合只能做「大尺度背景」层面,不能做「逐瓦片修正」。

§6.3 与 AQS 的分工

AQS 是美国地面的空气质量站点监测,站点是点,时间是小时或日。ERA5 在这里扮演的是气象协变量:风速、风向、边界层高度、温度、湿度、降水,都是解释污染物浓度日变化与输送的标准输入。做 PM2.5 预测的模型,几乎都会把 ERA5 的几个量拼进特征表。

分工很清楚:AQS 提供「污染物浓度真值」,ERA5 提供「决定浓度分布的气象条件」。前者是点上的仪器读数,后者是格点的分析场。

§6.4 与全球统计汇编的分工

GBD、世界银行开放数据、Our World in Data 这类是国别或地区的年度统计。ERA5 与它们连接时,通常先把格点按人口或行政边界加权平均到国别月度,再与统计量做相关分析或作为回归的协变量。冬季低温相关的超额死亡、热浪与心血管事件、疟疾与降水的关系,都是这条路径上的标准问题。

§6.5 检索路径建议

按需求找条目:要气象场本身 → 本篇所述的单层集合;要卫星影像 → EuroSAT;要地面污染物 → AQS;要健康结局 → GBD 或 NHANES;要国别经济与社会指标 → 世界银行。要「气象 + 健康」的组合研究,从单层集合出发到 GBD,中间那层「格点聚合到行政单元」需要自己写。

§7 质量评估与局限:它不该按什么标准评价

§7.0 阅读本节前需要知道的一件事

用「观测数据集」的尺子去量 ERA5,会得出「全是模式输出、不是仪器读数、没有误差」的结论;用「AI 基准」的尺子去量它,会得出「没有标签、没有任务定义、没有排行榜」的结论。两种结论都对,但都没回答它为什么被大规模引用。

它被引用的原因在于一致性与连续性:同一套同化系统、同一套网格、同一种物理定律,贯穿 87 年。观测数据做不到这一点——仪器换了三代,站点搬了两次,海洋上空几十年没测过。对于任何想把「历史天气」当作输入或验证场的模型,连续性比单点精度重要得多。

所以评价它应该用的尺子是:作为一套跨时空一致的物理场,它的同质性与可追溯性做得怎么样。

§7.1 二种常见的评价框架错位

常见错位 表现 应该怎么想
拿站点观测的精度标准套它 抱怨某个站的气温与 ERA5 差 2 度 格点场与点观测本来就有代表性差异;该比的是偏差的统计量与时空结构
拿排行榜数据集的标准套它 抱怨没有训练/测试划分、没有指标 它是原料,不是考题;划分与指标由使用者按任务定义

§7.2 DAIMS 二十四项逐条对照

DAIMS(数据统计与元数据标准,Data Documentation Initiative 提出的数据质量评估框架)原本面向社会科学调查数据,这里借用它的二十四项检查点,把这份数据在元数据与可追溯性上的成熟度摊开来看。

# 检查项 状态 说明
1 宽格式 ⚠️ 网格场不是表格,需要先切片或降维才能宽表化
2 标准记录层级 ✅ 概念上边界清楚:变量 × 时刻 × 格点,无嵌套歧义
3 变量名与定义 ✅ 262 个短名有明确枚举,长名在文档中定义
4 变量与问题匹配 ✅ 气象要素与气候/环境问题高度匹配
5 分类与编码 ⚠️ 变量无统一分组编码,表单分组是界面设计不是分类体系
6 数据源 ✅ 同化系统、观测类型、模式版本均有文档
7 采集方式与工具 ✅ IFS 同化,方法学有同行评议论文
8 采集时间 ✅ 逐小时时间戳明确
9 代理变量 ✅ 不涉及
10 权重 ✅ 不涉及抽样权重
11 缺失值编码 ⚠️ 约束表标注「不可取」与「真缺测」不是一回事,需分别处理
12 数据质量声明 ⚠️ 有文档与论文,但无逐格点的质量标记字段
13 元数据完整性 ✅ 目录 API 提供 STAC 元数据、许可、包络、DOI
14 时间覆盖 ✅ 1940 至今,连续
15 空间覆盖 ✅ 全球,规则经纬网
16 地理参照 ✅ 固定 0.25° 网格,可定位
17 记录完整性 ⚠️ 同质性随时间变,非均匀
18 计数 ✅ 变量数、网格数、时间步数皆可精确计算
19 文件大小 ✅ 有 costing 接口可预估
20 数据存储 ✅ 长期存档于 CDS
21 数据处理 ✅ 有文档化的重网格与后处理
22 数据访问 ⚠️ 需账号与条款接受,不能匿名直下
23 许可与使用限制 ✅ CC BY 4.0,机器可读
24 引用与致谢 ✅ 有 DOI 与推荐引用格式

§7.3 逐条局限

同质性随时间变。 见 §4.1 与 §4.7。这是最根本的一条。

变量不是全时段齐备。 见 §5.7 与 §5.8。262 是并集计数。

近实时段不可复现。 ERA5T 会被终版替换。以它做的实验,两个月后重跑结果可能不同。

集合产品网格不同。 3 小时、0.5° 对 逐小时、0.25°。不能直接配对。

降采样不是原生。 单层集合是重网格子集,原生分辨率要在别处取。

降水与云在格点上被平滑。 极端值被摊薄,不能做局地尺度事件研究。

海浪分辨率粗一档。 近岸浅水效应代表不了。

不允许匿名访问。 需要账号与条款接受,这对「一键复现」的脚本设计有实际约束。

§7.4 该被追问什么、不该被追问什么

该追问的:同化系统的时变、变量的时段可用性、集合的构造目的、降采样带来的信息损失、ERA5T 的修订记录。

不该追问的:为什么没有标注、为什么没有划分、为什么单个格点与测站不完全一致。这三件事不在它的设计目标里。

§7.5 外部验证:怎么用别人的数据检验它

ERA5 的可信度不能靠自己内部一致来证明。有效的检验路径有三条,各自回答不同的问题。

检验路径 回答什么 需要的对照数据
对站点观测 格点值与仪器读数差多少、偏差的时空结构如何 地面气象站、探空、浮标
对独立再分析 不同同化系统是否给出相似的大尺度形势 其他机构的再分析产品
对遥感反演 特定变量(海表温度、雪深、植被指数)的外在一致性 卫星产品

三条路径里,第一条最直接。它的正确用法不是「逐点比误差然后报一个均方根」,而是分区域、分季节、分时段报偏差统计:山地和平原的偏差不一样,冬季和夏季不一样,卫星时代前后不一样。只报一个总体均方根,会把三种性质完全不同的偏差混成一个数。

§4.2 的案例用的正是第一条路径的简化版。该项目组手上有 2010 年后的塔测,他们把 ERA5 的 100 米风与塔测 70 米风按风廓线换算到同一高度,做了逐小时与逐月的偏差统计,发现山区夏季的偏差明显大于冬季,白天大于夜间。这个发现直接导致了「分季节、分时段校准」的方案,比单一的全年平均校准好了不少。

第二条路径对做机器学习的人尤其值得用。如果两个独立同化系统在某地给出差异很大的风场,那么基于 ERA5 训练的模型在该地的预测可信度就值得怀疑——这是数据层的不确定,模型改不了。

第三条路径只在特定变量上有意义。海表温度、雪覆盖、植被这类逐日轨道可见的产品可以对得上,2 米气温对不上(卫星反演的是晴空条件下的地表温度,与 2 米气温是两个量)。

§8 生态与版本:它为什么还能被用下去

§8.1 版本时间线

时间 事件
1979 年 ERA5 正式覆盖的起点(业务气象卫星时代)
后续年份 往回扩展到 1940 年
2018-06-14 CDS 上该集合首次发布
持续 每日更新,延迟约 5 天,ERA5T 先行
持续 2–3 个月窗口内可能被终版替换

§8.2 它在生态中的位置

ERA5 在当代地球科学里的地位可以这样描述:它是「历史大气状态」的公共默认值。想描述过去某时某地的天气,最省事的做法就是查 ERA5。

这一定位带来两个后果。向上游,它依赖全球观测系统的持续运行——各国的地面站、探空站、卫星。向下游,它喂养了整个数据驱动天气预报的方向:从四维变分强约束方法到自回归式的时空模型,训练数据大多是 ERA5。

§8.3 谁在依赖它

依赖方 用途
数据驱动天气模型研究 训练与验证的通用语料
可再生能源资源评估 风、光的长历史序列
农业与水文 降水、土壤湿度、蒸散
空气污染与健康研究 气象协变量、温度相关死亡
海洋与海岸工程 波浪、风应力的后报
卫星遥感 大气校正与几何定标的外部参数

§4.2 的案例在表里的位置是第二行。它的整个回溯链条建立在这一行的稳定性上,所以它必须在报告里说明用的是哪个版本的 ERA5、何时取的数。

§8.4 它为什么能持续

三个原因叠在一起。

第一是机构承载。它由 ECMWF 制作、由欧盟哥白尼计划资助、由 CDS 分发。这套组合给了它几十年级别的资金与人力承诺,不是某个课题组的一次性产出。

第二是重算机制。ERA5 不是冻结的快照,而是可以被回溯重算的轨迹。观测资料集改进、同化系统升级,都可以重跑历史段。这保证了它不会因为早期的错误而逐渐过时。

第三是网络效应。下游的模型、论文、工具链都建在它上面。换成别的再分析,上游的数据接口、变量名、评估协议都得改。切换成本本身成了黏性。

§8.5 引用与许可

许可的事实很明确:CDS 的 STAC 目录接口对 reanalysis-era5-single-levels 的 license 字段回传 CC-BY-4.0,同一条目还挂了指向 SPDX 的 license 链接。

使用上要注意三件事。第一,CC BY 4.0 要求署名,署名方式按 Copernicus 的约定写(数据来源 C3S、生产方 ECMWF)。第二,账号与条款接受是访问环节的要求,与许可条款是两件事,不能因为许可开放就跳过。第三,论文里的推荐引用是那篇 Quarterly Journal of the Royal Meteorological Society 长文,加上数据 DOI,两者都给。

§9 使用指引:三条路径,一份最小实现

§9.1 三种角色,三条路

你的角色 建议路径 关键动作
想给现有数据配环境协变量 表单取少量变量 + 区域裁剪 先确定要哪几个量、要哪个时段、格点与目标数据怎么连接
想训练时空预测模型 按约束表筛变量 + 按月分块 + 记录指纹 先定验证协议,再定取数范围;同质性分段交代
想做长期气候分析 月平均集合更省事 + 分段统计 1978/1979 两侧分开统计,趋势与方差不混算

§9.2 在 AI 流水线中的位置

用一句话说:ERA5 在流水线里多数时候是输入,少数时候是输出。

当输入用时,它是空间上规则的图块序列(时间 × 纬度 × 经度 × 变量),进卷积或图网络之前要做的选择是:变量选哪几个、归一化怎么做、缺测怎么填、时间窗多长。

当输出用时(训练预测模型),它是标签的一部分,这时最要紧的是验证划分。按时间切分是底线——把 2020 年的样本随机混进训练集,模型会学到「未来的气候背景」。

§9.3 一份最小可跑的实现

import cdsapi, xarray as xr, numpy as np

c = cdsapi.Client()
c.retrieve(
    "reanalysis-era5-single-levels",
    {
        "product_type": ["reanalysis"],
        "variable": ["2m_temperature", "total_precipitation"],
        "year": ["2019"], "month": ["01", "02"], "day": list(range(1, 29)),
        "time": [f"{h:02d}:00" for h in range(24)],
        "data_format": "netcdf", "download_format": "unarchived",
        "area": [42, 112, 36, 122],
    },
    "era5_2019jf.nc",
)

ds = xr.open_dataset("era5_2019jf.nc").load()
t2m = ds["t2m"] - 273.15
tp = ds["tp"] * 1000.0

daily_t = t2m.resample(valid_time="1D").mean()
daily_p = tp.resample(valid_time="1D").sum()

arr = np.stack([daily_t.values, daily_p.values], axis=-1)
print(arr.shape)             # (天, 纬度, 经度, 2)
print(float(np.nanmin(arr[:, :, :, 0])), float(np.nanmax(arr[:, :, :, 0])))

两个换算要解释:t2m 是开尔文,减 273.15 得到摄氏度;tp 是米,乘 1000 得到毫米。这两个换算写错是这份数据里最常见的静默错误——数值看着像模像样,量级差了三个数量级或一个温度区间。

resample 的上采样与下采样语义不同:温度取日均用 mean,降水取日总量用 sum。两者交换,结论会完全反过来。

§9.4 评估时最少要报的三件事

用 ERA5 做的结果,报告里至少要写清三件:数据取自哪个集合、什么时间取的、覆盖什么时段。缺了第三件,读者不知道你的结果有没有跨过观测系统换代;缺了前两件,别人无法复现。

§4.2 的案例的报告最后加了第四件:校准函数的训练时段与样本量。这一条不在通用清单上,但任何「用现代数据校准历史数据」的做法都应该加上它。

§10 AI 使用声明

栏目 内容
性质 全球大气再分析场,含模式输出分量,不是纯观测
用途 时空预测的输入与验证、环境协变量、长期气候统计
不建议用途 局地尺度事件判定、单站仪器读数替代、匿名批量爬取、跨 1979 直接比方差与趋势
伦理 无个人数据;下游若涉及健康结局,注意区域与人群尺度的生态谬误
引用 集合 DOI 10.24381/cds.adbb2d47 + QJRMS 长文
许可 CC BY 4.0(目录 API license 字段),另需账号与条款接受
版本 集合 ID + 检索进程版本 + 取数时间戳
状态 在线,日更,滚动修订

§11 常见误读与避坑清单

常见说法 实际情况 证据
「ERA5 是观测数据」 是数据同化的分析场,含大量模式约束 数据集页概述对同化机制的描述
「ERA5 从 1979 年开始」 覆盖从 1940 开始,1979 是业务卫星时代的起点 目录 extent 起点 1940-01-01
「所有变量都能取到 1940 年」 262 是并集计数,具体变量按时段受限 约束文件按年月列出不可取变量
「ERA5 的速度是 0.25°」 再分析场 0.25°,集合统计量 0.5°,海浪再分析 0.5° 数据集页 Horizontal resolution
「集合离散度就是误差条」 是流依赖的不确定性抽样,非系统偏差估计 概述对 10 成员集合的说明
「ERA5T 就是 ERA5」 早期版,2–3 个月内可能被终版替换 概述「could be different from the final release」
「这里就是完整 ERA5」 是重网格降采样子集,原生分辨率在别处 概述「regridded subset」
「CC BY 4.0 就能匿名直下」 许可开放,但访问仍需账号与条款接受 访问流程。事实层,无需争论
「降水各小时值相加不会错」 累积量相加有语义前提,速率与累积混用差时间因子 变量命名与单位。基本物理常识
「ERA5 能替代测站数据」 格点分析场与点观测有代表性差异 空间尺度本质差异

附录 A 速查卡

键 值
集合 ID reanalysis-era5-single-levels
检索进程版本 1.0.0
DOI 10.24381/cds.adbb2d47
时间 1940-01-01 至昨日,逐小时
空间 全球,0.25°(再分析)/ 0.5°(集合、海浪)
变量 262 个短名,15 个表单分组
格式 GRIB / NetCDF
更新 每日,约 5 天延迟
许可 CC BY 4.0
单请求上限 costing 接口返回 limit 字段

附录 B 变量分组速查

分组 变量数 典型用途
Radiation and heat 24 光伏、蒸散、地表能量平衡
Ocean waves 43 海洋工程、航线、近岸波浪
Precipitation and rain 11 水文、农业、城市内涝
Soil 9 农业、干旱监测
Lakes 9 湖泊水温和水域热力过程
热门汇总 11 快速起步

附录 C 术语表

术语 含义
再分析 用固定版本的数值模式与同化系统,把历史观测重新处理成连续场
数据同化 把观测与模式背景场按最优方式结合,得到分析场
分析场 同化输出的最优估计,是后续预报的起点
ERA5T 早期版,发布快、延迟低,2–3 个月内可能被修订
集合成员 在扰动初值与参数下的一次轨迹,用于抽样不确定性
离散度 集合成员之间的分散程度,反映流依赖不确定性
单层 垂直坐标固定或本就无垂直坐标的量,取数时不需要填气压层
累积量 从前一次后处理时刻到当前时刻的累积,不能跨时刻直接相加
平均速率 单位时间平均通量,与累积量差一个时间因子
重网格 把原生网格插值到规则经纬网,会损失信息
背景场 同化中来自模式短时预报的先验
观测系统换代 卫星等观测手段加入或更替导致同质性变化
costing CDS 的请求规模预估接口
约束表 官方发布的「哪些变量在某些年月不可取」规则文件
指纹 对请求参数做的摘要,用于复现记录
格心 网格单元的中心点,格点值定义在这里
流依赖 不确定性随天气形势变化的性质
代表误差 格点值与点观测之间的尺度不匹配造成的差异
生态谬误 用区域平均关系推断个体层面关系的错误

附录 D 常见问题

Q1:ERA5 到底有多少个变量? 262 个短名。表单分 15 组,其中 Popular 是汇总组,按组合计会重复算成 279。

Q2:为什么官方说 1940 年,很多论文却写 1979 年? 两者都对。1940 是覆盖起点,1979 是业务气象卫星时代的起点,也是很多研究选择的起点,因为那之后的观测系统更接近今天。

Q3:能不能不注册就下? 不能。许可开放与访问开放是两件事。

Q4:集合只能取 3 小时的吗? 表单上 ensemble_members 只列了 8 个时次,因为它是按 3 小时间隔抽样的设计。

Q5:NetCDF 与 GRIB 选哪个? 要进 Python 生态就选 NetCDF,要长期存档或与业务系统对接选 GRIB。两者内容一致。

Q6:为什么我拿到的降水是 0.001 这种数? 单位是米,乘 1000 才是毫米。

Q7:可以只取一个城市吗? area 最小只能切到网格步长,0.25° 一格,比一个城市大得多。

Q8:ERA5 的降水能替代雨量站吗? 不能做局地事件判定,做区域统计可以。

编辑说明

核验时间 2026-10-29。方法:读取 CDS 数据集页 HTML(overview 与 documentation 两栏),取官方口径的覆盖、分辨率、延迟、格式与集合说明;读取 STAC 目录接口 api/catalogue/v1/collections/reanalysis-era5-single-levels,取 license、extent、DOI、更新时间与相关集合;读取检索表单 JSON 与检索进程描述 api/retrieve/v1/processes/reanalysis-era5-single-levels,统计变量枚举 262、表单分组 15/合计 279、年份 87;读取约束文件,确认按年月列出的不可取变量规则;调用 costing 接口验证返回结构。未登录 CDS,未下载任何数据文件,因此没有做逐变量、逐格点的分布统计,也没有逐个核验文件体积。ECMWF Confluence 文档站与 Wiley 论文页在本环境被访问策略拦截,相关细节(如 1940–1978 扩展的官方措辞)以 CDS 页面与本库编辑的知识为限,正文中凡涉及该段的表述均限定在「覆盖从 1940 开始、1979 是业务卫星时代起点」这一可核实范围内,未引用未读到的原文。20° 以上的网格数(721×1440)为按官方分辨率推算,正文已标注。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • oisst-v2-1 — 共享标签:公共卫生与流行病学 / 时序数据 / 全球健康 / 疾病监测
  • ibtracs — 共享标签:公共卫生与流行病学 / 时序数据 / 全球健康 / 疾病监测
  • argo-gdac-floats — 共享标签:公共卫生与流行病学 / 时序数据 / 全球健康 / 疾病监测
  • our-world-in-data — 共享标签:公共卫生与流行病学 / 时序数据 / 全球健康
  • ndbc-buoy — 共享标签:公共卫生与流行病学 / 时序数据 / 疾病监测
  • noaa-cors-gnss — 共享标签:公共卫生与流行病学 / 时序数据 / 疾病监测
  • amrnet — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测
  • gbd-results — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测
  • gho-steps — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测
  • wpp — 共享标签:公共卫生与流行病学 / 时序数据 / 全球健康

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集