CDO (Climate Data Operators) — рабочая лошадка для обработки netCDF файлов
Задача: проводить манипуляции с файлами формата netCDF, в том числе осреднение и выборку по различным осям, установку временной оси, интерполяцию полей, объединение и разделение файлов.
?нструмент: CDO (Climate Data Operators)
Причина, по которой я так долго тянул с постом о cdo, наверное в том, что они настолько незаметны и настолько часто мной используются, что я практически забываю об их существовании, воспринимая больше просто как некие обычные команды шела. Однако без них жизнь человека работающего с netCDF (а также GRIB) файлами становится гораздо неуютнее. На сегодняшний день существует около 400 операторов, позволяющих проводить первичную обработку файлов. Как бы я не любил Python, поручить ему обработку террабайтов информации значит обречь себя на очень долгое ожидание, тогда как cdo, написанные на C++, справляются с крупномасштабными задачами сравнительно быстро, при этом обладают очень простым для понимания синтаксисом.
В посте я расскажу об установке CDO под Ububtu 10.04 и Windows (да, они есть и под винду) покажу как пользоваться несколькими наиболее популярными их функциями.
Репозиторий с файлами находится по этому адресу.
Windows
Виндузятники могут скачать экзешник и практически начинать пользоваться cdo, никакой установки как таковой не требуется, главное, чтобы cdo.exe находился в той директории где вы планируете обрабатывать свои данные. Операторы и опции одинаковы для Windows и Linux версий.
linux (Ubuntu 10.04)
При этом устанавливается сравнительно старая версия cdo — 1.4.0.1, но для большинства приложений ее должно быть достаточно. Если вы хотите версию поновее, то придется компилировать ее самостоятельно. Приятным дополнением к cdo является пак с необходимыми библиотеками, которые должны в идеале компилироваться одной командой. Называется он libs4cdo и находится в том же репозитории, что и основная программа, а тут лежит документация по lib4cdo.
Скачиваем файлы
Вы можете попробовать работать сразу с имеющимися у вас файлами, но если хотите для начала следовать всем командам в этом небольшом туториале буквально, то скачайте пять файлов содержащих ежедневные данные по приземной температуре (NCEP реанализ) с этой странички. Я буду использовать года с 1990 по 1994.
?спользование cdo
?спользование предельно просто. Чаще всего вы сначала вводите команду «cdo«, затем оператор, файл который необходимо обработать и, наконец, файл, в который будут записаны результаты работы. В более общем случае синтаксис выглядит как:
Вы видите, что операторы можно комбинировать, мы к этому еще вернемся.
Получаем информацию о файле
Давайте для начала посмотрим, что содержится в наших файлах. Наберем:
Получим краткую информацию о файле:
-1 : Institut Source Table Code Time Typ Grid Size Num Levels Num
1 : unknown unknown 0 -1 variable I16 10512 1 1 1
Horizontal grids :
1 : lonlat > size : dim = 10512 nlon = 144 nlat = 73
lon : first = 0 last = 357.5 inc = 2.5 degrees_east circular
lat : first = 90 last = -90 inc = -2.5 degrees_north
Vertical grids :
1 : surface : 0
Time axis : 365 steps
RefTime = 0001-01-01 00:00:00 Units = hours Calendar = STANDARD
YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss
1990-01-01 00:00:00 1990-01-02 00:00:00 1990-01-03 00:00:00 1990-01-04 00:00:00
Видим, что наш файл содержит наборы матриц размером 144 (долгота) на 73 (широта), шаг по широте и долготе составляет 2.5 градуса. Значения приведены только для поверхности за 365 дней. Ниже вы видите перечисление конкретных дат, на которые представлены поля. Конечно, оператор sinfo не единственная возможность узнать подробности о вашем файле. Например оператор nmon выдаст вам информацию о количестве месяцев, за которые имеются данные в файле, а showmon покажет что это за месяцы. Эти операторы необходимы больше не для вашей информации, а для написания более сложных скриптов обработчиков, в которые необходимые значения могут передаваться автоматически.
Объединение и разделение файлов
Для начала давайте сделаем из пяти наших файлов один, причем объединим их по времени:
для тех кто не знаком с шаблонами поясню, это в общем то же самое что:
В итоге получаем файл, в котором содержатся ежемесячные значения для пяти лет (вы можете это проверить выполнив оператор sinfo для файла air.sig995.1990-1994.nc). Для чего это может быть нужно? Например, теперь вы хотели бы получить отдельные файлы, в каждом из которых содержались бы значения только за определенный месяц за все пять лет. Для этого существует команда splitmon
в итоге вы получаете 12 файлов, в каждом значения для одного месяца. Точно также можно разделять по часам, дням, сезонам, годам (в этом случае получатся файлы идентичные нашим изначальным).
Выборка
Вернемся к нашему объединенному файлу. Допустим нам необходимо вытянуть из него лишь несколько месяцев. Можно, конечно, сначала создать отдельный файл для каждого месяца, а затем соединить те что нужны, но есть другой, более простой способ. Вы можете выбрать нужные вам месяцы:
в этом случае январь, март, сентябрь. Примерно также вы можете выбирать нужные вам года, переменные, уровни. Если вас, например, интересует только Арктика, вместо того чтобы ворочать файлами для всего глобуса, вы можете выбрать только интересующую вас область при помощи команды sellonlatbox .
Продолжение в следующем посте 🙂
Mne kazaloc’ 4to cdo ne ponimaet * (t.e. shelovskie shabloni)…ili i ne prava?
2ksenya
Вполне себе понимает ) Тут, я думаю, даже не от cdo все зависит, а от шела, который формирует список согласно шаблону и уж потом передает его cdo. Я проверил, кстати, работают ли шаблоны в Windows, оказалось да, работают 🙂
А где обещанное продолжение …)))
Hello!
After I put command in Linux shell to install:
«sudo apt-get install cdo»
it requires the password:
«[sudo] password for root:»
where I can find it?
2Olga Lyapina
Пароль, который спрашивает sudo — это пароль от вашего аккаунта в линукс. Тот пароль, что вы используете, например, при входе в систему.
Не подскажите, как конвертировать данные из формата .grb2 в .nc формат??
2patamates
cdo -f nc copy file.grb2 file.nc
Николай,
А есть ли какие-либо ограничения в размере конвертируемого файла для нормальной работы CDO?
(У меня файл в grb2-формате весит около 500 мб)
2patamates
500 мегабайт не должно составить труда. CDO разработаны, чтобы ворочать гигабайтами 🙂
Здравствуйте, Николай!
При выборке и конвертации netCDF файла в текстовый формат возникла проблема при открытии. В текстовом файле непонятные крокозябры вместо данных. ОС — Windows 7. Подскажите, что я может делаю не то?
?спользую команду:
cdo sellonlatbox,120,-90,20,-20 inputFile.nc outputFile.txt
А, все, разобралась)) надо было просто сначала сделать выборку в .nc формат, а уж его и конвертнуть в .txt)
по предполагаемой ссылке данных нет http://www.esrl.noaa.gov/psd/cgi-bin/db_search/DBListFiles.pl?did=33&tid=27148&vid=668
2simiechi
Действительно, прямая ссылка на лист с файлами не работает. Поменял на ту, что ведёт на результат поиска приземной ежедневной температуры.
Николай, подскажите как можна в СDO обрезать територию, например Украину? Спасибо!
2ruban
Если сетка регулярная, и широты с долготами проассоциированы с переменными, то sellonlatbox, если есть просто поля, то ориентироваться можно просто по индексам и использовать selindexbox.
Like!! Really appreciate you sharing this blog post.Really thank you! Keep writing.
Where To Order Progesterone Mastercard Accepted Buy Cialis Cialis Experiencia Buy Cialis T
Acheter Viagra Pfizer France Buy Cialis Levitra Efectos En Jovenes Cialis Cialis Generika Indien
Achat Cialis En France buy cialis online with a prescription Secure Tab Progesterone On Line Overseas With Free Shipping Highland Cialis Healthy Males Viagra Reviews
Levitra 10 Mg Quotazione cialis tadalafil Amoxicillin Skin Disorders Dosage Cialis Amoxicillin Dosage 875
fithelpdesk
jordan 13 hvit silver red 2017 game prince amukamara mens jersey new york giants 20 home royal blue nfl north face shelbe raschel vest jordan ma maniere low top lebrons wmns air max plus se