跳转到主要内容

ECMWF举办的S2S AI竞赛的Climetlab外部数据集插件

项目描述

Check and publish Python Package PyPI version fury.io Binder

S2S AI挑战数据集

这是一个用于子季节到季节(S2S)人工智能挑战的climetlab插件:[https://s2s-ai-challenge.github.io/](https://s2s-ai-challenge.github.io/).

本README文件描述了如何获取S2S AI挑战赛所需的数据。以下是S2S数据的更一般性描述。用于S2S AI挑战赛的数据是S2S数据库的一个子集。更多详情请参考https://confluence.ecmwf.int/display/S2Shttps://confluence.ecmwf.int/display/S2S/Parameters

使用数据集的方法有多种。可以直接下载GRIBNetCDF格式的数据(使用wgetcurlbrowser等);或者使用带有此插件的climetlab Python包,支持GRIBNetCDFzarr格式。zarr是一种云友好的实验性数据格式,只支持下载所需的数据部分。它已被设计为在云环境中比经典格式表现更优(实验性)。

安装

pip install -U climetlab climetlab_s2s_ai_challenge

API

import climetlab

使用climetlab.load_dataset('s2s-ai-challenge-{datasetname}'),以下为关键字

  • datasetname:数据集名称,见数据集描述
  • parameter:变量,见不同模型的预测输入
  • origin:模型名称[ecmwfecccncep]或建模中心[ecmfcwaokwbc]。仅对于training/test-input/hindcast/forecast-input提供origin
  • dateYYYYMMDDtest-input/forecast-input的2020年预测日期。对于即时training-input/hindcast-input也需要相同的日期,但返回给定MMDD日期的多年历史预测。请提供intstrnp.datetime或以上格式的列表YYYYMMDDD。不提供date关键字则下载所有日期。
  • format:数据格式,从[netcdf(总是可用)、grb(仅限input-*)、zarr(实验性)]中选择

坐标

时间相关坐标概述。

名称 CF约定standard_name 描述 注释
预测时间 预测参考时间 NWP中的预测参考时间是“数据时间”,即制作预测的分析时间。它不是预测有效的日期。
提前时间 预测周期 预测周期是预测参考时间和有效时间之间的时间间隔。
有效时间 时间 预测有效的时间 forecast_time + lead_time

所有数据集都在全球1.5度网格上。

参数

parameter描述了要下载的变量。《s2s-ai-challenge》最重要的两个变量是两个目标变量t2mtp

参数 long_name standard_name unit 描述 & 聚合类型 第3-4周聚合 第5-6周聚合 源链接
t2m 2m温度 air_temperature K 给定日期2米高度的气温平均值 平均值[第14天,第27天] 平均值[第28天,第41天] 模型观测
tp 总降水量 precipitation_amount kg m-2 forecast_time 到包括 valid_time 的总降水量累积,例如 lead_time = 1 days 累积从日期 forecast_time 的 0, 6, 12, 18 小时的降水量 pr 第28天减去第14天 第42天减去第28天 模型
pr 降水量通量 precipitation_flux kg m-2 给定日期的累积降水量 使用 tp 使用 tp 观测数据

鉴于参数的不同性质,以 forecast_time 2020年1月2日为例,tp lead_time=1 dayst2m lead_time=0 days 描述了1月2日的天气,因为 tp 是从1月2日00:00到1月3日00:00的 pr 的汇总,而 t2m 是1月2日的平均值。此外,tpforecast_time 开始汇总,即 tp lead_time=5 days 是从1月2日00:00到1月7日00:00的 pr 汇总。

有关其余变量的描述,请参阅ECWMF S2S 描述

数据集描述

为此挑战提供了四个数据集。由于我们旨在将机器学习和天气预报的两个社区汇集在一起,因此它们使用了两个观点的别名

ML NWP
training-input hindcast-input 训练数据集(用于训练ML模型)
training-output-reference hindcast-like-observations 训练数据集(用于训练ML模型的输出)
training-output-benchmark hindcast-benchmark 基准输出(在训练数据集上)
test-input forecast-input 测试数据集(不要用于训练)
test-output-reference forecast-like-observations 测试数据集(不要使用)
test-output-benchmark forecast-benchmark 基准输出(在测试数据集上)
观测数据 观测数据 具有 time 维度的观测数据

过拟合 在使用ML算法时始终是一个潜在问题。为了解决这个问题,数据通常分为三个数据集: 训练验证测试。这个术语过去导致了 一些混淆。在训练和验证之间分割 hindcast-input (training-input) 数据集是标准方法,应仔细决定。

forecast-input (test-input) 必须不作为验证数据集使用:它不能用于调整超参数或做出有关ML模型的决策。

hindcast输入

这些数据是hindcast数据。这被用作训练ML模型的输入。

hindcast-input(training-input) 数据集包含来自三个不同 模型/中心 的数据

中心名称 模型名称
ecmwf ecmf
eccc cwao
ncep kwbc

使用 origin="ecmf" (模型名称) 或 origin="ecmwf" (中心名称) 之一。

此数据集以 format: gribnetcdf 格式提供。

  • ECMWF hindcast数据
    • forecast_time:从2000/01/02到2019/12/31,对应于2020年的每周星期四。
    • lead_time:0到46天
    • valid_time (forecast_time + lead_time):从2000/01/02到2020/02/13
    • 可用参数:t2m(2t)/siconc(ci)/gh/lsm/msl/q/rsn/sm100/sm20/sp/sst/st100/st20/t/tcc/tcw/tp/ttr/u/v(在MARS数据库中的名称不同)
  • ECCC hindcast数据
    • forecast_time:从2000/01/02到2019/12/31,对应于2020年的每周星期四。
    • lead_time:1到32天
    • valid_time (forecast_time + lead_time):从2000/01/03到2020/02/01
    • 可用的参数:t2m(2t)/siconc(ci)/gh/lsm/msl/q/rsn/sp/sst/t/tcc/tcw/tp/ttr/u/v(在MARS数据库中名称不同)
    • 不可用的参数:sm20/sm100/st20/st100
  • NCEP回波数据
    • 预报时间:从1999/01/07至2010/12/30,对应于2010年的每周星期四,见Vitart等2017年的研究,NCEP回波日期与ECMWF和ECCC回波不同
    • 预报时效:1至44天
    • 有效时间预报时间 + 预报时效):从1999/01/07至2011/02/11
    • 可用的参数:t2m(2t)/siconc(ci)/gh/lsm/msl/q/sm100/sm20/sp/sst/st100/st20/t/tcc/tcw/tp/ttr/u/v(在MARS数据库中名称不同)
    • 不可用的参数:rsn
