silvadenisson / electionsBR

65 stars 19 forks source link

Melhorar eficiência no uso da rede e consistência dos dados #6

Closed flaviobarros closed 3 years ago

flaviobarros commented 8 years ago

Em diversas funções, como a candidate_fed() e a candidate_local() há a necessidade de fazer o download de um mesmo arquivo zip. Entretanto, mesmo que os arquivos já tiverem sido baixados eles devem ser baixados novamente e processados, o que é ineficiente em termos de uso da rede e também em termos de tempo de processamento. Assim nesse issue eu proponho um novo recurso tal que as funções, antes de baixar, procurem os arquivos na pasta apropriada (2014/ por exemplo) para verificar se o arquivo já existe e se é realmente necessário baixar novamente.

No #4 eu mencionei o backend com banco de dados pensando inclusive nisso. Uma vez que o banco fosse constituído não seria necessário baixar de novo os mesmos arquivos.

OBS: estou usando os issues aqui como uma forma de marcar possíveis melhoras do pacote.

dfalbel commented 8 years ago

Para isso, talvez seja interessante usar: https://github.com/hadley/memoise

silvadenisson commented 8 years ago

quanto a questão de fazer o download novamente acho que esse é o principal potencial, pois, o TSE atualiza as bases de dados mas essa atualização não está nem no nome, nem na descrição no site, ou seja, só possível saber se foi atualizado ou não quanto se faz o download, afinal essa é a função principal do pacote, quem não quer baixar novamente faz o download e salva na extensão preferida.

meirelesff commented 8 years ago

O Denisson disse tudo. O principal do pacote é isso mesmo. Talvez desse para fazer algo como há no devtools::install_github, checando a data do arquivo, mas o TSE não disponibiliza nenhuma informação sobre isso (só na base, o que nos faria ter de baixar e deszipar os arquivos de toda a forma).

flaviobarros commented 8 years ago

@silvadenisson e @meirelesff

"...só possível saber se foi atualizado ou não quanto se faz o download..."

na verdade tem um jeito ;-)

O protocolo HTTP tem os HEADERS. Sempre que você faz a requisição de uma página ou outro conteúdo qualquer, COSTUMA VIR TAMBÉM um HEADER com o campo last-modified. Como R tem o pacote httr eu fiz um teste básico aqui:

## Pacotes necessarios
library(httr)

## Coletando informaçao sobre arquivo
eleicoes_2014 <- GET("http://agencia.tse.jus.br/estatistica/sead/odsele/consulta_cand/consulta_cand_2014.zip")

## Nos HEADERS da resposta HTTP tem o campo Last-Modified
eleicoes_2014$headers$`last-modified`

o que resulta em:

[1] "Tue, 19 Jul 2016 02:30:01 GMT"

Assim, para não baixar o mesmo arquivo basta verificar o header, e caso seja diferente, ai sim baixar.

flaviobarros commented 8 years ago

Um outro ponto que é mais uma dúvida: por qual razão o TSE altera estes dados? E de quanto em quanto tempo aproximadamente ele faz isso?

meirelesff commented 8 years ago

Legal, Flavio, acho que essa solução pode ser interessante. Tu poderia fazer um pull numa função como a party_mun_zone_fed incorporando isso pra gente ver? Acho que um argumento na função dando opção pro usuário habilitar ou desabilitar essa consulta seria legal.

Quanto ao TSE, o problema é que a base é alimentada principalmente pelos próprios candidatos e, aí, frequentemente estes precisam retificar informações (principalmente quando a justiça eleitoral cobra deles). No mais dos casos, é pra atualizar informações sobre processos de julgamento de candidaturas, que podem se arrastar e acarretar modificações em todas as bases.

flaviobarros commented 8 years ago

Faço sim. Amanhã eu testo e mando. Vou deixar em um branch separado do master para a gente poder adicionar nas outras depois e só então dar um merge no master.

RobertMyles commented 7 years ago

Pensei na possibilidade de colocar os dados de eleições do passado (2002, por exemplo) em data dentro do pacote. (Tipo, data("fed_cand_2002")) Seria mais rápido acessar, mas não sei quanto CRAN aceita em termos de tamanho de datasets.

silvadenisson commented 7 years ago

Seria intressante, mas, o CRAN não libera tanto espaço, alem do mais o problema que os dados são sempre atualizado pelo TSE por qualquer motivo que seja.

RobertMyles commented 7 years ago

O TSE muda os dados antigos? Por quê, vc sabe?

silvadenisson commented 7 years ago

Porque sempre há algum processo rolando, essa foi a uma das explicações que o setor de estatística do TSE me informou.

RobertMyles commented 7 years ago

Hmm, ok, eu não sabia disso.

meirelesff commented 3 years ago

Bom, esse é um problema que o electionsBR, por conta de escopo, não se propõe a resolver. A issue será encerrada.