气象数据

四源气象数据交叉验证与场景选型:ERA5、DWD、卫星、地面实测实战

· 南京运梦科技算法团队 · 评审 算法负责人

四源气象数据交叉验证与场景选型:ERA5、DWD、卫星、地面实测实战 封面

做新能源功率预测和资源评估,很多人第一反应是「找一个最准的气象数据源」。但在工程现场反复踩坑之后会发现:根本不存在一个对所有场景都最优的源。再分析、数值预报、卫星反演、地面实测各有各的物理本质和工程边界,它们之间不是替代关系,而是互补关系。这篇文章把这四类源拆开讲清楚——它们各自从哪来、分辨率多少、时效如何、偏差长什么样,然后给出可落地的交叉验证套路和按风光场景的组合选型建议,最后用运梦气象 API 跑一段真实可运行的代码。

关键要点

  • 气象数据没有「最准的源」,只有「最适合的源」:ERA5 再分析管历史本底(1940 至今、逐小时、约 0.25°)、德国气象局 DWD 数值预报管未来约 7 天调度、卫星反演管辐射校验与短临云驱动、地面实测管真值标定,四者互补而非替代。
  • 时效是硬分界:ERA5 滞后约 5 天但有观测约束,DWD 预报误差随 lead time 累积、前 48 小时较可信;地形复杂区 ERA5 的 0.25° 网格会有空间平滑误差。
  • 交叉验证是底线:用地面实测标定 ERA5/卫星的系统性偏差、用 ERA5 气候态检验预报合理性、用 GHI ≈ DNI × cos(天顶角) + DHI 闭合关系三角验证辐射分量、并做时间一致性与缺测质控。
  • 按场景选型:风电资源评估用 ERA5 的 100 米风分量(u100/v100)、光伏用 rsds/dni/dhi 长期辐照本底叠加卫星校验、短期与日前功率预测切到 DWD(ger),超短期爬坡预警靠卫星云图外推或本地实测。
  • 运梦气象 API 把历史 ERA5(dataSourceId 为 era5)与预报 DWD(dataSourceId 为 ger)统一在一个同步下载端点下,返回统一 JSON envelope,无 CSV/NetCDF、无 format 参数。

一、四类数据源的物理本质

再分析(以 ERA5 为代表):ERA5 是 ECMWF 第五代再分析数据集,本质是把卫星、地面站、探空、浮标等多源历史观测,通过同化系统投影到一致的全球网格上,得到物理一致、时空连续的「伪观测」。它的核心价值在于长序列的连续性和一致性——同一套模式、同一套同化算法跑出 1940 年至今的全球场,不会因为某个气象站搬迁或停测而断档。这正是历史回测、容量配比、多年发电量评估最需要的特性。

数值预报(以德国气象局 DWD 为代表):从某个初始时刻出发,用大气动力学方程向未来积分,得到未来若干天的预报场。运梦气象 API 的预报数据源就是德国气象局 DWD(dataSourceId 为 ger),覆盖未来约 7 天。它和再分析的根本区别是:再分析「向后看」、有观测约束,预报「向前看」、误差随预报时效(lead time)累积放大。

卫星反演:通过静止或极轨卫星的可见光/红外通道,反演地表太阳辐射、云量等要素。它在辐射类要素上有独特优势——空间覆盖连续、能捕捉云的真实分布,对 GHI/DNI 的反演往往比纯模式输出更贴近地面实况。代价是依赖反演算法、夜间和高纬度高太阳天顶角时段精度下降,且通常不直接给风速这类近地面要素。

地面实测:测风塔、辐照站、自动气象站的现场观测,是唯一的「真值」来源。但它是点观测、空间代表性有限,且存在仪器漂移、缺测、积灰遮挡等数据质量问题,无法独立支撑大范围历史重建。

二、时空分辨率、时效与偏差对照

把四类源放在同一张表里横向比较,选型决策会清晰很多。

维度ERA5 再分析DWD 数值预报卫星反演地面实测
时间覆盖1940 至今未来约 7 天近实时+历史存档建站起至今
空间分辨率约 0.25°(约 31 km)数 km 量级公里至数公里单点
时间分辨率逐小时逐小时(短时可更密)15 分钟至 1 小时秒至分钟级
时效(滞后/提前)滞后约 5 天每日多次起报、提前 7 天准实时实时
典型偏差特征地表平坦区气温±1K、风速±1 m/s 量级;复杂地形偏差放大误差随 lead time 累积;前 48 小时较可信辐射较准,受云检测算法影响仪器/缺测误差,需质控
最适用途历史回测、资源评估、训练样本短期/日前调度、功率预测辐射资源校验、云驱动短临真值标定、模型订正基准