hindcast = climetlab.load_dataset('s2s-ai-challenge-training-input', date=[20200102], origin='ecwmf', parameter='tp', format='netcdf').to_xarray()
hindcast.coords
Coordinates:
  * realization    (realization) int64 0 1 2 3 4 5 6 7 8 9 10
  * forecast_time  (forecast_time) datetime64[ns] 2000-01-02 ... 2019-01-02
  * lead_time      (lead_time) timedelta64[ns] 0 days 1 days ... 45 days 46 days
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
    valid_time     (forecast_time, lead_time) datetime64[ns] 2000-01-02 ... 2...
    
# for ncep hindcast provide 2010 date strings
hindcast_ncep = climetlab.load_dataset('s2s-ai-challenge-training-input', date=[20100107], origin='ncep', parameter='tp', format='netcdf').to_xarray()
hindcast_ncep.coords
Coordinates:
  * realization    (realization) int64 0 1 2 3
  * forecast_time  (forecast_time) datetime64[ns] 1999-01-07 ... 2010-01-07
  * lead_time      (lead_time) timedelta64[ns] 1 days 2 days ... 43 days 44 days
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
    valid_time     (forecast_time, lead_time) datetime64[ns] 1999-01-08 ... 2...

文件列表:gribnetcdf、zarr(不可用)

预报输入

预报输入测试输入)数据集也包含来自三个不同模型的数据:ECMWF(ecmf)、ECCC(cwao)、NCEP(eccc),不同日期。这些数据是预报数据。这可以用来作为应用机器学习模型输入,以生成提交给挑战的输出。

  • 对于所有3个模型
    • 预报时间:从2020/01/02至2020/12/31,2020年每周星期四。
    • 有效时间预报时间 + 预报时效):从2020/01/02至2021/02/xx
    • 可用的参数(与回波输入(训练输入)相同)
  • ECMWF预报
    • lead_time:0到46天
  • ECCC预报
    • lead_time:1到32天
  • NCEP预报
    • 预报时效:1至44天
forecast = climetlab.load_dataset('s2s-ai-challenge-test-input', date=[20200102], origin='ecmwf', parameter='tp', format='netcdf').to_xarray()
forecast.coords
Coordinates:
  * realization    (realization) int64 0 1 2 3 4 5 6 7 ... 44 45 46 47 48 49 50
  * forecast_time  (forecast_time) datetime64[ns] 2020-01-02
  * lead_time      (lead_time) timedelta64[ns] 0 days 1 days ... 45 days 46 days
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
    valid_time     (forecast_time, lead_time) datetime64[ns] 2020-01-02 ... 2...

文件列表:gribnetcdf、zarr(缺失)

观测数据(参考输出)

回波类似观测训练输出参考)数据集与ECMWF和ECCC模型的训练输入匹配。预报类似观测测试输出参考)数据集与所有三个模型的测试输入匹配。

观测数据是用于与机器学习模型输出进行比较和评估的真相。它包括来自温度和累积总降水仪器的观测数据。《NOAA CPC》数据集是从IRIDL下载的。我们提供的观测数据与预报/回波相同的维度,以便于预报/回波与真相的匹配。《见脚本来了解技术细节》这些观测数据是真相,并不对应于模型。格式总是netcdf

hindcast_like_obs = climetlab.load_dataset('s2s-ai-challenge-training-output-reference', date=[20200102], parameter='tp').to_xarray()  # origin and format not accepted
hindcast_like_obs.coords
Coordinates:
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
  * forecast_time  (forecast_time) datetime64[ns] 2000-01-02 ... 2019-01-02
  * lead_time      (lead_time) timedelta64[ns] 0 days 1 days ... 45 days 46 days
    valid_time     (lead_time, forecast_time) datetime64[ns] 2000-01-02 ... 2...

forecast_like_obs = climetlab.load_dataset('s2s-ai-challenge-test-output-reference', date=[20200102], parameter='tp').to_xarray()  # origin and format not accepted
forecast_like_obs.coords
Coordinates:
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
  * forecast_time  (forecast_time) datetime64[ns] 2020-01-02
  * lead_time      (lead_time) timedelta64[ns] 0 days 1 days ... 45 days 46 days
    valid_time     (lead_time, forecast_time) datetime64[ns] 2020-01-02 ... 2...

如果您想使用从1999年至2010年的预报时间的NCEP回波进行训练,请使用具有时间维度s2s-ai-challenge-observations的下载观测数据,并使用climetlab_s2s_ai_challenge.extra.forecast_like_observations将观测数据与预报/回波的相应有效时间匹配。

obs_time = climetlab.load_dataset('s2s-ai-challenge-observations', parameter=['pr', 't2m']).to_xarray()
# equivalent
obs_lead_time_forecast_time = climetlab.load_dataset('s2s-ai-challenge-observations', parameter=['pr', 't2m']).to_xarray(like=hindcast_ncep)
obs_lead_time_forecast_time = climetlab_s2s_ai_challenge.extra.forecast_like_observations(hindcast_ncep, obs_time)
obs_lead_time_forecast_time.coords
<xarray.Dataset>
Dimensions:        (forecast_time: 12, latitude: 121, lead_time: 44, longitude: 240)
Coordinates:
    valid_time     (forecast_time, lead_time) datetime64[ns] 1999-01-08 ... 2...
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
  * forecast_time  (forecast_time) datetime64[ns] 1999-01-07 ... 2010-01-07
  * lead_time      (lead_time) timedelta64[ns] 1 days 2 days ... 43 days 44 days

此函数可用于SubX和S2S项目的所有初始化回波和预报。在使用它们进行s2s-ai-challenge时,请注意2020年预报的不同起始日期。NOAA CPC的观测数据使用xesmf保守地重网格到S2S 1.5度网格。720x360的空间分辨率原始观测数据可以通过grid='720x360'获取。

一般来说,只有发布预报时可供使用的数据才能被ML模型用于预报。

规则:预报日期之后观测到的数据不应用于预测,例如,从2020/07/01开始的预报不应使用2020/07/01之后的数据)。

有关所有规则,请参阅挑战网站

请参阅挑战的通用规则此处

观测数据集中的日期从2000/01/01到2021/02/15。

观测数据集是基于真实仪器观测建立的。

  • hindcast-like-observations(《training-output-reference)数据集
  • 从2000/01/01到2019/12/31可用,每周一次,每隔7天(每周四)。
  • 2019/12/31之前的观测数据可用于训练(作为评估和优化ML模型的真值,或使用训练/验证拆分或交叉验证微调超参数)。
  • forecast-like-observations(《test-output-reference)数据集。
  • 从2020/01/01到2021/02/20可用,每周一次,每隔7天(每周四)。
  • 测试数据在训练过程中不得使用。理论上,这些数据在挑战期间不应公开,但由于数据的性质,可以从其他来源访问它。这就是为什么必须提交用于训练模型的代码(作为一个jupyter笔记本)以及预测,并且排名前茅的提案将由组委会审查的原因。

train_validation_split

在预报阶段(即使用预报输入数据集进行评估的阶段),使用2020年的观测数据。规则1仍然有效:预报开始日期之后的观测数据不应用于预测。

预报基准(基准输出)

forecast-benchmark(《test-output-benchmark)数据集是一个具有类别低于正常接近正常高于正常的概率重新校准的ECMWF预报。校准是通过使用模型气候学的三等分界限而不是从观测数据中进行的。

基准数据如下所示

  • forecast_time:从2020/01/02到2020/12/31,每周一次,每隔7天(每周四)。
  • lead_time:14天和28天,其中此日代表两周聚集的第一天
  • valid_timeforecast_time + lead_time):从2020/01/01到2021/01/29
  • category'低于正常''接近正常''高于正常'
bench = climetlab.load_dataset('s2s-ai-challenge-training-output-benchmark', parameter='tp').to_xarray()  # origin, date and format not accepted
bench.coords
Coordinates:
  * category       (category) object 'below normal' 'near normal' 'above normal'
  * forecast_time  (forecast_time) datetime64[ns] 2000-01-02 ... 2019-12-31
  * lead_time      (lead_time) timedelta64[ns] 14 days 28 days
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
    valid_time     (forecast_time, lead_time) datetime64[ns] 2000-01-16 ... 2...

bench = climetlab.load_dataset('s2s-ai-challenge-test-output-benchmark', parameter='tp').to_xarray()  # origin, date and format not accepted
bench.coords
Coordinates:
  * category       (category) object 'below normal' 'near normal' 'above normal'
  * forecast_time  (forecast_time) datetime64[ns] 2020-01-02 ... 2020-12-31
  * lead_time      (lead_time) timedelta64[ns] 14 days 28 days
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
    valid_time     (forecast_time, lead_time) datetime64[ns] 2020-01-16 ... 2...

观测

对于其他初始化预报,您可以下载与valid_time对应的t2mpr参数的observations,这些参数对应于valid_time的时间维度。然后在本地上传类似初始化预报/回溯预报的观测格式。观测数据从1999年到2021年均可用。请参阅参数的描述。

climetlab_s2s_ai_challenge.extra.forecast_like_observations将观测与预报/回溯预报的相应valid_time匹配。

forecast = climetlab.load_dataset('s2s-ai-challenge-training-input',
        date=20100107, origin='ncep', parameter='tp',
        format='netcdf').to_xarray()

