Конвертируем netCDF в ASCII при помощи Python в Windows

map_eurЗадача: Помочь друзьям виндузятникам сконвертировать netCDF в ASCII, попутно установив на их компьютеры Python, в надежде, что они таки постепенно забудут про дельфи, фортран и прочие гадости. Заодно попробовать удобно ли в ipython notebook писать посты.

?нструменты: cdo, Pyhton(x,y), ipython notebook

Важно: Этот пост изначально целиком написан в ipython notebook, что значит вы сможете при наличии установленного ipython notebook (как это сделать под Windows смотри ниже) исполнять и изменять код представленный в посте. Читать пост с хорошим форматированием, так как оно выглядит в ноутбуке, а также загрузить файл ноутбука можно здесь (загрузка файла в правом верхнем углу). Также доступна pdf версия этого поста автоматически сгенерированная nbconverter. А ещё версия этого поста в виде мимимишной презентации reveal. А теперь собственно пост:

Люди работающие под виндоуз любят ASCII, я знаю, я сам был такой. Они готовы переводить в ASCII всё на свете, включая данные моделей IPCC, которые занимая в бинарном формате сотни гигабайт, будучи переведены в ASCII превращаются в монстров, сжирающих всё доступное дисковое пространство в радиусе нескольких километров. Но таковы реалии виндузовой жизни, многие программы там, особенно занимающиеся отрисовкой и анализом данных, хотят, чтобы им скармливали текст и только текст.

У проблемы перевода из netCDF в ASCII существует множество решений. Можно сделать дамп всего файла, заголовка, или отдельной переменной при помощи программки ncdump.exe. Небольшую инструкцию как это сделать и где взять эту неуловимую программку можно почитать здесь (там пишут про HDF, но для netCDF эта инструкция также подходит). Правда этот дамп вам придётся потом ещё долго и печально разбирать, поскольку то, что вы увидите, будет довольно сильно отличаться от желаемой таблички время/широта/долгота/значение (я знаю мечтаете вы именно об этом :)).

Тем кто знаком с Matlab с некоторых пор вообще стало хорошо, поскольку там появилась поддержка netCDF файлов из коробки и о том, как их там открывать можно почитать тут.

Здесь я расскажу как сконвертировать netCDF в ASCII при помощи Python, при этом формат вывода вы сможете задавать какой пожелаете. Упражняться будем, как обычно, на файлах NCEP реанализа.
Read more »

Простой график исчезновения льда в Арктике при помощи PyNGL

Задача: Нарисовать xy график для нескольких функций. Масштаб по оси ординат одинаковый.

?нструменты: Python, PyNGL

График будет простой как тапок:
sie_1900_2100.jpg

Единственная сложность которая может возникнуть это подпись к осям, но и это не большая проблема.

Для начала скрипт:
Read more »

Очередной конвертер данных в Python

Задача: как обычно перевести данные из одного формата в другой. Будем делать из одного большого исходного файла много мелких, при этом названия будем выцеплять из заголовков столбцов.

?нструменты: Python с модулями sys, math, string

Задача тривиальная и решение у неё простое.

?значальный файл содержит в себе следующую таблицу
con3_3.png
Взять его можно отсюда — m2a.txt

Это результаты измерений течения при помощи ADCP где то в районе моря Лаптевых, если кому интересно ) Первые пять столбцов — день, месяц, год, часы, минуты. Они нам не нужны. Оставшиеся шесть это то что нам, собственно, нужно — сами значения. E — восточная компонента течения, N — северная. Цифры у букв означают глубину.

Наша задача создать по отдельному файлу для каждой из глубин, в котором было бы всего два столбика — E и N. При этом NaN должно быть заменено на 9999.

Read more »

Читаем ascii файл в Python

Задача: прочитать файл с ascii данными и разбить его по матрицам

?нструменты: NumPy, PyNGL, SciPy

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

Некоторые видят в NumPy хорошую альтернативу MATLAB. Эти два языка имеют некоторое сходство: они оба являются интерпретируемыми и оба позволяют пользователю писать быстрые програмы, поскольку большинство операций производится над массивами и матрицами а не над скалярными значениями. MATLAB обладает тем преимуществом что в нём встроены тысячи математических функций и ещё гораздо больше доступно в коммерческих и свободных библиотеках. В то же время NumPy является более современным и полным языком программирования, а также open source и бесплатным продуктом. Библиотека SciPy добавляет ещё больше MATLAB подобной функциональности, а Matplotlib — пакет обеспечивающий MATLAB подобный функционал в области графики. Хороший рассказ о питоновских библиотеках которыми можно заменить матлаб можно прочесть здесь.

Ну и поскольку для океанолога главным вопросом при изучении любого языка является «как читать и записывать данные», то с этого и начнём.

Read more »