几个工程上必须记住的偏差规律:再分析的 0.25° 网格在山区、海岸带、城市边界层这类地形复杂区会有明显的空间平滑误差,一个网格点代表 30 公里见方的平均状态,掩盖了局地地形加速、海陆风等效应;数值预报的误差不是常数,前 48 小时通常可信,越往后越发散,做日前预测和做 D+5 预测要用不同的置信度处理;卫星辐射在清晨、傍晚的大太阳天顶角时段,以及积雪地表(容易被误判为云)会系统性失真。

三、交叉验证:不要只信一个源

单源数据没有第二个独立来源对照,你永远不知道它错没错。实践中行之有效的交叉验证套路有这么几条。

第一,用地面实测标定再分析与卫星。 在场站有测风塔或辐照站的前提下,把同期 ERA5、卫星反演的对应要素与实测做配对,算偏差(bias)、均方根误差(RMSE)和相关系数。重点不是看绝对误差,而是看是否存在系统性偏差——比如 ERA5 风速在某场址常年偏低 0.8 m/s,那就建立一个简单的线性订正系数长期复用。这一步是把「全球网格的平均真相」拉到「本场址真相」的关键。

第二,用再分析检验预报的气候合理性。 预报数据没有同期观测时,可以用多年 ERA5 统计出的该点气候态(月平均、风速分布、辐照日变化曲线)作为先验,判断某条预报曲线是否离谱。预报偶尔会给出物理上不合理的尖峰,再分析气候态是低成本的合理性闸门。

第三,三角验证辐射分量。 辐射有 GHI(rsds,地表水平短波)、DNI(直接法向)、DHI(散射水平)三个分量,物理上满足闭合关系:GHI ≈ DNI × cos(天顶角) + DHI。同时取这三个字段,用闭合关系做一致性检查,能快速发现某一分量的反演或插值异常。

第四,时间一致性与缺测检查。 无论哪个源,落地前都要扫一遍:时间戳是否连续、是否有跳变、夜间辐射是否归零、风速是否有非物理的常数段(往往是仪器卡死或填充值)。这些质控规则写成可复用的校验函数,比事后排查省太多事。

四、按场景组合选型

风电资源评估与发电量预测(选址、可研阶段):主力用 ERA5 的 100 米风分量(u100/v100),因为风机轮毂高度接近 100 米,10 米风外推到轮毂存在风切变假设误差。ERA5 提供 20 年以上长序列,能覆盖风资源的年际波动,避免用一两年短期数据高估或低估。有测风塔时用实测做 MCP(测量-相关-预测)订正。

光伏资源评估与发电量精算:辐射是第一驱动量。用 ERA5 的 rsds/dni/dhi 建立长期辐照本底,若场址在云况多变区域,叠加卫星反演辐射做交叉校验。组件实际进光量还要把水平面辐照转到倾斜面,这一步对 DNI/DHI 分量精度敏感,三角验证不能省。

短期与日前功率预测(运行阶段):主力切换到 DWD 数值预报(ger),取未来 7 天的 ws/wd、rsds 等。这里的工程关键是用历史预报-实测配对训练订正模型:把过去几个月 DWD 预报与本场实测发电对齐,学一个 lead-time 相关的偏差订正,再叠加机器学习模型映射到功率。再分析在这个阶段退居二线,作为训练样本的历史特征来源。

超短期与爬坡事件预警:分钟级波动主要由云团移动驱动,数值预报的时间分辨率跟不上,需要卫星云图外推或本地实测的快速反馈,再分析和常规预报都不适合做秒级响应。

五、在运梦气象 API 上手

运梦气象 API 把历史与预报两类源统一在一个同步下载端点下:历史用 ERA5(dataSourceId 为 era5),预报用德国气象局 DWD(dataSourceId 为 ger,覆盖未来约 7 天)。响应是统一 JSON envelope,data 里按字段名给出与 timeList 一一对应的数值数组,不返回 CSV 或 NetCDF,也没有 format 参数,直接用 resp.json() 解析即可。下面这段示例同时拉历史 ERA5 与预报 DWD,做一次最基础的交叉对照。

import requests

URL = "https://console.yun-meng.top/api/energy-weather/search/weather/action/downloadSync"
HEADERS = {
    "Authorization": "Bearer sk-your-api-key",
    "Content-Type": "application/json",
}

def download(data_source_id, stime, etime, fields):
    body = {
        "dataSourceId": data_source_id,
        "lat": 32.03253,
        "lon": 117.35184,
        "stime": stime,
        "etime": etime,
        "timezone": "8",          # 必填,时区偏移,东八区为 "8"
        "fields": fields,
    }
    resp = requests.post(URL, headers=HEADERS, json=body, timeout=60)
    result = resp.json()          # 统一 JSON envelope,无 CSV/NetCDF
    if not result["success"]:
        raise RuntimeError(result["msg"])
    return result["data"]

# 历史:ERA5 取 100m 风分量 + 地表短波,用于资源本底
hist = download("era5", "2023-06-01 00:00", "2023-06-07 23:00",
                ["u100", "v100", "ws", "rsds"])

