跳转至

从WMO二进制格式解码数据

学习目标!

在本次实践课程结束时,您将能够:

  • 运行一个Docker容器,使用"demo-decode-eccodes-jupyter"镜像
  • 运行示例Jupyter笔记本以解码GRIB2、NetCDF和BUFR格式的数据
  • 了解其他工具以解码和可视化WMO表驱动代码格式(TDCF)

简介

WMO二进制格式如BUFR和GRIB在气象领域广泛用于交换观测和模型数据,通常需要专业工具来解码和可视化这些数据。

从WIS2下载数据后,您通常需要解码数据以便进一步使用。

有多种代码库可用于编写脚本或程序来解码WMO二进制格式。此外,还有一些工具提供用户界面,无需编写软件程序即可解码和可视化数据。

在本次实践课程中,我们将演示如何使用Jupyter笔记本解码三种不同类型的数据:

  • GRIB2:包含CMA全球区域同化预测系统(GRAPES)生成的全球集合预测数据
  • BUFR:包含ECMWF集合预报系统生成的热带气旋轨迹数据
  • NetCDF:包含月度温度异常数据

在Jupyter笔记本中解码下载的数据

为了演示如何解码下载的数据,我们将使用'decode-bufr-jupyter'镜像启动一个新容器。

该容器将在您的实例上启动一个Jupyter笔记本服务器,其中包括ecCodes库,可用于解码BUFR数据。

我们将使用~/exercise-materials/notebook-examples目录中包含的示例笔记本来解码热带气旋轨迹的下载数据。

要启动容器,请使用以下命令:

docker run -d --name demo-decode-eccodes-jupyter \
    -v ~/wis2-downloads:/root/downloads \
    -p 8888:8888 \
    -e JUPYTER_TOKEN=dataismagic! \
    ghcr.io/wmo-im/wmo-im/demo-decode-eccodes-jupyter:latest

以下是上述命令的详细说明:

  • docker run -d --name demo-decode-eccodes-jupyter 启动一个新的容器,并以分离模式(-d)运行,命名为demo-decode-eccodes-jupyter
  • -v ~/wis2-downloads:/root/downloads 将您的虚拟机上的~/wis2-downloads目录挂载到容器中的/root/downloads目录。这是您从WIS2下载的数据存储位置,之前的实践课程中已介绍如何使用WIS2 Downloader下载数据。
  • -p 8888:8888 将虚拟机上的8888端口映射到容器中的8888端口。这使得您可以通过浏览器访问Jupyter笔记本服务器,地址为http://YOUR-HOST:8888
  • -e JUPYTER_TOKEN=dataismagic! 设置访问Jupyter笔记本服务器所需的令牌。您需要在浏览器中访问服务器时提供此令牌
  • ghrc.io/wmo-im/demo-decode-eccodes-jupyter:latest 指定容器使用的镜像,该镜像预先包含了下一步练习中使用的示例Jupyter笔记本

关于demo-decode-eccodes-jupyter镜像

demo-decode-eccodes-jupyter是为本次培训开发的镜像,使用包含ecCodes库的基础镜像,并添加了Jupyter笔记本服务器以及用于数据分析和可视化的Python包。

此镜像的源代码,包括示例笔记本,可以在wmo-im/demo-decode-eccodes-jupyter找到。

容器启动后,您可以通过浏览器访问学生虚拟机上的Jupyter笔记本服务器,地址为http://YOUR-HOST:8888

您将看到一个屏幕,要求输入“密码或令牌”。

输入令牌dataismagic!以登录Jupyter笔记本服务器(除非您在上述命令中使用了不同的令牌)。

登录后,您应该会看到以下屏幕,列出了容器中的目录:

Jupyter notebook home

双击example-notebooks目录以打开它。您应该会看到以下屏幕,列出了示例笔记本:

Jupyter notebook example notebooks

现在,您可以打开示例笔记本以解码下载的数据。

GRIB2解码示例:来自CMA GRAPES的GEPS数据

