Skip to content

Instantly share code, notes, and snippets.

@pmarkun
Created November 5, 2020 16:11
Show Gist options
  • Save pmarkun/e23a05eb79b93627bf7e43158cae73c4 to your computer and use it in GitHub Desktop.
Save pmarkun/e23a05eb79b93627bf7e43158cae73c4 to your computer and use it in GitHub Desktop.
# Script para verificar candidatas que já se candidataram em 16 e 18 e calcula número de votos.
# Baixar RStudio https://rstudio.com/products/rstudio/download/#download e R https://cran.rstudio.com/bin/windows/base/
# Carrega as bibliotecas necessárias.
# data.table -> tem uma função para ler arquivos csv grandes mais rapidamente
# dplyr -> tem o pipe ( %>% ) que permite encadear manipulações de dados e funções como group_by, select e filter para manipular os dados
# Para instalar você usa 'install.packages("nomedopacote")'
library(data.table)
library(dplyr)
# Lê os arquivos de candidatos das diferentes eleições e filtra por gênero e cargo
# Os arquivo estão disponíveis no repositório do tse -> https://www.tse.jus.br/eleicoes/estatisticas/repositorio-de-dados-eleitorais-1/repositorio-de-dados-eleitorais
# Onde esta o "~/devel/blablabla" você troca pelo lugar onde o arquivo esta salvo no seu computador.
# O parametro "sep" é para definir o separador, que no caso dos arquivos do TSE é ;
# O parametro encoding é a codificação dos acentos (isso esta detalhado no PDF que vem junto com os arquivos)
candidatos2020 <- fread("~/devel/datasets/eleicoes/2020/candidatos/consulta_cand_2020_BRASIL.csv", sep=";", encoding="Latin-1") %>%
filter(DS_GENERO=="FEMININO", DS_CARGO=="VEREADOR")
candidatos2018 <- fread("~/devel/datasets/eleicoes/2018/candidatos/consulta_cand_2018_BRASIL.csv", sep=";", encoding = "Latin-1") %>%
filter(DS_GENERO=="FEMININO", DS_CARGO %in% c('DEPUTADO ESTADUAL', 'DEPUTADO FEDERAL'))
candidatos2016 <- fread("~/devel/datasets/eleicoes/2016/candidatos/consulta_cand_2016_BRASIL.csv", sep=";", encoding = "Latin-1") %>%
filter(DS_GENERO=="FEMININO", DS_CARGO=="VEREADOR")
# Lê os arquivos de votação dos candidatos e soma os votos por candidato
# Os arquivos estão no mesmo repositório do TSE
votos2016_tmp <- fread(paste0("~/devel/datasets/eleicoes/2016/votacao/votacao_candidato_munzona_2016_BRASIL.csv"), sep=";", encoding="Latin-1") %>%
group_by(SQ_CANDIDATO) %>%
summarise(VOTOS_2016=sum(QT_VOTOS_NOMINAIS))
votos2018_tmp <- fread(paste0("~/devel/datasets/eleicoes/2018/votacao/votacao_candidato_munzona_2018_BRASIL.csv"), sep=";", encoding = "Latin-1") %>%
group_by(SQ_CANDIDATO) %>%
summarise(VOTOS_2018=sum(QT_VOTOS_NOMINAIS))
# Junta os arquivos de votos e candidatos e seleciona as colunas que queremos
candidatos2016_tmp <- candidatos2016 %>%
select(NM_CANDIDATO,NM_PARTIDO,SG_UF,NM_UE,NR_CPF_CANDIDATO, SQ_CANDIDATO, DS_DETALHE_SITUACAO_CAND) %>%
mutate(NR_CPF_CANDIDATO=as.character(NR_CPF_CANDIDATO)) %>%
left_join(votos2016_tmp, by=c('SQ_CANDIDATO'))
candidatos2018_tmp <- candidatos2018 %>%
select(NM_CANDIDATO,NM_PARTIDO,SG_UF,NM_UE,NR_CPF_CANDIDATO, SQ_CANDIDATO, DS_DETALHE_SITUACAO_CAND) %>%
mutate(NR_CPF_CANDIDATO=as.character(NR_CPF_CANDIDATO)) %>%
left_join(votos2018_tmp, by=c('SQ_CANDIDATO'))
# Finalmente juntamos os arquivos já com os votos com o arquivo de 2020
# O 'left_join' é para juntar duas tabelas o 'by' são os campos pelos quais queremos conectar as tabelas
# O 'suffix' é o sufixo que vamos colocar nas colunas para diferenciar, por exemplo, a coluna do partido de 2016 do de 2018.
candidatos2020_tmp <- candidatos2020 %>%
select(NM_CANDIDATO,NM_PARTIDO,SG_UF,NM_UE, NR_CPF_CANDIDATO) %>%
mutate(NR_CPF_CANDIDATO=as.character(NR_CPF_CANDIDATO)) %>%
left_join(candidatos2016_tmp, by=c('NR_CPF_CANDIDATO'), suffix=c('','_2016')) %>%
left_join(candidatos2018_tmp, by=c('NR_CPF_CANDIDATO'), suffix=c('',"_2018")) %>%
filter(SQ_CANDIDATO!=0, SQ_CANDIDATO_2018!=0) %>%
mutate(VARIACAO=VOTOS_2018-VOTOS_2016)
# Agora é só escrever o CSV. Novamente o "~/devel/blablabla" tem que ser o caminho do arquivo que você quer salvar.
write.csv2(candidatos2020_tmp, file=paste0("~/devel/eleicoes/BRASIL2016_laranjas.csv"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment