Trabalhando com datas nos dados do INMET

Data e hora 

    Uma coisa que a meteorologia se preocupa é com as datas e horários nos dados. Precisamos fazer médias mensais, anuais, sazonais, diárias e etc, além de outros cálculos estatísticos. Ainda bem que o Python consegue facilitar nossa vida. Para isso, será necessário utilizar a biblioteca Pandas, a mesma que utilizamos pra ler os dados em CSV das estações do INMET (Instituto Nacional de Meteorologia). Muitos baixam esses dados e tentam trabalhar no Excel, que dá um trabalho grande, e neste post vou ensinar a como podemos colocar a data e hora dos dados no Index do DataFrame com o Pandas e trabalhar só com datas e horas. Primeiramente vou utilizar um dado de uma estação qualquer do INMET, afinal eles tem o mesmo formato pra qualquer estação que queiras fazer. Pra esse caso, vou utilizar os dados da estação de Brasília-DF: 

 

REGIÃO:;CO
UF:;DF
ESTAÇÃO:;BRASILIA
CODIGO (WMO):;A001
LATITUDE:;-15.78944444
LONGITUDE:;-47.92583332
ALTITUDE:;1159.54
DATA DE FUNDAÇÃO (YYYY-MM-DD):;2000-05-07
DATA (YYYY-MM-DD);HORA (UTC);PRP TOTAL;PRESSAO ATMOSFERICA AO NIVEL DA ESTACAO. HORARIA (mB);PRESSÃO ATMOSFERICA MAX.NA HORA ANT. (AUT) (mB);PRESSÃO ATMOSFERICA MIN. NA HORA ANT. (AUT) (mB);RADIACAO GLOBAL (W/m²);TEMPERATURA DO AR - BULBO SECO. HORARIA (°C);TEMPERATURA DO PONTO DE ORVALHO (°C);TEMPERATURA MÁXIMA NA HORA ANT. (AUT) (°C);TEMPERATURA MÍNIMA NA HORA ANT. (AUT) (°C);TEMPERATURA ORVALHO MAX. NA HORA ANT. (AUT) (°C);TEMPERATURA ORVALHO MIN. NA HORA ANT. (AUT) (°C);UMIDADE REL. MAX. NA HORA ANT. (AUT) (%);UMIDADE REL. MIN. NA HORA ANT. (AUT) (%);UMIDADE RELATIVA DO AR. HORARIA (%);VENTO. DIREÇÃO HORARIA (gr) (° (gr));VENTO. RAJADA MAXIMA (m/s);VENTO. VELOCIDADE HORARIA (m/s);
2014-01-01;00:00;0;885.8;885.9;885.4;-9999;21.2;18;22.2;21;18.3;17.6;83;77;82;173;2.1;.8;

    Eu recomendo a editar esse cabeçalho dos dados, pois tem muitos acentos e nomes muitos grandes que prejudicam na hora de trabalhar com linguagem de programação e são totalmente desnecessários. 

    Trabalhando com nomes mais simples, facilita nosso trabalho e quando se for criar algum resultado com base neles, como legenda de gráficos e títulos, eles não servirão já que somos nós que escolhemos quais serão. 

    Um exemplo disso que vou fazer aqui é mudar o campo "PRECIPITAÇÃO TOTAL, HORÁRIO (mm)" para "PRP TOTAL". Assim, quando o Pandas ler os dados, basta eu dizer que quero a coluna PRP TOTAL, que é bem melhor pra estar escrevendo e poupa tempo, mas isso é livre e depende de cada pessoa que está criando seu código de acordo com sua criatividade. 

    Dito isso, a partir de então meus dados do INMET estarão alterados nesse campo de precipitação e usarei essa nova nomenclatura a partir daqui e então qualquer dúvida sobre o que fiz, será este mesmo campo só com o nome trocado por mim.  

 

ATENÇÃO: Os dados do INMET usam casa decimal em vírgula (,). Utilize o editor de texto pra tocar todas as vírgulas por pontos (.). Ele só fará cálculos se estiver dessa forma. 

 

    Aqui vou ensinar a como trabalhar apenas transformando as colunas "DATA (YYYY-MM-DD)" e "HORA (UTC)" desse arquivo para conseguir trabalhar com eles no índice (index) do DataFrame. Então inicialmente o script ficará assim:

import pandas as pd 

df = pd.read_csv('/home/python/dados/inmet/bsb/INMET_CO_DF_A001_BRASILIA_01-01-2014_A_31-12-2014.CSV', sep=';', index_col=False, skiprows=8) 

df.index = pd.to_datetime(df['DATA (YYYY-MM-DD)'] + ' ' + df['HORA (UTC)'])

    

     O que foi feito aqui? 

    1 - Carregamos a biblioteca Pandas: import pandas as pd 

    2 -    Foi dito ao python que o DataFrame df será o nosso arquivo, com o separados de dados sendo ';' (sep=';') e não tendo coluna de índice (index_col=False) e pulará as primeiras 8 linhas pra começar a ler os dados depois dela (skiprows=8). 

    3 - Colocou-se como índice (df.index) do DataFrame que o pandas transformará em 'data e hora' de forma que ele entenda (pd.to_datetime()) as colunas "DATA (YYYY-MM-DD)" e "HORA (UTC)" ((df['DATA (YYYY-MM-DD)'] + ' ' + df['HORA (UTC)'])) 

    A partir desse ponto, em vez de ele chamar o índice por números, como se fossem as linhas no Excel (de 0 a 999999), ele saberá qual data é cada informação. Então seus dados aparecerão assim no terminal:

 

 

 

 

 

    Quando quiser fazer uma média mensal de Janeiro, por exemplo:

df['PRP TOTAL']['2014-01'].mean()

     

    Com esse comando, ele está dizendo que quer apenas as datas que contem '2014-01' (formato YYYY-MM) que se tire e média (mean) da variável 'PRP TOTAL'.

 

 

 

 

    Como estamos trabalhando com precipitação, é mais comum que se queira o acumulado desse mês, então dessa forma será:

df['PRP TOTAL']['2014-01'].sum()

 

 


    

    O comando final sum significa que fará a soma de todos os valores que estão nessa mês. A partir de então poderá se fazer de acordo com a necessidade de cada um, podendo trabalhar com as outras variáveis para se criar médias, acumulados, tirar desvio-padrão, entre outras estatísticas e então tirar proveito para se criar gráficos necessários. Em um post futuro, vou explicar como podemos fazer isso com a biblioteca Matplotlib, mas aqui vou ensinar de cara como se pode fazer um gráfico simples pra visualizar de forma rápida, sem que se atenda critérios que seriam pedidos em publicações, relatórios e trabalhos acadêmicos:

df['PRP TOTAL']['2014-01'].plot()

     

    Com isso, o python abrirá uma janela mostrando o gráfico em linha do comportamento de precipitação durante o mês de janeiro de 2014. Que será assim:

 

 

 

 

 

 


 

    Espero que isso ajude vocês a seguirem mais adiante com os trabalhos. Mais adiante terá um post de como colocar tudo em formato que possamos editar os eixos, títulos, qualidade da imagem e etc. Até a próxima.

Comentários

Postagens mais visitadas deste blog

Trabalhando com dados em NetCDF

Como ler dados em csv de estação do INMET