3. NWP数据获取:ECMWF、GFS、CMA等主流预报源的特点与接口
各位同行,今天咱们聊聊NWP数据获取这件事。说白了,就是去哪里拿天气预报数据,以及这些数据各自有什么脾气。
我在风电预测这行干了快十年,跟ECMWF、GFS、CMA这几个老伙计打了无数交道。每个数据源都有自己的性格,摸透了它们,你的预测模型才能跑得稳。
3.1 三大主流预报源概览
先给个全景图。目前风电行业用得最多的,就是欧洲中心的ECMWF、美国国家的GFS,还有咱们中国的CMA。这三家各有千秋。
核心观点:没有绝对最好的数据源,只有最适合你场景的数据源。
我个人习惯是,做短期预测(0-72小时)用ECMWF,做中长期参考(7-15天)用GFS,而CMA的数据,在国内项目上我基本都会搭配使用。
3.2 ECMWF:精度之王,但门槛不低
ECMWF的数据,圈内公认的精度最高。为什么?它的同化系统做得最好,模式分辨率也高。我记得有一次做海上风电项目,用ECMWF的10米风速预报,跟实测的相关系数能到0.85以上,GFS大概在0.78左右。
但ECMWF有个问题——贵。它的商业授权费用不低,而且数据获取流程比较繁琐。如果你是小团队,可能得掂量掂量。
我的经验:ECMWF的HRES(高分辨率预报)和ENS(集合预报)要搭配使用。HRES看确定性,ENS看概率分布,两者结合能更好地评估预报不确定性。
接口方面,ECMWF主要通过ECMWF Web API或者MARS语言来获取。我一般用Python的ecmwf-api-client库来拉数据。
import cdsapi
c = cdsapi.Client()
c.retrieve(
'reanalysis-era5-single-levels',
{
'product_type': 'reanalysis',
'variable': ['10m_u_component_of_wind', '10m_v_component_of_wind'],
'year': '2024',
'month': '01',
'day': ['01', '02', '03'],
'time': ['00:00', '06:00', '12:00', '18:00'],
'area': [40, 110, 30, 120], # 北纬40到30,东经110到120
'format': 'netcdf'
},
'era5_wind_data.nc'
)
嗯,这里要注意,ECMWF的API有请求频率限制。我曾经一次性拉太多数据,直接被封了IP,等了半天才解封。建议每次请求不要超过一个月的量。
3.3 GFS:免费大碗,但精度有取舍
GFS最大的优势就是免费。你想想看,全球覆盖、每天更新4次、预报时长16天,全部免费开放。这对预算有限的团队来说,简直是福音。
但免费是有代价的。GFS的空间分辨率大概是0.25度,约合28公里。对于地形复杂的风电场,这个分辨率可能不够用。我在云南一个山地风场做过对比,GFS预报的风速跟实测偏差能达到2-3m/s,而ECMWF大概在1-1.5m/s。
避坑指南:我曾经直接用GFS的原始格点数据做预测,结果模型效果很差。后来发现,GFS在复杂地形区域的预报偏差有系统性特征,必须做偏差订正。建议用历史数据训练一个MOS(模式输出统计)模型来修正。
GFS的数据获取方式很多。我常用的是NOMADS服务器,或者通过NOAA的OpenDAP接口直接读取。
import xarray as xr
import pandas as pd
# 通过OpenDAP直接读取GFS数据
url = 'https://nomads.ncep.noaa.gov/dods/gfs_0p25_1hr/gfs20240101/gfs_0p25_1hr_00z'
ds = xr.open_dataset(url)
# 提取风电场位置的数据
lat, lon = 35.5, 115.2 # 假设风电场坐标
wind_u = ds['ugrd10m'].sel(lat=lat, lon=lon, method='nearest')
wind_v = ds['vgrd10m'].sel(lat=lat, lon=lon, method='nearest')
# 计算风速
wind_speed = (wind_u**2 + wind_v**2)**0.5
print(wind_speed)
GFS的时间分辨率是3小时,但最近推出了1小时输出的子集。如果你做的是超短期预测(0-4小时),建议用这个1小时的数据,效果会好很多。
3.4 CMA:中国区域的本地化优势
CMA的数据,说白了就是咱们中国气象局的预报产品。它的全球模式GRAPES,在中国区域的预报精度其实不输ECMWF。特别是对于台风、强对流这些极端天气,CMA的本地化参数化方案做得更到位。
我参与过一个沿海风电项目,台风季的时候,ECMWF和GFS都报偏了,只有CMA的路径预报最准。从那以后,我养成了一个习惯:国内项目必配CMA数据。
CMA的数据接口相对封闭一些。主要通过天擎(CMADaaS)平台获取,需要申请账号和权限。不过好消息是,现在CMA也开放了部分免费数据接口。
| 数据源 | 空间分辨率 | 时间分辨率 | 预报时长 | 更新频率 | 获取成本 |
|---|---|---|---|---|---|
| ECMWF HRES | 0.1° (~9km) | 1h / 3h / 6h | 10天 / 15天 | 每天2次 | 高(商业授权) |
| ECMWF ENS | 0.2° (~18km) | 6h | 15天 | 每天2次 | 高 |
| GFS | 0.25° (~28km) | 3h / 1h | 16天 | 每天4次 | 免费 |
| CMA GRAPES | 0.25° (~28km) | 3h / 6h | 10天 | 每天4次 | 部分免费 |
3.5 多源融合的实战策略
讲完了各自的特点,咱们聊聊怎么用。我个人习惯的做法是:
- 基准模型用ECMWF:它的精度最高,作为主预报源
- GFS做补充和校验:当ECMWF数据延迟或者缺失时,用GFS顶上
- CMA做本地化修正:特别是中国区域,用CMA的预报来修正ECMWF的系统性偏差
核心技巧:不要简单地对多个数据源取平均。更好的做法是,用历史数据训练一个权重模型,让模型自己学习每个数据源在不同天气条件下的表现优劣。
举个例子,我做过一个实验:在华北平原的风电场,ECMWF在冬季的预报偏差比GFS小30%,但在夏季雷暴天气下,CMA的预报反而更准。所以,动态权重比固定权重效果好得多。
最后说一句,数据获取只是第一步。拿到数据后,怎么处理、怎么插值、怎么跟实测数据对齐,这些才是真正考验功力的地方。下一章咱们就聊聊数据预处理那些坑。
我的建议:刚开始做多源融合时,别贪多。先选两个数据源(比如ECMWF+GFS),跑通流程,再逐步加入第三个。一口吃不成胖子,数据源多了反而容易出问题。