PYTHON можливості та перспективи у гідрометеорології
PYTHON: можливості та перспективи в гідрометеорології
Мова програмування python
Python [1] – це високорівнева мова програмування, представлена Гвідо ванРоссумом (Guido vanRossum) у 1991 році. Python відноситься до вільно розповсюджуваного програмного забезпечення (СПО) і поширюється під PythonSoftwareFoun dationLicense. Це дозволяє максимально широко і вільно використовувати цю мову програмування в різних проектах, у тому числі наукових. Python є мультиплатформною (Windows/Linux/MacOS) мовою програмування, що сприяє інтеграції якомога більшої кількості користувачів у єдину спільноту. За час свого існування (понад 20 років) в ході історичного та логічного розвитку в мові python сформувалося дві гілки, що називаються python2 та python3 відповідно. Остання є майбутнім мови, а python2 колись зникне. Для користувачів-початківців рекомендується відразу використовувати гілку python3. Для операційних систем сімейства Windows розроблено спеціальні дистрибутиви різного призначення [2]. Більшість надаються безкоштовно, існують і комерційні зборки з розширеною підтримкою.
Популярність python
Популярність python забезпечується простим і прозорим синтаксисом мови, його стабільністю та широкими можливостями. Python однаково підходить як для навчання школярів та студентів програмування, так і для аналізу даних.
За python існує безліч навчальних матеріалів (як цифрових, так і друкованих) як англійською, так і українською мовами, що значно спрощує освоєння даної мови програмування. Однією з найбільш популярних книг з навчання основ мови python є вільно розповсюджувана книга «Укус пітона»[8].
Короткий огляд модулів для дослідницької роботи
Модульність python дозволяє просто та елегантно використовувати спеціальні розробки, що виходять за межі стандартної бібліотеки python. А можливість портування коду, створеного іншими мовами програмування, дозволяє використовувати перевірені та оптимізовані алгоритми. Це значно підвищує надійність та стабільність коду, написаного на python.

NumPy та SciPy. Модулі наукових обчислень
NumPy розширює стандартну бібліотеку python новим типом даних – масивами (тип numpy.ndarray) та надає ефективний інтерфейс для роботи з багатовимірними масивами (у тому числі з векторами та матрицями). Де факто NumPy - це основна математична бібліотека (стандартною є math), яка містить величезну кількість математичних функцій, алгоритми перетворення Фур'є, генерації випадкових чисел, обчислювальних методів лінійної алгебри. Також NumPy дозволяє включати код, написаний на C/C++ або Fortran, програму, створену на python.
Модуль SciPy спирається на NumPy та розширює його можливості алгоритмами з різних галузей науки, математики та інженерії. Зокрема, SciPy дозволяє проводити статистичний аналіз даних та їх інтерполяцію, вирішувати ОДУ, аналізувати спектри, працювати з різними форматами даних та багато іншого.
Matplotlib і Basemap. Модулі створення графіки
Графічна бібліотека Matploltlib дозволяє створювати графіку публікаційної якості: прості графіки, гістограми, кругові діаграми, «ящики з вусами», малюнки в ізолінії з пошаровим забарвленням та багато інших. Підтримується можливість створення малюнка, що складається з кількох графіків чи діаграм (підтримкаsubplots). Всі елементи малюнка (товщина і частота поділів, їх колір, розмір та тип шрифту підписів, прозорість ліній тощо) можуть бути налаштовані користувачем. Під час створення малюнків підтримуються як формати растрової графіки (jpeg, png, tiff), і векторної (pdf, eps, svg). Можна встановити параметри розміру малюнка та його dpi. Варто відзначити вільне відображення математичних формул, що представлені в коді системи комп'ютерної верстки LaTex.
Так як Matplotlib є python-модулем, тобто частиною мови програмування, це дає можливість автоматизовано створювати велику кількість малюнків (а взагалі і анімації). Це вигідно відрізняє його від пропрієтарних графічних пакетів наукової та інженерної графіки, які мають яскравий графічний інтерфейс, але мало пристосовані до поточного створення малюнків.
Розширення пакета Matplotlib для відображення географічної інформації Basemap дозволяє створювати карти-схеми (вимоги до створення дійсних карток перевершують можливості даного розширення) у різних картографічних проекціях. Існує також альтернативний картографічний пакет Cartopy [9], який можна використовувати для тих самих цілей. За допомогою картографічних пакетів python легко відображати дані як по всій земній кулі, так і по конкретному географічному району. Форма їх уявлення може бути різна – від простих ліній і значків до ліній струму та спеціальних символів. На рис. 2 наведено приклад карти-схеми, створеної за допомогою пакета Basemap.

