Início do conteúdo

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.