понедельник, 17 мая 2021 г.

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто. 


def uv2dir(u, v):

    '''

    Источник:

    https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calcs.py

    '''

    import numpy as np    

    direction = (270 - np.rad2deg(np.arctan2(v, u))) % 360

    veloctity = np.sqrt(np.square(u) + np.square(v))

    return direction, velocity


Дъявол в мелочах))

Во-первых, нужно передавать аргументы в arctan2 именно в порядке V, U (сначала Y, потом X). Об этом написано в строке документации функции. Дополнительно можно прочитать на странице Wind Direction Quick Reference от NCAR/UCAR. Вот цитата оттуда:


"This discussion assumes that the two-argument arctangent function, atan2(y,x), returns the arctangent of y/x in the range -π to π radians, -180 to 180 degrees.  C, C++,  Python, Fortran, Java, IDL, MATLAB and R all follow this convention.

Warning: Spreadsheets, including Microsoft Excel, LibreOffice Calc and Google Docs switch the arguments, so that atan2(x,y) is the arctangent of y/x.

To check your software, compute atan2(1,-1). If it equals 2.36 radians (135 degrees) then your software uses the programming language convention and you can use these formulas unchanged. If it equals -0.79 radians (-45 degrees) then your software follows the spreadsheet convention and you must switch the arguments of atan2 in the following equations." и сначала python-овская функция arctan2."

Во-вторых, повороты координатных осей с целью получить именно метеорологическое направление ветра. По традиции в метеорологии:

  • название ветра указывает ОТКУДА он дует. Так южный ветер дуют с юга, а восточный - с востока. Напомню, что для морских течений наоборот;
  • Южный и западный ветра ассоциируются с положительными направлениями компонент ветра V и U соответственно.
Поэтому возникает 270 - это поворот на 90 градусов (в тригонометрическом круге, на котором считаем в радианах, ноль находится на "3ч/востоке", тогда как географический азимут отсчитывается от "12ч/севера").



Также нужно сделать разворот на 180 градусов чтобы получить направление "как в метеорологии" (см. выше).

В-третьих, самый изящный момент - % 360, т.е. остаток от деления на 360. Это лаконичное применение оператора "%" решает проблему выхода расчётов за пределы 360 градусов. В случае, когда направлеие ветра от 0 до 360, этот оператор фактически игнорируется. Но в случае выхода за предел 360 в большую сторону, берётся остаток, т.е. из значения просто вычитается 360. Очень изящное решение - никаких условий и дополнительных проверок! Bravo!
 


понедельник, 12 апреля 2021 г.

Прочитать GRIB с помощью python. Grib format reading using python

Отличная новость для тех, кто активно использует и python и данные в GRIB формате.

"Happy to announce the release of @ECMWF cfgrib 0.9.9.0, the library to access climate and meteo GRIB files with xarray and Python. Highlights: much better performance on big files (10k+ messages), use the official and faster ecCodes bindings."

Ссылка на модуль cfgrib

Для установки через pip: pip install cfgrib==0.9.9.0


суббота, 11 января 2020 г.

PROGEORU в VK

Краткая аннотация моего нового проекта на базе платформы VK: progeoru

===================================
Ясно и коротко. Климат и программирование.

Изучаем климат нашей планету. 
Компьютерные науки и технологии помогают нам в этом.
Актуальная научная информация об изменениях климата, новости об общественных инициативах в сфере климата.
О программировании на python как универсальном инструменте анализа данных.

===================================

Скорее всего проект "ICEKING" переедет туда. Насчёт контента здесь пока неясно, так как в планах на 2020 ясно и чётко стоит ряд jupyter notebooks, которые будут опубликованы на GitHub. Какая-то поддержка сохранится, но что именно - неясно. Следите за новостями, более подробно будет в следующем сообщении))


среда, 4 декабря 2019 г.

ICEKING #1

Всем привет!

Так как в последнее время я активно мигрирую от "climate scientist" к "arctic climate scientist", то неплохо бы начать собирать не только классные и полезные заметки про python, который я очень нежно люблю и уважаю (а также гоняю в хвост и гриву), но и что-то про морской лёд, изменения климата в Арктике и перспективы СМП.

Сегодня первая подборка интересных и полезных заметок о морском льде (sea ice).

0) Узучите основы для понимания и исследования #climate data вместе с Climate Data Primer.

1) Начнём с терминологии в теме морского льда: что к чему и как. И не забудем о спутниках (микроволновой радиометрии), которые позволяют нам измерять концентрации льда в любое время суток.

2) На Kaggle есть материал на основе данных sea ice NSIDC. Имя Kaggle говорит само за себя;

3)  Хорошая "базовая" статья  A long-term and reproducible passive microwave sea ice concentration data record for climate studies and monitoring (Peng et al., 2013) по созданию базы данных морского льда от NSIDC.

4) Новости за октябрь о состоянии морского льда в Арктике от NSIDC

5) How to calculate sea ice changes (NASA Video)

6) The Danish Arctic research institutions present updated knowledge on the condition of two major components of the Arctic: The Greenland Ice Sheet and the sea ice

P.S. Подобные посты будут сопровождаться хэштегом iceking и iceking_news.

среда, 10 апреля 2019 г.

Набор полезных ссылок


11 апреля 2019

  1. Python Graph Gallery - примеры графики на python;



10 апреля 2019

  1. Прорабатываем навык использования группировки и визуализации данных в Python;
  2. Проект Xarray как подобие pandas от создателей NCL для климатологов;
  3. Dask provides advanced parallelism for analytics, enabling performance at scale for the tools you love;
  4. Введение в аннотации типов Python -> PEPs 484, 526, 3107;
  5. PyPy, Cython, numba
  6. тестирование с помощью pytest, mypy, pylinter и др.

пятница, 29 марта 2019 г.

NCL: pivot to Python

Это свершилось.

NCAR решил отказаться от своего собственного скриптового языка NCAR Command Language в пользу языка Python как основного скриптового инструмента визуализации и анализа данных. Новость несвежая, аж от 6 февраля 2019 года.

Универсальность победила специализацию.

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...