TL;DR - se vc quiser baixar só o banco que eu construí, toma aí (1.4Gb zipado). Se quiser reproduzir os passos pra construir o banco a partir dos ddos do TSE, continua lendo :-)
Normalmente eu gosto de brincar com os dados abertos disponibilizados pelo TSE sobre as eleicoes. Esse ano eu decidi que iria tentar construir um banquinho relacional em sqlite com os dados da eleicao. O primeiro passo é conseguir baixar tudo.
Num primeiro momento, o portal da transparencia nao tinha os arquivos consolidados pra baixar. Por outro lado, este ano, o TSE fez um app bem bacana (https://resultados.tse.jus.br), que dá pra baixar até os arquivos "crus" da urna (.bu e .rdv)
Futucando na api do app, eu descobri como automatizar o download desses arquivos. O script baixa_appresultados.sh
baixa isso nas pastas municipios
, secoes
, hashes
e result
A pasta tse/
tem uns scripts python criados pelo TSE (disponibilizados aqui) pra poder lidar com os arquivos binários .bu
e .rdv
Mas, enquanto eu tava fazendo isso, o TSE disponibilizou os dados consolidados no portal da transparencia, que simplifica demais a vida.
O script baixa_transparencia.sh
faz esse download consolidado na pasta buzips
(pra construir o banco só precisa desse)
O script constroi_banco.py
constroi o arquivo bu.db que é o banco sqlite relacional que eu queria
Exemplos de queries: (tem mais exemplos no aruivo consultas.sql
)
A mesma informação que tem aqui: https://resultados.tse.jus.br/oficial/app/index.html#/eleicao;e=e544;uf=al;ufbu=al;mubu=27049;zn=0046;se=0108/dados-de-urna/boletim-de-urna
select
SG_UF UF,
CD_MUNICIPIO,
NM_MUNICIPIO,
NR_ZONA ZONA,
NR_SECAO SECAO,
DS_CARGO_PERGUNTA CARGO,
DS_TIPO_VOTAVEL TIPO_VOTO,
NR_VOTAVEL NR_VOTO,
NM_VOTAVEL NM_VOTO,
QT_VOTOS,
QT_APTOS,
QT_COMPARECIMENTO
from bu
where SG_UF = 'AL'
and NM_MUNICIPIO = 'ESTRELA DE ALAGOAS' -- ou pode filtrar por CD_MUNICIPIO = 27049
and NR_ZONA = 46
and NR_SECAO = 108
order by cargo, QT_VOTOS desc
A mesma informação que tem aqui https://resultados.tse.jus.br/oficial/app/index.html#/eleicao;e=e544;uf=ba;ufbu=ba/resultados
select
NR_VOTAVEL NR_VOTO,
NM_VOTAVEL NM_VOTO,
sum(QT_VOTOS)
from bu
where DS_CARGO_PERGUNTA = 'Presidente' and SG_UF = 'BA'
group by 1, 2
order by 3 desc
select
CD_MUNICIPIO,
NM_MUNICIPIO,
sum(QT_VOTOS),
round(100.0 * sum(QT_VOTOS) filter (where NM_VOTAVEL = 'LULA') / sum(QT_VOTOS), 2) as porcento_lula,
round(100.0 * sum(QT_VOTOS) filter (where NM_VOTAVEL = 'JAIR BOLSONARO') / sum(QT_VOTOS), 2) as porcento_bolsonaro
from bu
where DS_CARGO_PERGUNTA = 'Presidente'
and SG_UF = 'SP'
group by 1, 2
order by porcento_bolsonaro desc