Início do conteúdo
    Notícias
  • Valor mínimo e sua data e horário de ocorrência

    Gostaria de compartilhar um script-teste em Python para busca de valores mínimos e seus índices em uma série temporal de dados, usando a reamostragem (resample) para agrupar os dados. Esse script usa os pacotes Pandas e NumPy, sendo o primeiro essencial para o objetivo do script.

    Nesse exemplo, tem-se uma série de temperaturas que abrangem 3 dias, contendo dados horários. Para indexação no tempo usa-se o datetime64 para criar um índice de tempo aos dados. Essa indexação permite o uso do método resample, para agrupar os dados em um período de tempo desejado. Aqui, o período desejado é o diário, portanto, ‘D’ é usado em resample.

    Após a reamostragem diária, usa-se o método aggregate (simplificado com agg) para aplicar duas funções a essa reamostragem diária: pd.Series.min, para procurar o valor mínimo, e pd.Series.idxmin, para procurar a posição (índice) do valor mínimo. Essa maneira foi adaptada do exemplo da página do método pandas.core.resample.Resampler.aggregate.

    A esse método é passado um dicionário contendo um label e a respectiva função a ser aplicada. Os resultados podem ser acessados usando esse label, pois transforma-se em um atributo do resultado do método Resampler.aggregate (veja os dois últimos print desse script).

    O script, contendo comentários, está abaixo:

    import pandas as pd
    import numpy as np

    # dados horários de T: em ordem cronológica
    T = np.array( [22.5, 22.4, 22.3, 21.3, 20.3, 19.7, 20.2, 19.2, 19.7, 20., 20.2, 21.3, 21.4, 22.1, 22.6, 23.9, 24., 24.7, 25., 24.7, 24.4, 23.3, 21.9, 21.5, 21.5, 21.5, 21.4, 21.2, 21.1, 21.2, 21.1, 21.3, 20.9, 21.3, 21.7, 21.9, 22.4, 23.5, 24.3, 24.4, 24.8, 25.3, 25., 24.7, 24.1, 23.8, 23.7, 23.4, 23.4, 23.1, 23.1, 19.9, 20.2, 20.6, 21.2, 20.7, 21.2, 21.8, 22., 22.1, 22.4, 22.8, 23.1, 20.2, 19.1, 18.4, 18.3, 17.9, 17.7, 17., 16.6, 16.4] )

    # série temporal de T, contendo o índice de tempo
    seriesT = pd.Series( T, index=np.arange(‘2020-01-01T00′,’2020-01-04T00′, dtype=’datetime64’) )

    # reamostragem diária, ou seja, agrupamento dos dados por dia
    seriesTD = seriesT.resample(‘D’)

    # aplicação de funções aos grupos formados na reamostragem, nesse caso, diária
    # as funções para obtenção do menor valor dentro do grupo e sua posição (índice)
    # são aplicadas. IMPORTANTE: se o mesmo valor mínimo aparecer mais de uma vez,
    # as funções retornam a primeira ocorrência (comportamento padrão)
    busca = seriesTD.agg( { ‘minima’:pd.Series.min, ‘idx_minima’:pd.Series.idxmin } )
    print( busca.idx_minima )
    print( busca.minima )

     

    Torço para que seja útil!

    Abraços.