打开example-notebooks目录中的文件GRIB2_CMA_global_ensemble_prediction.ipynb

Jupyter notebook GRIB2 global ensemble prediction

阅读笔记本中的说明,并运行单元格以解码下载的全球集合预测数据。通过点击单元格并点击工具栏中的运行按钮或按Shift+Enter运行每个单元格。

执行所有单元格后,您应该会看到一个关于“850hPa温度异常低于-1.5标准差的概率”的可视化图:

Global ensemble prediction temperature anomaly

Question

如何更新此笔记本中的可视化以显示GRIB2文件中的其他消息?

点击查看答案

在笔记本的最后一个单元格中,您会看到以下代码:

# show visualization for message number 8 (Probability of 850hPa temperature anomaly below -1.5 standard deviations)
show_map_visualization(grib_file, 8)

您可以通过更改消息编号来更新此行或添加另一行,以可视化GRIB2文件中的其他消息:

# show visualization for message number 9
show_map_visualization(grib_file, 9)

然后重新运行笔记本中的单元格以查看更新后的图表。

BUFR解码示例:热带气旋轨迹

打开example-notebooks目录中的文件BUFR_tropical_cyclone_track.ipynb

Jupyter notebook tropical cyclone track

阅读笔记本中的说明,并运行单元格以解码下载的热带气旋轨迹数据。通过点击单元格并点击工具栏中的运行按钮或按Shift+Enter运行每个单元格。

最后,您应该会看到一个关于热带气旋轨迹的罢工概率的图表:

Tropical cyclone tracks

Question

结果显示了热带风暴轨迹在200公里范围内的预测概率。如何更新笔记本以显示热带风暴轨迹在300公里范围内的预测概率?

点击查看答案

要更新笔记本以显示热带风暴轨迹在不同距离范围内的预测概率,您可以更新计算罢工概率的代码块中的distance_threshold变量。

要显示热带风暴轨迹在300公里范围内的预测概率:

# set distance threshold (meters)
distance_threshold = 300000  # 300 km in meters

然后重新运行笔记本中的单元格以查看更新后的图表。

解码BUFR数据

您刚刚完成的练习提供了一个使用ecCodes库解码BUFR数据的具体示例。不同的数据类型可能需要不同的解码步骤,您可能需要参考您正在处理的数据类型的文档。

更多信息请参考ecCodes文档

NetCDF解码示例:月度温度异常

打开example-notebooks目录中的文件NetCDF4_monthly_temperature_anomaly.ipynb

Jupyter notebook monthly temperature anomalies

阅读笔记本中的说明,并运行单元格以解码下载的月度温度异常数据。通过点击单元格并点击工具栏中的运行按钮或按Shift+Enter运行每个单元格。

最后,您应该会看到一个关于温度异常的地图:

Monthly temperature anomalies

解码NetCDF数据

NetCDF是一种灵活的格式,在本示例中报告了变量'anomaly'的值,该变量沿着'lat'和'lon'维度报告。不同的NetCDF数据集可能使用不同的变量名称和维度。

使用其他工具查看和解码WMO二进制格式

示例笔记本演示了如何使用Python解码常用的WMO二进制格式。

您还可以使用其他工具解码和可视化WMO表驱动代码格式,无需编写软件,例如:

  • Panoply - 一个跨平台应用程序,可从NetCDF、HDF、GRIB和其他数据集中绘制地理参考和其他数组
  • ECMWF Metview - 一个用于数据分析和可视化的气象应用程序,支持GRIB和BUFR格式
  • Integrated Data Viewer (IDV) - 一个免费的基于Java的软件框架,用于分析和可视化地球科学数据,包括支持GRIB和NetCDF格式

结论

恭喜!

在本次实践课程中,您学习了如何:

  • 运行一个Docker容器,使用"demo-decode-eccodes-jupyter"镜像
  • 运行示例Jupyter笔记本以解码GRIB2、NetCDF和BUFR格式的数据