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.

Sign up to discover human stories that deepen your understanding of the world.

Álvaro Ferreira Pires de Paiva
Álvaro Ferreira Pires de Paiva

No responses yet

Write a response