Cloud-WS 2021:气象数据工具库CliMetLab
点击此处查看最新的网赚项目教程
本文正文部分来自 ECMWF 于 2021 年 2 月召开的Virtual workshop: Weather and climate in the cloud(Cloud-WS 2021) 中的如下演讲:
Enabling machine learning for weather and climate data in the cloud
A Python package to support AI/ML activities in climate and meteorology
by Baudouin Raoult
at Cloud-WS 2021
CliMetLib:一个用于支持气候和气象学中的 AI/ML 研究的 Python 包
正文
注:笔者对演讲幻灯片中部分内容有修改和调整
概述Jupyter Notebook
Jupyter Notebooks 中通常可以看到大量与 AI/ML 方法无关的代码:
解码数据
修改绘图属性,使图像更好看
而与 AI/ML 相关的代码通常很少。
为什么选择 Python ?
当前已有大量 Python 工具库
社区软件包(基础库):
机器学习框架
社区软件包(数据处理):
ECMWF 软件包:
简介
使接口尽可能简化,让科学家可以专注 ML 算法
加载 ERA5 数据集中的 2m 温度数据
import climetlab as cml
# 加载数据
era5_data = cml.load_dataset(
"era5-temperature",
domain="France",
period=1980
)
# 绘图
cml.plot_map(
era5_data["1980-06-09 18:00"]
)
加载 NOAA 飓风数据集,选择特定数据,并绘图
import climetlab as cml
data = cml.load_dataset(
"hurricane-database",
"atlantic"
)
# 数据结构
irma = data.to_pandas(
name="irma",
year=2017
)
# 绘图
cml.plot_map(irma)
自动绘图,无需额外设置
目标
面向 Jupyter Notebooks。Jupyter Notebook 的使用者越来越多,使用范围也越来越广。ECMWF 也正在使用 JupyterLab。
旨在最小化样板代码 (boilerplate code)。
提供无缝数据访问和绘图
与主流科学 Python 软件包完全兼容
允许用户专注于科学问题,而不是编程
数据数据生态系统
图片来自幻灯片
图片展示 CliMetLib 库在数据生态系统中的位置
绿色是数据源 (Data source),来源包括:
绿色和紫色构成数据集 (Dataset),包含
右侧是 Xarray 和 Pandas,提供设计良好的 API 接口,基于 Numpy 实现。
数据可以提供给机器学习库
元数据
数据集除了包含数据源外,还包含数据集元数据(Dataset metadata):
数据源数据集
目前主要是概念证明
目标:包含全部天气学/气候学领域的 AI/ML 参考数据集
功能互通性
Interoperability
与 Python 科学库互通非常简单:
ds = cml.load_dataset("some-dataset")
xa = ds.to_xarray()
df = ds.to_pandas()
ar = ds.to_numpy()
(x_train, y_train), (x_test, y_test) = ds.load_data()
绘图
自动绘制二维地图
数据集知道如何最好地绘图
支持 GRIB,NetCDF,Xarray,Pandas 等
图片来自幻灯片
函数
借用 Numpy,Pandas,Keras 等库中的广泛使用的方法名,方便用户使用。
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
ds = cml.load_dataset("high-low")
(x_train, y_train), (x_test, y_test) = ds.load_data()
插件结构
方便添加新内容
示例加载 Python 库
加载 CliMetLab 和 Tensorflow
import climetlab as cml
from tensorflow.keras.layers import (
Input,
Dense,
Flatten
)
from tensorflow.keras.models import Sequential
数据
加载带标签的数据集:High-Low 数据集
highlow = cml.load_dataset("high-low")
绘制数据集
for field, label in highlow.fields():
cml.plot_map(
field,
width=256,
title=highlow.title(label)
)
示例图形,每种标签各选择一个示例
数据集中的每个条目由要素场和标签组成
field, label = highlow.fields()[0]
field是 GRIB 要素场,包含 21×21 二维数组
field
GribField(z,500,19930408,1200,0,0)
label是类别标签
label
(1.0, 0.0, 0.0, 0.0)
分割数据集
使用load_data()将数据集分为训练集和验证集
fields参数用于保留带元数据的原始数据
(
(x_train, y_train, f_train),
(x_test, y_test, f_test)
) = highlow.load_data(
test_size=0.3,
fields=True
)
x_train和y_train是用于机器学习库的 Numpy 数组,f_train是GribFiled数组。
训练集有 25 个数据
x_train.shape, y_train.shape, len(f_train)
((25, 21, 21), (25, 4), 25)
测试集有 12 个数据
x_test.shape, y_test.shape, len(f_test)
((12, 21, 21), (12, 4), 12)
构建模型
创建三层模型
model = Sequential()
model.add(
Input(shape=x_train[0].shape)
)
model.add(
Flatten()
)
model.add(
Dense(
64,
activation="sigmoid"
)
)
model.add(
Dense(
4,
activation="softmax"
)
)
使用下面的代码可以打印模型结构
from tensorflow.keras.utils import plot_model
plot_model(
model,
to_file='model.png',
show_shapes=True,
dpi=200
)
编译
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
训练
model.fit(
x_train,
y_train,
epochs=100,
)
model.evaluate(
x_test,
y_test
)
[0.4204963743686676, 0.9166666865348816]
使用模型
预测标签
predicted = model.predict(x_test)
predicted.argmax(axis=1)
array([2, 2, 2, 2, 0, 3, 2, 2, 3, 0, 0, 1])
实际标签
y_test.argmax(axis=1)
array([2, 2, 2, 2, 0, 3, 2, 2, 3, 0, 1, 1])
注意:倒数第二个数据预测出错
绘制最后 4 个数据
for p, f, y in list(zip(predicted, f_test, y_test))[-4:]:
cml.plot_map(
f,
width=256,
title=f"{highlow.title(p)} with label {highlow.title(y)}"
)
合并的绘图结果如下所示,左下样本预测分类与实际标签不符
合并代码
from tensorflow.keras.layers import Input, Dense, Flatten
from tensorflow.keras.models import Sequential
import climetlab as cml
highlow = cml.load_dataset("high-low")
(
(x_train, y_train, f_train),
(x_test, y_test, f_test)
) = highlow.load_data(
test_size=0.3,
fields=True
)
model = Sequential()
model.add(Input(shape=x_train[0].shape))
model.add(Flatten())
model.add(Dense(64, activation="sigmoid"))
model.add(Dense(4, activation="softmax"))
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"])
model.fit(
x_train,
y_train,
epochs=100,
verbose=0
)
model.evaluate(x_test, y_test)
可以看到,仅需使用少量代码加载数据,其余大量代码都与 ML 模型相关。
总结开放开发
利用 GitHub 开源社区进行开发
开始使用
安装,支持 Mac/Linux/Windows,仅支持 Python 3
pip3 install climetlab
文档
当前处于 Beta 版本
讨论
虽然处于早期开发阶段,CliMetLab 仍然可以作为基础支撑工具的典型代表,专注于数据访问、绘图等各类机器学习任务需要的通用功能。
其中数据集 (dataset) 的概念非常值得借鉴。通过集成多种数据源,利用常用的 Python 科学工具库,提供开箱即用的数据,可以直接应用到机器学习库中。内置的数据集和简便易用的加载函数让用户可以专注于机器学习算法本身,而不是将大量时间花费在数据准备和处理等过程中。这也是类似笔者这样的研发支撑人员最容易切入的方向。
气象领域的其他工具库中也可以看到类似的思想。
nmcdev 开发的天气学诊断分析工具 (Meteorological Diagnostic Tools, MetDig) 依赖多个基础工具库:
最终形成nmc_met_map天气学诊断分析工具库。
ESMValGroup 开发的气候诊断工具包 ESMValTool 也分成两个库:
领域专家仅需利用现有的接口开发新的诊断方法,而无需单独开发数据处理功能。
同样也需要看到,开发类似 CliMetLab 的基础工具库会面诸多挑战:
笔者会持续关注 CliMetLab 库的开发进展。
参考
Virtual workshop: Weather and climate in the cloud
Enabling Machine Learning for weather and climate data in the cloud
幻灯片:
视频:
相关文章
题图由 Seksak Kerdkanno 在 Pixabay 上发布。
祝大家元宵节快乐!
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: qs62318888
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网