turicas / eleicoes-brasil

Scripts para capturar dados do Repositório de Dados Eleitorais do TSE, limpá-los, normalizá-los e agrupá-los
GNU General Public License v3.0
149 stars 33 forks source link

Erro ao extrair dados rodando para a `receita`. #16

Closed GabrielTrettel closed 4 years ago

GabrielTrettel commented 4 years ago

@turicas, executando o python tse.py receita --years=2014,2016 obtive um erro referente às colunas dos dados terem valores diferentes que as do schema. Erro em detalhe:

PrestacaoContasReceitas 2014
  Downloading... file has already been downloaded.
  Extracting...: 0it [00:00, ?it/s]
Traceback (most recent call last):
  File "tse.py", line 213, in <module>
    extract_data(
  File "tse.py", line 52, in extract_data
    writer.writerow(row)
  File "/usr/lib/python3.8/csv.py", line 154, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "/usr/lib/python3.8/csv.py", line 149, in _dict_to_list
    raise ValueError("dict contains fields not in fieldnames: "
ValueError: dict contains fields not in fieldnames: 'codigo_unidade_eleitoral', 'sigla_unidade_federativa_doador', 'numero_candidatura', 'receita', 'nome', 'doador', 'numero_sequencial', 'eleicao', 'doador_originario_receita_federal', 'sigla_unidade_eleitoral', 'codigo_unidade_eleitoral_doador', 'sigla_unidade_federativa', 'doador_receita_federal', 'numero_candidatura_doadora', 'ano', 'sigla_unidade_eleitoral_doador', 'unidade_eleitoral', 'cargo', 'orgao', 'partido', 'partido_doador', 'doador_originario', 'unidade_eleitoral_doador', 'administrador', 'cpf'

Eu reparei que no issue #15 o terceiro check-box tem o campo atualizar schema/receita.csv. Esta tarefa de atualizar o schema que está causando este erro?

De qualquer maneira, como medida paliativa, eu modifiquei a função extract_data do tse.py para filtrar as colunas de cada row para sobrar apenas as list(extractor.schema.keys()) itens do dicionário. Aparentemente o problema foi resolvido e como eu só preciso das colunas que já estão no schema, acho que esta tudo certo. Subi a modificação nesse fork e se você julgar que a alteração é relevante para o projeto, posso mandar o PR.

No mais, excelente trabalho com esses programas que capturam os dados públicos das eleições e dos socios, estão me ajudando muito.

turicas commented 4 years ago

@GabrielTrettel ainda estou trabalhando nesses dados, acabei fazendo o merge de um branch muito grande para facilitar parte do processo de adaptar o script para 2020. Os dados de candidatura e bens declarados já estão corretos (inclusive o schema) e verificados, agora estou no processo de checagem e correção das outras tabelas (é exatamente a tarefa da issue #15). Fiz rapidamente a correção do schema/receita.csv baseado no headers/receita-final.csv (commit 121b79f368db41059ad70d8b08443f948566b24d, já está no branch master), por favor, verifique se isso resolve.

GabrielTrettel commented 4 years ago

@turicas, muito bom, dei uma olhada no commit e tentei rodar aqui. Infelizmente ainda ocorre um erro, e eu creio que seja pelo mesmo motivo de antes, mas com campos diferentes.

❯ python tse.py receita --years=2016
PrestacaoContasReceitas 2016
  Downloading... file has already been downloaded.
  Extracting...: 0it [00:00, ?it/s]
Traceback (most recent call last):
  File "tse.py", line 209, in <module>
    extract_data(
  File "tse.py", line 48, in extract_data
    writer.writerow(row)
  File "/usr/lib/python3.8/csv.py", line 154, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "/usr/lib/python3.8/csv.py", line 149, in _dict_to_list
    raise ValueError("dict contains fields not in fieldnames: "
ValueError: dict contains fields not in fieldnames: 'ano_eleicao', 'codigo_ue'

Agora uma outra pergunta um pouco fora do assunto desse issue, mas que surgiu durante o desenvolvimento do projeto: Os dados relacionados com doação de campanha são os que estão na tabela receita?

turicas commented 4 years ago

@turicas, muito bom, dei uma olhada no commit e tentei rodar aqui. Infelizmente ainda ocorre um erro, e eu creio que seja pelo mesmo motivo de antes, mas com campos diferentes.

Subi o commit 458a03d0591cc440ce178610cba74a8748a382b8 com mais algumas correções. Por favor, rode novamente e feche a issue caso esteja resolvido, ok?

Agora uma outra pergunta um pouco fora do assunto desse issue, mas que surgiu durante o desenvolvimento do projeto: Os dados relacionados com doação de campanha são os que estão na tabela receita?

Sim.

GabrielTrettel commented 4 years ago

Funcionou perfeitamente. Muito obrigado pela ajuda rápida e pelo projeto super útil e relevante <3