{"id":1827,"date":"2020-07-21T12:03:15","date_gmt":"2020-07-21T15:03:15","guid":{"rendered":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/?p=1827"},"modified":"2020-07-21T12:03:15","modified_gmt":"2020-07-21T15:03:15","slug":"valor-minimo-e-sua-data-e-horario-de-ocorrencia","status":"publish","type":"post","link":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/2020\/07\/21\/valor-minimo-e-sua-data-e-horario-de-ocorrencia\/","title":{"rendered":"Valor m\u00ednimo e sua data e hor\u00e1rio de ocorr\u00eancia"},"content":{"rendered":"<p>Gostaria de compartilhar um script-teste em Python para busca de valores m\u00ednimos e seus \u00edndices em uma s\u00e9rie temporal de dados, usando a reamostragem (resample) para agrupar os dados. Esse script usa os pacotes <a href=\"https:\/\/pandas.pydata.org\/\">Pandas<\/a> e <a href=\"https:\/\/numpy.org\/\">NumPy<\/a>, sendo o primeiro essencial para o objetivo do script.<\/p>\n<p>Nesse exemplo, tem-se uma s\u00e9rie de temperaturas que abrangem 3 dias, contendo dados hor\u00e1rios. Para indexa\u00e7\u00e3o no tempo usa-se o <a href=\"https:\/\/numpy.org\/doc\/stable\/reference\/arrays.datetime.html\"><em>datetime64<\/em><\/a> para criar um \u00edndice de tempo aos dados. Essa indexa\u00e7\u00e3o permite o uso do m\u00e9todo <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.Series.resample.html\"><em>resample<\/em><\/a>, para agrupar os dados em um per\u00edodo de tempo desejado. Aqui, o per\u00edodo desejado \u00e9 o di\u00e1rio, portanto, <em>&#8216;D&#8217;<\/em> \u00e9 usado em <em>resample<\/em>.<\/p>\n<p>Ap\u00f3s a reamostragem di\u00e1ria, usa-se o m\u00e9todo <em>aggregate<\/em> (simplificado com <em>agg<\/em>) para aplicar duas fun\u00e7\u00f5es a essa reamostragem di\u00e1ria: <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.Series.min.html\"><em>pd.Series.min<\/em><\/a>, para procurar o valor m\u00ednimo, e <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.Series.idxmin.html\"><em>pd.Series.idxmin<\/em><\/a>, para procurar a posi\u00e7\u00e3o (\u00edndice) do valor m\u00ednimo. Essa maneira foi adaptada do exemplo da p\u00e1gina do m\u00e9todo <a href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.core.resample.Resampler.aggregate.html\"><em>pandas.core.resample.Resampler.aggregate<\/em><\/a>.<\/p>\n<p>A esse m\u00e9todo \u00e9 passado um <a href=\"https:\/\/www.alura.com.br\/artigos\/trabalhando-com-o-dicionario-no-python\"><em>dicion\u00e1rio<\/em><\/a> contendo um <em>label<\/em> e a respectiva fun\u00e7\u00e3o a ser aplicada. Os resultados podem ser acessados usando esse <em>label<\/em>, pois transforma-se em um atributo do resultado do m\u00e9todo <em>Resampler.aggregate<\/em> (veja os dois \u00faltimos <em>print<\/em> desse script).<\/p>\n<p>O script, contendo coment\u00e1rios, est\u00e1 abaixo:<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">import pandas as pd<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">import numpy as np<\/span><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># dados hor\u00e1rios de T: em ordem cronol\u00f3gica <\/span><br \/>\n<span style=\"font-size: 8pt\"><span style=\"font-family: terminal, monaco, monospace\">T = np.array( [22.5, 22.4, 22.3, 21.3, 20.3, 19.7, 20.2, 19.2, <\/span><span style=\"font-family: terminal, monaco, monospace\">19.7, 20., 20.2, 21.3, 21.4, 22.1, 22.6, 23.9, <\/span><span style=\"font-family: terminal, monaco, monospace\">24., 24.7, 25., 24.7, 24.4, 23.3, 21.9, 21.5, <\/span><span style=\"font-family: terminal, monaco, monospace\">21.5, 21.5, 21.4, 21.2, 21.1, 21.2, 21.1, 21.3,<\/span> <span style=\"font-family: terminal, monaco, monospace\">20.9, 21.3, 21.7, 21.9, 22.4, 23.5, 24.3, 24.4, <\/span><span style=\"font-family: terminal, monaco, monospace\">24.8, 25.3, 25., 24.7, 24.1, 23.8, 23.7, 23.4, <\/span><span style=\"font-family: terminal, monaco, monospace\">23.4, 23.1, 23.1, 19.9, 20.2, 20.6, 21.2, 20.7, <\/span><span style=\"font-family: terminal, monaco, monospace\">21.2, 21.8, 22., 22.1, 22.4, 22.8, 23.1, 20.2, <\/span><span style=\"font-family: terminal, monaco, monospace\">19.1, 18.4, 18.3, 17.9, 17.7, 17., 16.6, 16.4] )<\/span><\/span><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># s\u00e9rie temporal de T, contendo o \u00edndice de tempo <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">seriesT = pd.Series( T, index=np.arange(&#8216;2020-01-01T00&#8242;,&#8217;2020-01-04T00&#8242;, dtype=&#8217;datetime64&#8217;) )<\/span><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># reamostragem di\u00e1ria, ou seja, agrupamento dos dados por dia <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">seriesTD = seriesT.resample(&#8216;D&#8217;)<\/span><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># aplica\u00e7\u00e3o de fun\u00e7\u00f5es aos grupos formados na reamostragem, nesse caso, di\u00e1ria <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># as fun\u00e7\u00f5es para obten\u00e7\u00e3o do menor valor dentro do grupo e sua posi\u00e7\u00e3o (\u00edndice) <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># s\u00e3o aplicadas. IMPORTANTE: se o mesmo valor m\u00ednimo aparecer mais de uma vez, <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\"># as fun\u00e7\u00f5es retornam a primeira ocorr\u00eancia (comportamento padr\u00e3o) <\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">busca = seriesTD.agg( { &#8216;minima&#8217;:pd.Series.min, &#8216;idx_minima&#8217;:pd.Series.idxmin } )<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">print( busca.idx_minima )<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;font-size: 8pt\">print( busca.minima )<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Tor\u00e7o para que seja \u00fatil!<\/p>\n<p>Abra\u00e7os.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gostaria de compartilhar um script-teste em Python para busca de valores m\u00ednimos e seus \u00edndices em uma s\u00e9rie 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\u00e9rie de temperaturas que abrangem [&hellip;]<\/p>\n","protected":false},"author":98,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-1827","post","type-post","status-publish","format-standard","hentry","category-dicas_computcao_meteoro"],"jetpack_featured_media_url":"","publishpress_future_action":{"enabled":false,"date":"2026-04-22 02:22:12","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"category","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/posts\/1827","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/users\/98"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/comments?post=1827"}],"version-history":[{"count":4,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/posts\/1827\/revisions"}],"predecessor-version":[{"id":1832,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/posts\/1827\/revisions\/1832"}],"wp:attachment":[{"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/media?parent=1827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/categories?post=1827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/mateusteixeira\/wp-json\/wp\/v2\/tags?post=1827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}