Previsão de Precipitação (Nowcasting) Usando Dados Provenientes de Satélites

Um modelo para Região Sul do Brasil

Rafael Rocha
Data Hackers
6 min readDec 27, 2023

--

Foto por Inge Maria no Unsplash

Introdução

A região sul do Brasil vem enfrentando uma crise climática severa, devido a chuvas intensas nos últimos meses do ano de 2023. Essas chuvas vêm gerando diversos danos a toda região sul do Brasil, sejam eles financeiro ou à vida.

Com o intuito de avaliar esses eventos e explora-los através da previsão de precipitação de curto/médio prazo (nowcasting), foi criada uma base de dados de imagens de precipitação em milímetros por hora (mm/h) da região sul do Brasil proveniente de satélites, além de construir uma modelo preliminar utilizando Inteligência Artificial (IA) para realizar o nowcasting com a base criada.

INMET

Para criar a base de dados com chuvas intensas na região sul, utilizou-se o Banco de Dados Meteorológicos do Instituto Nacional de Meteorologia (INMET) do ano de 2023 (até 30/11/2023). A partir dos dados das 95 estações automáticas presentes na região sul, foram coletados os dias mais chuvosos tendo como base a variável precipitação.

IMERG

Os dados de precipitação utilizados para criação da base de dados são provenientes do produto do Integrated Multi-satellitE Retrievals for GPM (IMERG). Esse produto é gerado a partir de dados coletados por uma constelação de satélites e apresenta três versões denominadas de Early, Late e Final Run, cuja as latências são, respectivamente, 4 horas, 12 horas e 3,5 meses.

A versão Early Run foi utilizada para a construção da base de dados, a qual é quase em tempo real com resoluções espacial e temporal de 0,1º x 0,1º e 30 minutos, respectivamente. Os dados IMERG tem uma cobertura temporal de 01/06/2000 até o dia corrente e aferem medidas de precipitação global.

A Figura abaixo exemplifica a precipitação (mm/h) global do dia 20/09/2017 as 07:00 UTC.

Precipitação global

Dias chuvosos

A obtenção dos dias mais chuvosos para a construção da base de dados seguiu três etapas:

  1. Carregamento adequado dos dados do INMET.
  2. Ajuste das colunas relacionadas a datas.
  3. Agrupamento e cálculo dos valores de precipitação.
  4. Filtragem pelo limite de precipitação e pela lista de meses.

Na primeira etapa, os dados são carregados adequadamente, definindo o encoding, o tipo de decimal utilizado, o delimitador, número de linhas que serão puladas no carregamento. Além disso, somente colunas de datas e precipitação são utilizadas.

O código abaixo apresenta o carregamento adequado da Estação Automática A807 — Curitiba:

estacao = csv_list[0] # Estação A807 - Curitiba

df = pd.read_csv(estacao,
encoding='iso-8859-1',
decimal=',',
delimiter=';',
skiprows=8,
usecols=['Data', 'Hora UTC', 'PRECIPITAÇÃO TOTAL, HORÁRIO (mm)'],
parse_dates=['Data'])

A segunda etapa ajusta as colunas de datas, gerando uma única coluna no seguinte formato YYYY-MM-DD hh:mm:ss, onde YYYY representa o ano, MM o mês e DD o dia, hh a hora, mm o minuto e ss o segundo. As funções abaixo fazem o ajuste das datas para o formato adequado, já que data e hora estão em colunas separadas.

def get_hour(x):
return f"{x[0:2]}:{x[2:4]}"

def get_timestamp(data, hora):
return f"{data} {hora}"

O código abaixo realiza o ajuste das colunas das datas, além de renomear a variável precipitação:

df['Data'] = df['Data'].astype(str)
df.rename(columns={"PRECIPITAÇÃO TOTAL, HORÁRIO (mm)": "precipitacao"}, inplace=True)

df['Hora'] = df['Hora UTC'].apply(get_hour)

df['timestamp'] = df[['Data', 'Hora']].apply(lambda x: get_timestamp(*x), axis=1)
df['timestamp'] = pd.to_datetime(df['timestamp'])

Na terceira etapa é realizado o agrupamento por dia e a soma dos valores de precipitação. Desse modo, transformamos a precipitação de mm/h para mm/dia. O código abaixo realiza esta etapa.

