deflateBR icon indicating copy to clipboard operation
deflateBR copied to clipboard

funcao deflacionar muito lenta. Tente vetorizar.

Open lucasmation opened this issue 4 years ago • 2 comments

Bacana. Mas testei o pacote num grande banco de dados (500 milhoes de linhas) e a funcao deflacionar esta muito lenta. Nao tem motivo para ser tao lenta, ja que no fundo eh apenas uma operacao multiplicacao.

A funcao esta sendo chamada linha a linha? Acho que voce precisa vetorizar.

Segue um pseudo codigo para vetorizar:

  1. extrair um vetor data_unica a partir das das datas unicas do nominal_dates
  2. baixar os dados do Ipeadata para cada data unica
  3. criar um data.frame pequeno, def, com colunas data_unica e deflator (para uma certa real_date)
  4. mergear os dados originais (um data.frame com nominal_dates e nominal_values) com def. Esta operacao eh bem rapida, principalmente se voce usar data.table
  5. multplicar nominal_values por deflator

lucasmation avatar Jun 21 '20 15:06 lucasmation

Meu caro, sem saber mais detalhes sobre o código e o ambiente que produziram essa lentidão é difícil saber o que a causou. Como é possível ver no código da função principal do pacote, falta de vetorização não é o problema -- todos os dados são baixados em uma única chamada. Abs.

meirelesff avatar Jul 13 '20 14:07 meirelesff

Obrigado. Por conincidencia sou do Ipea. Os dados sao resgistros administrativos que nao podem ser divulgados. O ambiente eh R 4.1, Windowns (estou off agora nao consigo gerar a descricao do environment). Mas basicamente tudo la roda rapido. Este pacote esta destoando.

Minha suspeita (nao olhei seu codigo) eh que talvez o pacote nao remova as duplicidades de datas, por mais que faca apenas um pedido para a API.

Por exemplo, se ha duas obsevacoes com a data de jan2019, os dados que o pacote deveria pedir para a API nao deveriam ter esta duplicidade.

lucasmation avatar Jul 13 '20 15:07 lucasmation