# 预报:德国气象局 DWD 取未来风速与辐射,用于短期调度
fcst = download("ger", "2026-06-08 00:00", "2026-06-14 23:00",
                ["ws", "wd", "rsds", "dni", "dhi"])

t_hist, ws_hist = hist["timeList"], hist["ws"]
t_fcst, rsds_fcst = fcst["timeList"], fcst["rsds"]

print(f"ERA5 历史 {len(t_hist)} 条,首点 {t_hist[0]} 风速 {ws_hist[0]:.2f} m/s")
print(f"DWD 预报 {len(t_fcst)} 条,首点 {t_fcst[0]} GHI {rsds_fcst[0]:.1f} W/m2")

# 辐射三角验证:GHI ≈ DNI*cos(z) + DHI 的简化一致性检查
ghi, dni, dhi = fcst["rsds"], fcst["dni"], fcst["dhi"]
for i in range(min(3, len(ghi))):
    print(f"{t_fcst[i]}  GHI={ghi[i]:.0f}  DNI={dni[i]:.0f}  DHI={dhi[i]:.0f}")

字段沿用 CF 命名:tas 气温、hurs 相对湿度、sp 气压、pr 降水、uas/vas 是 10 米风分量、u100/v100 是 100 米风分量、ws/wd 是派生风速风向、rsds 是地表短波(GHI)、dni 直接法向、dhi 散射水平。资源评估优先取 u100/v100 和 rsds/dni/dhi;短期预测用 ger 取 ws/wd 与辐射三件套。

常见问题

ERA5 和数值预报有什么区别,该用哪个? ERA5 再分析「向后看」、有多源历史观测同化约束,提供 1940 至今物理一致的长序列,适合历史回测、资源评估和训练样本;数值预报「向前看」、误差随预报时效累积放大,适合未来调度与功率预测。运梦气象 API 里历史用 ERA5、预报用德国气象局 DWD,两者互补使用。

做风电资源评估应该选哪个气象数据源和字段? 主力用 ERA5 的 100 米风分量(u100/v100),因为风机轮毂高度接近 100 米,用 10 米风外推到轮毂会引入风切变假设误差。ERA5 提供 20 年以上长序列,能覆盖风资源年际波动;有测风塔时再用实测做 MCP(测量-相关-预测)订正。

只用一个气象数据源准不准,为什么要做交叉验证? 单源数据没有第二个独立来源对照,就无法判断它是否出错。常用做法是:用地面实测标定 ERA5 和卫星的系统性偏差、用多年 ERA5 气候态检验预报曲线的合理性、用 GHI ≈ DNI × cos(天顶角) + DHI 闭合关系三角验证辐射分量,并做时间一致性与缺测质控。

德国气象局 DWD 预报能看多久,前几天最可信? 运梦气象 API 的 DWD 预报(dataSourceId 为 ger)覆盖未来约 7 天,每日多次起报。预报误差随 lead time 累积,通常前 48 小时较可信,越往后越发散,做日前预测和做 D+5 预测要用不同的置信度处理。

运梦气象 API 返回的是 CSV 还是 NetCDF 文件? 都不是。历史 ERA5 与预报 DWD 统一在一个同步下载端点下,响应是统一 JSON envelope,data 里按字段名给出与 timeList 一一对应的数值数组,没有 format 参数,直接用 resp.json() 解析即可。

收尾

气象数据选型的核心不是「找最准的源」,而是让每个源在它最擅长的环节上岗,再用交叉验证把它们咬合起来:ERA5 管历史本底和训练样本,DWD 管未来 7 天的调度预测,卫星管辐射校验和短临云驱动,地面实测管真值标定。把这套组合用统一的 API 契约接进同一条数据管线,比反复在不同格式、不同命名的源之间倒腾,工程成本要低得多。先把交叉验证的质控规则和订正系数沉淀下来,后面无论换场址还是扩规模,都能复用。

参考与延伸阅读

  • Hersbach, H., Bell, B., Berrisford, P., et al. (2020). The ERA5 global reanalysis. Quarterly Journal of the Royal Meteorological Society, 146(730), 1999–2049. https://doi.org/10.1002/qj.3803
  • Zängl, G., Reinert, D., Rípodas, P., & Baldauf, M. (2015). The ICON (ICOsahedral Non-hydrostatic) modelling framework of DWD and MPI-M: Description of the non-hydrostatic dynamical core. Quarterly Journal of the Royal Meteorological Society, 141(687), 563–579. https://doi.org/10.1002/qj.2378
  • Sengupta, M., Xie, Y., Lopez, A., Habte, A., Maclaurin, G., & Shelby, J. (2018). The National Solar Radiation Data Base (NSRDB). Renewable and Sustainable Energy Reviews, 89, 51–60. https://doi.org/10.1016/j.rser.2018.03.003
  • Eaton, B., Gregory, J., Drach, B., et al. NetCDF Climate and Forecast (CF) Metadata Conventions. CF Conventions(官方规范文件). https://cfconventions.org/cf-conventions/cf-conventions.html