Можливості python вгідрометеорології
Python у сукупності з представленими вище модулями може бути основним інструментом аналізу та візуалізації при роботі з гідрометеорологічними даними (гідрологія, метеорологія, океанологія).
Python дозволяє працювати безпосередньо з текстовими даними (ASCII, НТМL, xls/xlsx), так і з даними різних форматів зберігання гідрометеорологічних даних, таких як BUFR, GRIB, netCDF. Так, наприклад, доступ до файлів формату NetCDF здійснюється через модуль netcdf4 пакета SciPy. Через модуль SQLite3 python надає інтерфейс для роботи з
базою даних SQLite. Підтримуються інші бази даних, наприклад MySQL. Таким чином, створені користувачем дані можуть бути записані в специфічних форматах для зберігання або обміну.
Експериментальні дані, отримані з банків даних, або оригінальні виміри, можна аналізувати за допомогою статистичного, спектрального, дисперсійного або іншого виду аналізів. Для цього не потрібно шукати спеціальні підпрограми або писати оригінальний (часто майже не оптимізований) код, де є велика ймовірність виникнення помилки кодування. Достатньо скористатися пакетами NumPy та SciPy, перевіреними сотнями тисяч користувачів.
Після проведення аналізу чи перетворення даних зазвичай потрібно візуалізувати результат. Для гідрологічних даних за допомогою Matplotlib легко уявити на одному малюнку часовий ряд вимірювань, гідрограф і кілька теоретичних розподілів, що найбільш близько описують емпіричні дані на основі вибраних статистик (хі-квардрат, наприклад). Для метеорологічних даних можна побудувати такі специфічні графіки, як аерологічна діаграма та метеограма, або побудуватикліматичні карти-схеми різного змісту; в океанології – вертикальні профілі температури та солоності, відобразити просторові поля характеристик Світового океану (температура, солоність, швидкість течій тощо).
Приклад роботи: вихідні поля приземної температури (або температури поверхні океану), які представлені на сайті розробника у форматах netcdf або grib, можуть бути безпосередньо передані в масиви, з якими користувач може провести аналіз, тобто розрахувати емпіричні статистики або побудувати спектр поля. Вибравши необхідний період або сформувавши свій (наприклад, перейшовши від місячних до сезонних значень), можна проаналізувати окремо, взявши зріз від масиву, а потім візуалізувати. Так, для чотиривимірного поля температури T (x, y, z, t) можна легко побудувати як карту-схему на вибраному рівні, так і об'ємну фігуру за один часовий проміжок або створити анімацію вертикального розрізу через вибрану довготу/широту.
Висновок
Python надає величезні можливості для вирішення найрізноманітніших завдань, що виникають у сфері наукового вивчення гідрометеорологічної інформації. Робота з різними форматами даних, обробка даних, їх аналіз та візуалізація, створення автоматизованих технологій – все це може бути зроблено за допомогою однієї мови програмування python. Де-факто python є універсальною мовою наукових обчислень, вона широко поширена в європейських та американських дослідницьких інститутах та університетах. Простота вивчення та широка підтримка спільнотою робить python дуже привабливим для вивчення. Розповсюдження та впровадження мови програмування python у повсякденну дослідницьку роботу дозволяє помітно розширити коло завдань, зробити дослідження більш наукомісткими.наочними, зберігши при цьому практичність та читання коду. Python – це можливість зробити заплутане складним, складне – простим, а неявне – явним.
Роботу виконано за підтримки РНФ (проект 14-50-00095).