df_result = (df.groupby(pd.Grouper(key='timestamp', axis=0, freq='D'))
.sum(numeric_only=True)
.sort_values(by=['precipitacao'], ascending=False)
.reset_index()
.copy())

A quarta e última etapa é utilizada para filtrar os dados por um determinado limite de precipitação e uma lista de meses. O limite é utilizado para restringir a quantidade de dias obtidos, onde limite utilizado é de 50 mm/dia, ou seja, somente os dias com precipitação maior que o limite serão incluídos. O código abaixo realiza a última etapa.

filter_ppt = (df_result['precipitacao']>threshold)
df_result = df_result[filter_ppt]

df_result = df_result[df_result['timestamp']
.dt.month
.isin(months_list)
.copy()]

Para o treinamento do modelo, foram investigados os meses de Janeiro a Outubro. E para o teste do modelo somente o mês de Novembro foi investigado. Desse modo, 107 dias foram incluídos para o treinamento e 14 dias para teste. Como as listas em mãos, é possível obter os dias de chuvas mais intensas dos dados IMERG, como base nos dados do INMET.

Dados IMERG

Inicialmente é necessário realizar o cadastro na EARTHDATA para obter os links dos arquivos, e posteriormente, fazer o download dos dados. Além disso, é necessário gerar os arquivos da pré-requisito.

Os dados IMERG foram obtidos seguindo os mesmos períodos. Uma lista de arquivos de todos os dias, dos meses selecionados, é obtida, porém, os downloads dos arquivos são realizados somente se estiverem na lista de dias chuvosos obtidos anteriormente. Além disso, um recorte é feito na obtenção dos dados IMERG para avaliar somente a região sul do Brasil. O retângulo gerado da região sul é obtido pelas seguintes coordenadas:

-62.45,-34.35,-43.35,-21.65

Onde os valores são, respectivamente: longitude mínima, latitude mínima, longitude máxima, e latitude máxima. A Figura abaixo apresenta a tela utilizada na obtenção da lista de dados de treinamento IMERG.

Tela para obtenção da lista de dados IMERG

É possível notar que foram obtidos um total de 304 dias e 14.592 links para o download dos dados. Cada dia é composto, de maneira geral, por 48 arquivos, porém em alguns casos, ocorre falhas na obtenção das primeiras ou últimas horas, alcançando um número menor que 48. Após a tela apresentada acima, é possível obter um arquivo .txt com a lista de arquivos (links).

Arquitetura

A arquitetura de IA utilizada é a U-Net, que inicialmente foi utilizada para segmentação de imagens médicas, e hoje é comumente empregada no nowcasting. A U-Net recebe uma sequência de imagens de entrada e gera uma sequência de imagens de saída, o qual muda o comportamento espaço-temporal da entrada. Desse modo, é possível prever as próximas horas de precipitação (saída), dada a as horas anteriores (entrada).

O modelo criado é composto por uma sequência de 12 imagens (que representam as 6 horas anteriores, já que as imagens têm resolução temporal de 30 minutos) e uma saída composta por uma sequência de 8 imagens (próximas 4 horas).

Desse modo, o conjunto de dados de treinamento é composto por 2996 sequências de entrada e saída. Já o conjunto de teste é composto por 385 sequências de entrada e saída. Ambos os conjunto é formado por imagens de resolução 128 x 192.

Resultados e conclusão

A imagem abaixo compara os resultados em T+1, ou seja, a imagem que representa os próximos 30 minutos de previsão. A Figura (a) representa a imagem observada e a Figura (b) representa a previsão realizada pela U-Net. O resultado apresenta o dia 13/11/2023 as 06:00 UTC. A sequência de entrada (não mostrada) compreende o horário entre 00:00 e 5:30 UTC.

Comparação entre imagem observada e imagem prevista para T+1

É possível notar o poder da U-Net para o nowcastig, embora os resultados estejam a quem do desempenho necessário para a tarefa em questão. Porém, vale ressaltar que este é um modelo relativamente simples, assim como a quantidade de dados é pequena dada a complexidade inerente ao treinamento para o nowcasting.

Os códigos estão disponíveis no GitHub. No Hugging Face tem uma aplicação que demonstra as entradas e saídas observadas e previstas de alguns eventos. Caso você tenha interesse, me siga no LinkedIn e Twitter/X. Siga o blog se o post foi útil para você.

--

--