obs_lead_time_forecast_time = climetlab.load_dataset('s2s-ai-challenge-observations', parameter=['pr', 't2m']).to_xarray(like=forecast)
# equivalent
obs_time = climetlab.load_dataset('s2s-ai-challenge-observations', parameter=['pr', 't2m']).to_xarray()
obs_time.coords
Coordinates:
  * time       (time) datetime64[ns] 1999-01-01 1999-01-02 ... 2021-04-29
  * latitude   (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude  (longitude) float64 0.0 1.5 3.0 4.5 ... 354.0 355.5 357.0 358.5

obs_lead_time_forecast_time = climetlab_s2s_ai_challenge.extra.forecast_like_observations(forecast, obs_time)
obs_lead_time_forecast_time
<xarray.Dataset>
Dimensions:        (forecast_time: 12, latitude: 121, lead_time: 44, longitude: 240)
Coordinates:
    valid_time     (forecast_time, lead_time) datetime64[ns] 1999-01-08 ... 2...
  * latitude       (latitude) float64 90.0 88.5 87.0 85.5 ... -87.0 -88.5 -90.0
  * longitude      (longitude) float64 0.0 1.5 3.0 4.5 ... 355.5 357.0 358.5
  * forecast_time  (forecast_time) datetime64[ns] 1999-01-07 ... 2010-01-07
  * lead_time      (lead_time) timedelta64[ns] 1 days 2 days ... 43 days 44 days
Data variables:
    t2m            (forecast_time, lead_time, latitude, longitude) float32 ...
    tp             (forecast_time, lead_time, latitude, longitude) float32 na...
Attributes:
    script:   climetlab_s2s_ai_challenge.extra.forecast_like_observations

数据下载(GRIB或NetCDF)

下载数据的URL根据以下模式构建

对于输入数据集,模式是https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/{datasetname}/0.3.0/{format}/{origin}-{fctype}-{parameter}-YYYYMMDD.nc

对于观测数据集(参考输出),模式是https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/{datasetname}/{parameter}-YYYYMMDD.nc

对于基准数据集,模式将与https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/training-output-benchmark/{parameter}.nc类似

  • {datasetname}:在URL中,数据集名称必须遵循ML命名(training-inputtraining-output-referencetraining-output-benchmark)。
  • {format}是netcdf。训练输出也以GRIB文件形式提供,使用format='grib'并将"nc"替换为"grib"
  • {fctype}: hindcast 用于训练或 forecast 用于测试
  • {parameter} 是 t2m,表示 2米处的地表温度tp 表示 总降水量
  • {origin} : ecmwfecccncep
  • {weeks} 只能从 ["34", "56", ["34", "56"]] 中选择,仅适用于 benchmark
  • {grid} 只能从 ["240x121" (默认), "720x360"] 中选择,仅适用于 observations
  • YYYYMMDD 是 2020 年 test-input/forecast-input 的预测日期。对于即飞 training-input/hindcast-input,需要相同的日期,但返回的是针对该 MMDD 的多年回溯预测。

可以在以下位置找到 training-input 数据集的文件列表

可以在以下位置找到 training-output-benchmark 数据集的文件列表 https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/training-output-benchmark/index.html (仅 NetCDF)

可以在以下位置找到 training-output-reference 数据集的文件列表 https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/training-output-reference/index.html (仅 NetCDF)

以下是一个使用 wget 获取文件的示例

wget https://object-store.os-api.cci1.ecmwf.int/s2s-ai-challenge/data/training-input/0.3.0/grib/ncep-hindcast-q-20101014.grib (132.8M )

Zarr 格式(实验性)。

zarr 存储位置包括所有参考数据。zarr 网址 不是 为了在浏览器中打开设计的(见 zarr):虽然在没有 climetlab 的情况下访问 zarr 存储可能是可能的,但我们建议使用 climetlab 并安装适当的插件(climetlab-s2s-ai-challenge)

zarr 网址不可用。

使用 climetlab 访问数据(支持 grib、netcdf 和 zarr)

climetlab Python 包允许通过几行代码轻松访问数据,例如

!pip install climetlab climetlab_s2s_ai_challenge
import climetlab as cml
cml.load_dataset("s2s-ai-challenge-training-input",
                         origin='ecmwf',
                         date=[20200102,20200109],
                         # optional : format='grib'
                         parameter='tp').to_xarray()
cml.load_dataset("s2s-ai-challenge-training-output-reference",
                         date=[20200102,20200109],
                         parameter='tp').to_xarray()

请在此处查看示例笔记本:https://github.com/ecmwf-lab/climetlab-s2s-ai-challenge/notebooks

访问训练数据

获取观测(参考输出)数据集请参阅 demo_observations 笔记本

获取基准数据集请参阅 demo_benchmark 笔记本

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

climetlab-s2s-ai-challenge-0.9.0.tar.gz (33.4 kB 查看哈希值)

上传时间 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面