Mapas de reanálise com python

Nesse post, veja sobre como baixar e fazer mapas com dados do ERA5 usando pacotes e scripts de python. Para mais informações sobre reanálise e formatos de arquivo, veja o post Dados de Reanálise. Os códigos mencionados no texto estão no Github: viniroger/ERA5_maps.

Mapa de vento e temperatura em 850 hPa na manhã de evento de geada em vários pontos da região Sul e SP, após evento de neve no Sul
Mapa de vento e temperatura em 850 hPa na manhã de evento de geada em vários pontos da região Sul e SP, após evento de neve no Sul

O Centro Europeu de Previsão de Tempo (ECMWF) instituiu o projeto “ECMWF Re-Analysis” (ERA), que possui dados desde 1950 (até 1978 em caráter preliminar) até o presente. O ERA5, quinta base produzida pelo grupo, combina grandes quantidades de observações históricas em estimativas globais usando modelos avançados e sistemas de assimilação de dados – substitui o ERA-Interim, que parou de ser produzido em 31 de agosto de 2019. Ele fornece estimativas de hora em hora de um grande número de variáveis ​​climáticas atmosféricas, terrestres e oceânicas. Os dados cobrem a Terra em uma grade de 30 km e resolvem a atmosfera usando 137 níveis da superfície até uma altura de 80 km.

Como baixar dados do ERA5 usando python

Os “datasets” são disponibilizados através do Climate Data Store (CDS) – Copernicus. Você pode usar a API do CDS para baixar os dados diretamente pelo python. Primeiramente, você deve fazer um cadastro no site do ECMWF para gerar uma chave (key) para seu identificar de usuário (uid). Considerando a URL abaixo, você deve gerar um arquivo conforme segue, para ser salvo como o arquivo oculto “~/.cdsapirc” na sua home:

url: https://cds.climate.copernicus.eu/api/v2
key: {uid}:{key}

Para baixar os dados ou montar a chamada no python para download, acesse a interface gráfico online. Seguem exemplos de link:

Na aba “Download data”, selecione o tipo de produto (Reanalysis), variável(eis), ano(s), mês(es), dia(s), hora(s) e limites de área em latitudes/longitudes. Escolha o formato do dado (GRIB ou NetCDF) e baixe o arquivo diretamente do site ou clique em “Show API request” para gerar um script em python a ser usado. No projeto do Github, existem dois modelos já prontos para uso, podendo ser editados diretamente: API_levels.py, para variáveis de múltiplos níveis, e API_single.py.

Os arquivos usados como exemplo baixam todos os horários entre os dias 24 e 30 de julho de 2021, gerando os arquivos “levels.nc” e “slp.nc” na pasta “input” (previamente criada). A área de recorte, as variáveis e os níveis de pressão podem ser vistos diretamente nos arquivos API, que apresenta as variáveis em formato dicionário e fazendo uso de vetores. No arquivo, a ordem da área de recorte é: N, W, S, E.

Para baixar os arquivos ERA5 usando esse script python, você deverá também instalar o pacote “cdsapi”. Isso será explicado no próximo item, que também indica a criação de um ambiente virtual para instalar também os outros pacotes necessários para os scripts de confecção dos mapas.

Como instalar o python e pacotes necessários

Para criar o ambiente virtual de nome “era5” com a última versão de python 3 e os principais pacotes utilizados, execute o seguinte comando:

conda create --name era5 python=3 numpy matplotlib netcdf4 scipy

Após criar o ambiente, ative-o através do comando “conda activate era5”. Para instalar o pacote basemap, pode ser melhor instalar separadamente, já que ele geralmente exige downgrade de vários pacotes:

conda install basemap basemap-data-hires # segundo pacote permite resolução de imagem maior

Através do pip, também instalado, você poderá instalar outros pacotes, como o “emulador” de GRADS:

pip install mygrads==0.0.3 # versões posteriores tem muitas incompatibilidades

Para baixar os dados do ERA5 via python, deve-se instalar esse pacote também, que precisa informar um canal extra de repositórios:

conda install -c conda-forge cdsapi

Com isso, basta executar “python NOME_DO_SCRIPT.py” para baixar os dados, conforme o nome do script.

Descrição dos scripts e métodos em python

O script principal “plot_era5.py” chama os métodos definidos no arquivo auxiliar “helpers/era5.py”, onde também são importados os módulos instalados previamente. Deve-se definir a área de plotagem, conforme indicado no código, e as datas são utilizadas do próprio arquivo. Caso os arquivos tenham sido salvos nos locais e com os nomes padrões, não precisa mudar mais nada.

Existe um loop para plotar todos os produtos (variável tipo dicionário “fig_type”) e para todos os horários (0 até número máximo de “times”, dado pela variável “size”), mas que pode ser eliminado definindo-se manualmente o tipo “key” ou o time “t” e descomentado o “exit()” para fechar o loop. Cada “time” é um número inteiro iniciando em zero e que corresponde ao número de horas somadas à data inicial definida no início do script.

Após impressão de status, é desenhado o mapa base através do método “base_map”. A projeção utilizada é a “Equidistant Cylindrical Projection”, em que não há distorção entre as distâncias entre os pontos. Neste método, também é pintado o oceano e são desenhados os paralelos, os meridianos, as linhas de costa, as fronteiras internacionais e de estados brasileiros. Para isso, dois shapefiles são usados e estão disponíveis na pasta “helpers”: ne_10m_admin_0_countries e BR_UF_2019, respectivamente.

Posteriormente, conforme o produto escolhido, é chamado um método específico para cálculo das variáveis envolvidas e personalização da plotagem sobre o mapa base. Importante notar que a ordem dos níveis de pressão seguem a ordem informada no script de download dos dados, onde “‘pressure_level’: [‘250’, ‘500’,’850′,’1000′]”, ou seja, “ds.variables[‘u’][t,0,:,:]” refere-se ao nível de 250 hPa e assim por diante.

Para finalizar, são impressos os títulos (produtos, data/hora) e barra de cores (se houver), com a figura sendo salva no diretório “output”.

O estilo dos mapas foi inspirado nos produtos do WXmaps e o código de cada produto teve sua primeira versão feita pelo meteorologista Lucas Alberto Fumagalli Coelho. Os produtos são listados e discutidos no post Reanálise: eventos de neve e de geada, mas um exemplo de cada produto podem ser visualizados a seguir:

Mapas gerados para 29/07 00Z, horário aproximado de evento precipitações de inverno na região sul e geada na madrugada correspondente em outros locais da mesma região
Mapas gerados para 29/07 00Z, horário aproximado de evento precipitações de inverno na região sul e geada na madrugada correspondente em outros locais da mesma região

Considerando um diretório com imagens numeradas sequencialmente através do nome do arquivo (test_001.png, test_002.png, etc), você pode usar o script ‘fig_to_vid.py’ para agrupá-las em um vídeo MP4. Para utilizá-lo, instale a biblioteca opencv (conda install opencv). Defina a variável ‘key’ como o nome padrão dos seus arquivos, ou substitua do modo que lhe for mais apropriado.

2 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.