Задача: скачать данные реанализов европейского центра среднесрочных прогнозов (ECMWF)
Реанализы, подготовленные в европейском центре среднесрочных прогнозов, являются одними из самых широко используемых атмосферных реанализов. Такие реанализы как ERA40, ERA15, ERA Interim, ERAClim предоставляют доступ к большому числу параметров о состоянии атмосферы.
Центр ECMWF поддерживает скриптовую (в т.ч. и python) поддержку для загрузки данных реанализов. Ниже приведена инструкция для языка python.
Инструкция
Ссылка на оригинальную инструкцию ECMWF.
Просто так скачать реанализы ECMWF нельзя - нужна регистрация. Это может занять некоторое время (несколько суток). Заполняем форму и ждём, пока на указанный адрес электронной почты вам не пришлют логин и пароль.
Чтобы обеспечить доступ к серверам ECMWF необходимо установить ECMWF API. Он реализован в виде python-модуля + контрольного файла (.ecmwfapirc), в котором содержатся данные вашего аккаунта. Соответственно, нужно выполнить следующие шаги:
1) Скачать python-модуль с помощью pip (проще всего через консоль)
:
pip install https://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz
2) Поместить в папку
%USERPROFILE% (обычно, c:/users/ivan/) файл с именем ".ecmwfapirc", который должен иметь следующее содержимое:
{
"key"
:
"XXXXXXXXXXXXXXXXXXXXXX"
,
"email"
:
"john.smith@example.com"
}
3) Заменить "key"-строку на актуальный ключ, который можно получить после регистрации на портале ECMWF. Т.е. сначала нужно авторизоваться, а затем заказать ключ.
Всё!
Теперь можно писать python-script для загрузки данных. Ниже приведён скрипт для
загрузки данных ERA Interim об осадках (код параметра 228.128) за период
1979-2017 с временным разрешением 3ч для области 30-60 в.д. и 50-70 с.ш.
Выходной формат - netcdf
P.S.
Можно использовать графический режим (также требует регистрации и авторизации)
для уточнения деталей запроса для загрузки данных с помощью скрипта. После
выбора параметров внизу будет кнопка "view Mars Request". После
нажатия на эту кнопку откроется окно, где будет представлен сам MARS-запрос и
его отображение в виде python-скрипта.
#!/usr/bin/env python
import os
import calendar
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
cwd = os.getcwd()
years = range(1979, 2017)
for y in years:
for m in range(1, 13):
d = calendar.monthrange(y , m)[1]
if m < 10:
m = '0{}'.format(m)
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": "{0:}-{1:}-01/to/{0:}-{1:}-{2:}".format(y, m, d),
"expver": "1",
"grid": "0.75/0.75",
"levtype": "sfc",
"param": "228.128",
"step": "3/6/9/12",
"stream": "oper",
"time": "00:00:00/12:00:00",
"type": "fc",
"target": "erai_tp_{}_{}.nc".format(y, m),
'area' : "50./30./70./60.",
'format' : 'netcdf'
})
P.P.S. Ссылка "О time и steps".
UPD. 2018/07/06
Можно скачивать данные в один файл - годовой, например. Ниже приведён код, который скачивает 1460-1464 значений (6ч шаг по времени, 0-6-12-18ч анализа данных) в один файл для данного года сyear
from ecmwfapi import ECMWFDataServer
import numpy as np
server = ECMWFDataServer()
cyear = 2005
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": "{0:}-01-01/to/{0:}-12-31".format(cyear),
"expver": "1",
"grid": "0.75/0.75",
"levtype": "sfc",
"param": "165.128/166.128",
"step": "0",
"stream": "oper",
"time": "00:00:00/06:00:00/12:00:00/18:00:00",
"type": "an",
"target": "eraNATS_an_{}.nc".format(cyear),
'area' : "60./19.5/90./90.",
'format' : 'netcdf'
})
Комментариев нет:
Отправить комментарий