Previsão do tempo de Natal-RN utilizando LSTM — Parte 2/3

Coleta e tratamento dos dados

Álvaro Ferreira Pires de Paiva
4 min readNov 8, 2020

Dando seguimento ao projeto, nesse artigo irei abordar sobre a coleta dos dados e o tratamento realizado sobre os mesmos.

Caso não tenha lido a parte 1, clique aqui.

Fonte dos dados

Site do INMET.

Desde o último trabalho sobre previsão do tempo, o Instituto Nacional de Meteorologia atualizou o seu site. Agora é possível baixar de forma mais rápida e prática os dados históricos anuais. Até o momento são 21 arquivos zip com dados de 2000 a 30 de setembro de 2020, um para cada ano.

Cada arquivo zip contêm vários arquivos CSV, um para cada estação que realizou alguma medição naquele ano. Após baixado todos os arquivos, criou-se um único arquivo CSV com os dados de todas as estações envolvidas por ano, além de renomear as colunas em cada arquivo para um determinado padrão e adicionando uma coluna para identificar a estação que coletou aqueles dados.

Os dados

Os dados de cada ano foram agrupados em um único arquivo, totalizando 21 arquivos CSV, quase 6 GB de dados no total. São dados de medição por dia, hora e estação envolvida.

Todos os arquivos possuem um total de 20 colunas, sendo elas:

  • date: data da coleta do dado (dia, mês e ano);
  • hour: horário da coleta do dado (hora e minuto);
  • precipitation_total: precipitação total, no horário (mm);
  • atmospheric_pressure_station_level: pressão atmosférica ao nível da estação, no horário (mB);
  • atmospheric_pressure_max_before: pressão atmosférica máxima na hora anterior (mB);
  • atmospheric_pressure_min_before: pressão atmosférica mínima na hora anterior (mB);
  • global_radiation: radiação global (KJ/m²);
  • temperature_air_dry_bulb: temperatura do ar do bulbo seco, no horário (ºC);
  • temperature_dew_point: temperatura do ponto de orvalho (ºC);
  • temperature_max_before: temperatura máxima na hora anterior (ºC);
  • temperature_min_before: temperatura mínima na hora anterior (ºC);
  • temperature_dew_point_max_before: temperatura máxima do ponto de orvalho (ºC);
  • temperature_dew_point_min_before: temperatura mínima do ponto de orvalho (ºC);
  • humidity_relative_max_before: umidade relativa máxima na hora anterior (%);
  • humidity_relative_min_before: umidade relativa mínima na hora anterior (%);
  • humidity_relative_air: umidade relativa do ar, no horário (%);
  • wind_direction: direção do vento (gr) (°(gr));
  • wind_blast: rajada máxima do vento (m/s);
  • wind_speed: velocidade do vento, no horário (m/s);
  • code_wmo: código WMO da estação.

Dessas colunas, a nossa coluna alvo para previsão será temperature_air_dry_bulb.

Estação de Natal-RN

Como estamos querendo prever o tempo em Natal-RN, decidiu-se filtrar os dados para apenas as medições realizadas nas estações correspondentes. Os dados de Natal são:

  • Região: Nordeste (NE);
  • Estado: Rio Grande do Norte (RN);
  • Cidade: Natal;
  • Código (WMO): A304;
  • Latitude: -5.9;
  • Longitude: -35.2;
  • Altitude: 48.6;
  • Data de fundação: 24/02/2003.

A nossa extensão de dados vai de 24/02/2003 até 30/09/2020, possuindo um total de 154296 linhas no CSV gerado apenas com entradas de Natal-RN.

Visualizando informações sobre o nosso dataset usando a função pandas.DataFrame.info().

Tratamento

Durante o processamento, dados lixo (letras em colunas numéricas, NaN, etc) foram transformados em np.nan, para ficar mais fácil de identificar. Logo, realizou-se uma limpeza eliminando esses dados.

Após isso, selecionou-se apenas dados de 2017 em diante, totalizando 12018 linhas. O principal motivo disso é que os dados lixos eliminados anteriormente correspondiam a dados dos primeiros anos. Assim os dados com “maior qualidade” estavam nos anos mais recentes.

Como as colunas date e hour são de objetos, decidiu-se criar novas colunas a partir delas para manipulações posteriores, sendo essas novas colunas:

  • day: o dia do registro;
  • month: o mês do registro;
  • year: o ano do registro;
  • week: a semana do ano do registro;
  • day_week: o dia da semana do registro;
  • hour: a hora do registro (diferente da coluna hour anterior, essa daqui possui apenas a hora).

Dados para treinamento

Depois do tratamento realizado nos dados, foi analisado a correlação das colunas com nossa coluna alvo (temperature_air_dry_bulb) e selecionada as colunas com correlação de Pearson maior que 0.5 ou menor que -0.5.

Correlação entre as colunas do nosso dataset até aqui.

Ao final restou-se apenas 7 colunas além da nossa coluna alvo:

  • humidity_relative_air: -0.759900;
  • humidity_relative_min_before: -0.753720;
  • humidity_relative_max_before: -0.709979;
  • wind_direction: -0.547639;
  • global_radiation: 0.698207;
  • temperature_min_before: 0.950094;
  • temperature_max_before: 0.971995.
Correlação das colunas selecionadas no nosso dataset.

Uma coisa que achei interessante foi que as colunas com maior correlação eram justamente as que se referiam aos valores mínimo e máximo da temperatura na hora anterior a medição.

Para todos os treinamentos foram utilizados as seguintes proporções:

  • 90% dos dados para treino;
  • 10% dos dados para teste.

Nota de esclarecimento

O principal motivo de todo esse tratamento e seleção dos dados, além de ser para garantir a qualidade dos mesmos, foi por causa do tempo que estava levando para realizar o treinamento do modelo, chegando a dias. Com os dados selecionados e tratados, o treinamento passou para, em média, 6 horas para cada modelo.

Código

Esse artigo foi escrito para a disciplina de Aprendizado Profundo do curso de Bacharelado em Tecnologia da Informação (BTI) da Universidade Federal do Rio Grande do Norte (UFRN), possuindo Ivanovitch Silva como professor.

--

--