Перейти к содержанию

Декодирование данных из бинарных форматов ВМО

Результаты обучения!

К концу этой практической сессии вы сможете:

  • запустить контейнер Docker для образа "demo-decode-eccodes-jupyter"
  • запустить пример Jupyter-ноутбуков для декодирования данных в форматах GRIB2, NetCDF и BUFR
  • узнать о других инструментах для декодирования и визуализации форматов, основанных на таблицах ВМО (TDCF)

Введение

Бинарные форматы ВМО, такие как BUFR и GRIB, широко используются в метеорологическом сообществе для обмена данными наблюдений и моделирования и обычно требуют специализированных инструментов для декодирования и визуализации данных.

После загрузки данных из WIS2 вам часто потребуется декодировать их для дальнейшего использования.

Существуют различные библиотеки кода, которые позволяют писать скрипты или программы для декодирования бинарных форматов ВМО. Также доступны инструменты с пользовательским интерфейсом для декодирования и визуализации данных без необходимости написания программного обеспечения.

В этой практической сессии мы продемонстрируем, как декодировать три различных типа данных с использованием Jupyter-ноутбука:

  • GRIB2, содержащий данные для глобального ансамблевого прогноза, созданного системой CMA Global Regional Assimilation PrEdiction System (GRAPES)
  • BUFR, содержащий данные о тропических циклонах из ансамблевой прогнозной системы ECMWF
  • NetCDF, содержащий данные о месячных аномалиях температуры

Декодирование загруженных данных в Jupyter-ноутбуке

Чтобы продемонстрировать, как можно декодировать загруженные данные, мы запустим новый контейнер с использованием образа 'decode-bufr-jupyter'.

Этот контейнер запустит сервер Jupyter-ноутбуков на вашей виртуальной машине, который включает библиотеку ecCodes, которую можно использовать для декодирования данных BUFR.

Мы будем использовать пример ноутбуков, включенных в ~/exercise-materials/notebook-examples, чтобы декодировать загруженные данные о тропических циклонах.

Для запуска контейнера используйте следующую команду:

docker run -d --name demo-decode-eccodes-jupyter \
    -v ~/wis2box-data/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 ~/wis2box-data/downloads:/root/downloads монтирует каталог ~/wis2box-data/downloads на вашей виртуальной машине в /root/downloads в контейнере. Здесь хранятся данные, загруженные из WIS2
  • -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 в вашем веб-браузере.

Вы увидите экран с запросом "Password or token".

Введите токен dataismagic!, чтобы войти на сервер Jupyter-ноутбуков (если вы не использовали другой токен в команде выше).

После входа вы должны увидеть следующий экран с перечнем каталогов в контейнере:

Jupyter notebook home

Дважды щелкните на каталоге example-notebooks, чтобы открыть его. Вы должны увидеть следующий экран с перечнем примерных ноутбуков:

Jupyter notebook example notebooks

Теперь вы можете открыть примерные ноутбуки для декодирования загруженных данных.

Пример декодирования GRIB2: данные GEPS от CMA GRAPES

Откройте файл GRIB2_CMA_global_ensemble_prediction.ipynb в каталоге example-notebooks:

Jupyter notebook GRIB2 global ensemble prediction

Прочитайте инструкции в ноутбуке и выполните ячейки для декодирования загруженных данных для глобального ансамблевого прогноза. Выполняйте каждую ячейку, щелкая на ней и затем нажимая кнопку запуска на панели инструментов или нажимая Shift+Enter.

В конце ноутбука вы должны увидеть карту, отображающую давление, приведенное к среднему уровню моря (MSL):

Global ensemble prediction temperature

Question

Результат отображает температуру на высоте 2 метров над уровнем земли. Как вы бы обновили ноутбук, чтобы отобразить скорость ветра на высоте 10 метров?

Нажмите, чтобы увидеть ответ

Чтобы обновить ноутбук, выполните следующее.

Пример декодирования BUFR: тропические циклоны

Откройте файл BUFR_tropical_cyclone_track.ipynb в каталоге example-notebooks:

Jupyter notebook tropical cyclone track

Прочитайте инструкции в ноутбуке и выполните ячейки для декодирования загруженных данных о тропических циклонах. Выполняйте каждую ячейку, щелкая на ней и затем нажимая кнопку запуска на панели инструментов или нажимая Shift+Enter.

В конце вы должны увидеть график вероятности удара тропического циклона:

Tropical cyclone tracks

Question

Результат отображает предсказанную вероятность траектории тропического циклона в пределах 200 км. Как вы бы обновили ноутбук, чтобы отобразить вероятность в пределах 300 км?

Нажмите, чтобы увидеть ответ

Чтобы обновить ноутбук для отображения вероятности траектории тропического циклона на другом расстоянии, вы можете обновить переменную distance_threshold в блоке кода, который вычисляет вероятность удара.

Чтобы отобразить вероятность траектории тропического циклона в пределах 300 км:

# set distance threshold (meters)
distance_threshold = 300000  # 300 км в метрах

Затем выполните ячейки в ноутбуке заново, чтобы увидеть обновленный график.

Декодирование данных BUFR

Упражнение, которое вы только что выполнили, предоставило конкретный пример того, как можно декодировать данные BUFR с использованием библиотеки ecCodes. Разные типы данных могут требовать различных шагов декодирования, и вам может потребоваться обратиться к документации для типа данных, с которым вы работаете.

Для получения дополнительной информации обратитесь к документации ecCodes.

Пример декодирования NetCDF: месячные аномалии температуры

Откройте файл NetCDF4_monthly_temperature_anomaly.ipynb в каталоге example-notebooks:

Jupyter notebook monthly temperature anomalies

Прочитайте инструкции в ноутбуке и выполните ячейки для декодирования загруженных данных о месячных аномалиях температуры. Выполняйте каждую ячейку, щелкая на ней и затем нажимая кнопку запуска на панели инструментов или нажимая Shift+Enter.

В конце вы должны увидеть карту аномалий температуры:

Monthly temperature anomalies

Декодирование данных NetCDF

NetCDF — это гибкий формат, который в данном примере содержит значения переменной 'anomaly', представленные вдоль измерений 'lat', 'lon'. Разные наборы данных NetCDF могут использовать разные имена переменных и измерений.

Использование других инструментов для просмотра и декодирования бинарных форматов ВМО

Примерные ноутбуки продемонстрировали, как можно декодировать широко используемые бинарные форматы ВМО с использованием Python.

Вы также можете использовать другие инструменты для декодирования и визуализации форматов, основанных на таблицах ВМО, без необходимости написания программного обеспечения, такие как:

  • Panoply — кроссплатформенное приложение для построения графиков географически привязанных и других массивов из NetCDF, HDF, GRIB и других наборов данных
  • ECMWF Metview — метеорологическое приложение для анализа и визуализации данных, поддерживающее форматы GRIB и BUFR
  • Integrated Data Viewer (IDV) — бесплатная программная платформа на базе Java для анализа и визуализации геонаучных данных, включая поддержку форматов GRIB и NetCDF

Заключение

Поздравляем!

В этой практической сессии вы научились:

  • запускать контейнер Docker для образа "demo-decode-eccodes-jupyter"
  • запускать пример Jupyter-ноутбуков для декодирования данных в форматах GRIB2, NetCDF и BUFR