Created
October 29, 2020 00:57
-
-
Save lgelape/0a2d39d95d011a65911211ce691c8c7d to your computer and use it in GitHub Desktop.
Código para análises da notícia
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################## | |
################################################## | |
################################################## | |
##### | |
##### REELEICAO EM DESERTOS DE NOTICIA | |
##### | |
##### | |
# Lucas Gelape | |
# [email protected] | |
# Pacotes | |
library(cepespR) | |
library(newsatlasbr) | |
library(dplyr) | |
library(readxl) | |
library(stringr) | |
library(tidyr) | |
library(ggplot2) | |
library(forcats) | |
library(stringi) | |
# Registrar no Atlas | |
atlas_signin("[email protected]", "senha") | |
# Funcoes | |
percentual_arredondar <- function(x){round(x*100, digits = 2)} | |
tema_base <- function(banco){ | |
banco %>% | |
ggplot() + | |
theme_minimal() + | |
theme(legend.position = "bottom", | |
legend.direction = "horizontal", | |
plot.title = element_text(hjust = 0.5, size = 10), | |
axis.text.x = element_text(size = 8), | |
axis.text.y = element_text(size = 8), | |
plot.caption = element_text(hjust = 0.5)) | |
} | |
################################################################################################### | |
##### ABRE BANCOS QUE SERAO UTILIZADOS | |
### CANDIDATURAS: | |
# Candidaturas de 2012, 2016 e 2020; | |
# Corrigindo inconsistencias em siglas e CPFs; | |
# Retirando candidaturas não-deferidas ou sob recurso na Justica Eleitoral. | |
## 2012 | |
prefeitos2012 <- cepespR::get_candidates(2012, "Prefeito") %>% | |
filter(COD_SIT_TOT_TURNO != "5") | |
## 2016 | |
prefeitos2016 <- cepespR::get_candidates(2016, "Prefeito") %>% | |
filter(COD_SIT_TOT_TURNO != "5") | |
vereadores2016 <- cepespR::get_candidates(2016, "Vereador") | |
## 2020 | |
candidatos2020 <- read.csv2("consulta_cand_2020_BRASIL.csv", | |
stringsAsFactors = F, fileEncoding = "latin1") %>% | |
mutate(SG_UE = str_pad(SG_UE, 5, side = "left", pad = "0"), | |
NR_CPF_CANDIDATO = str_pad(NR_CPF_CANDIDATO, 11, side = "left", pad = "0"), | |
NM_CANDIDATO = tolower(stri_trans_general(NM_CANDIDATO, "Latin-ASCII"))) %>% | |
# Identifiquei um prefeito eleito em 2016 que estava com o CPF errado em 2020 | |
mutate(NR_CPF_CANDIDATO = ifelse(NM_CANDIDATO == "adriano rodrigues de moraes", "85003581149", NR_CPF_CANDIDATO)) | |
prefeitos2020 <- candidatos2020 %>% | |
filter(DS_DETALHE_SITUACAO_CAND != "RENÚNCIA" | DS_DETALHE_SITUACAO_CAND != "CANCELADO" | | |
DS_DETALHE_SITUACAO_CAND != "CASSADO" | DS_DETALHE_SITUACAO_CAND != "FALECIDO" | | |
DS_DETALHE_SITUACAO_CAND != "INDEFERIDO" | DS_DETALHE_SITUACAO_CAND != "PEDIDO NÃO CONHECIDO", | |
CD_CARGO == 11) | |
vereadores2020 <- candidatos2020 %>% | |
filter(DS_DETALHE_SITUACAO_CAND != "RENÚNCIA" | DS_DETALHE_SITUACAO_CAND != "CANCELADO" | | |
DS_DETALHE_SITUACAO_CAND != "CASSADO" | DS_DETALHE_SITUACAO_CAND != "FALECIDO" | | |
DS_DETALHE_SITUACAO_CAND != "INDEFERIDO" | DS_DETALHE_SITUACAO_CAND != "PEDIDO NÃO CONHECIDO", | |
CD_CARGO == 13) | |
### CODIGOS IBGE E TSE | |
# Para unir os bancos do Atlas e TSE | |
ibge_tse <- read_excel("/Users/lucasgelape/Google Drive (USP)/Bancos/Munic2016_IBGE_TSE.xlsx") %>% | |
select(`COD MUNIC 7_IBGE`, TSECod_5) %>% | |
rename(codmun_ibge = `COD MUNIC 7_IBGE`, codmun_tse = TSECod_5) | |
### ATLAS DA NOTICIA | |
## N. de veiculos de imprensa por municipio | |
# Categoriza os municipios em deserto, quase deserto e nao deserto; | |
# Categoriza por porte populacional | |
municipios_atlas <- newsatlasbr::get_municipalities() %>% | |
mutate(categorias = case_when(qtd_veiculos == 0 ~ "deserto", | |
qtd_veiculos > 0 & qtd_veiculos < 3 ~ "quase deserto", | |
qtd_veiculos > 2 ~ "nao deserto")) %>% | |
left_join(ibge_tse, by = c("codmun" = "codmun_ibge")) %>% | |
mutate(tamanho_mun = case_when(populacao < 10000 ~ "ate 10k", | |
populacao > 10000 & populacao <= 20000 ~ "10-20k", | |
populacao > 20000 & populacao <= 50000 ~ "20-50k", | |
populacao > 50000 & populacao <= 100000 ~ "50-100k", | |
populacao > 100000 & populacao <= 200000 ~ "100-200k", | |
populacao > 200000 & populacao <= 500000 ~ "200-500k", | |
populacao > 500000 & populacao <= 1000000 ~ "500-1000k", | |
populacao > 1000000 ~ "1mi+"), | |
tamanho_mun = factor(tamanho_mun, | |
levels = c("ate 10k", "10-20k", "20-50k","50-100k", | |
"100-200k", "200-500k", "500-1000k", "1mi+"), | |
labels = c("Até 10 mil", "Entre 10\ne 20 mil", "Entre 20\ne 50 mil", | |
"Entre 50\ne 100 mil", "Entre 100\ne 200 mil", | |
"Entre 200\ne 500 mil", "Entre\n500 mil e 1mi", | |
"Mais de 1mi")), | |
categorias = factor(categorias, | |
levels = c("deserto", "quase deserto", "nao deserto"), | |
labels = c("Deserto", "Quase deserto", "Não deserto"))) | |
################################################################################################### | |
################################################################################################### | |
################################################################################################### | |
##### CANDIDATOS A REELEICAO - VEREADORES | |
#### PREPARANDO OS BANCOS | |
### CICLO ELEITORAL 2016-2020 | |
# Puxa os vereadores eleitos em 2016 | |
vereadores_eleitos_2016 <- vereadores2016 %>% | |
filter(DESC_SIT_TOT_TURNO == "ELEITO POR MEDIA" | DESC_SIT_TOT_TURNO == "ELEITO POR QP", | |
DESCRICAO_ELEICAO == "Eleições Municipais 2016") %>% | |
select(ANO_ELEICAO, CPF_CANDIDATO, SIGLA_UE, CODIGO_CARGO, SIGLA_PARTIDO) %>% | |
distinct() | |
# Puxa o n. de cadeiras de 2016 | |
cadeiras2016 <- electionsBR::seats_local(2016) %>% | |
filter(CODIGO_CARGO == 13) %>% | |
select(SIGLA_UE, QTDE_VAGAS) | |
# Abre os candidatos a prefeito 2020 (deferidos) | |
vereadores_candidatos_2020 <- vereadores2020 %>% | |
select(NR_CPF_CANDIDATO, SG_UE, CD_CARGO, SG_PARTIDO) %>% | |
mutate(NR_CPF_CANDIDATO = as.character(NR_CPF_CANDIDATO), | |
SG_UE = as.character(SG_UE)) | |
names(vereadores_candidatos_2020) <- c("CPF_CANDIDATO", "SIGLA_UE", "CODIGO_CARGO", "SIGLA_PARTIDO") | |
names(vereadores_candidatos_2020) <- paste0(names(vereadores_candidatos_2020), "_2020") | |
# Junta os bancos pelo CPF dos candidatos e codigo do IBGE | |
vereadores_eleitos_2016 <- left_join(vereadores_eleitos_2016, vereadores_candidatos_2020, | |
by = c("CPF_CANDIDATO" = "CPF_CANDIDATO_2020", | |
"SIGLA_UE" = "SIGLA_UE_2020")) %>% | |
distinct() %>% | |
mutate(duplicado = duplicated(CPF_CANDIDATO)) %>% | |
left_join(ibge_tse, by = c("SIGLA_UE" = "codmun_tse")) %>% | |
left_join(municipios_atlas, by = c("codmun_ibge" = "codmun")) %>% | |
mutate(reeleicao = ifelse(is.na(CODIGO_CARGO_2020), "nao", "sim")) %>% | |
left_join(cadeiras2016, by = "SIGLA_UE") | |
# Calcula o numero e o percentual de vereadores que disputam a reeleicao em cada municipio | |
reeleicao_vereadores_2016 <- vereadores_eleitos_2016 %>% | |
group_by(SIGLA_UE) %>% | |
mutate(eleitos = n(), | |
reeleicao_n = sum(reeleicao == "sim"), | |
reeleicao_p = percentual_arredondar(reeleicao_n/QTDE_VAGAS)) %>% | |
ungroup() %>% | |
select(ANO_ELEICAO, SIGLA_UE, codmun_ibge, municipio, | |
populacao, tamanho_mun, categorias, IDHM, | |
QTDE_VAGAS, eleitos, reeleicao_n, reeleicao_p) %>% | |
group_by(tamanho_mun, categorias) %>% | |
mutate(media_reeleicao = mean(reeleicao_p)) %>% | |
ungroup() %>% | |
distinct() | |
################################################################################################### | |
#### GERANDO OS RESULTADOS DE VEREADORES | |
# Percentual de candidatos a reeleicao por municipio em cada faixa populacional e categoria do Atlas | |
# (restrito a municipios com menos de 100k/hab) | |
reeleicao_2016 <- reeleicao_vereadores_2016 %>% | |
filter(populacao < 100000) %>% | |
group_by(tamanho_mun, categorias) %>% | |
summarise(media_reeleicao = round(mean(reeleicao_p), digits = 1), | |
numero_cidades = n()) %>% | |
ungroup() | |
# Grafico do % de candidatos a reeleicao por municipio, faixa populacional e categoria | |
reeleicao_vereadores_2016 %>% | |
filter(populacao < 50000) %>% | |
group_by(tamanho_mun, categorias) %>% | |
summarise(media_reeleicao = mean(reeleicao_p)) %>% | |
ungroup() %>% | |
mutate(categorias = fct_rev(categorias)) %>% | |
mutate(tamanho_mun = fct_rev(tamanho_mun)) %>% | |
tema_base() + | |
geom_col(aes(x = tamanho_mun, y = media_reeleicao, fill = categorias), position = "dodge") + | |
labs(x = "", y = "Candidatos a reeleição (em %)") + | |
scale_fill_grey(start = 0.8, end = 0.2) + | |
guides(fill = guide_legend(title = "Reeleição")) + | |
coord_flip() | |
# Municipios em que todos os vereadores disputam a reeleicao | |
municipios_100 <- filter(reeleicao_vereadores_2016, reeleicao_p == 100) | |
prop.table(table(municipios_100$categorias))*100 | |
################################################################################################### | |
################################################################################################### | |
################################################################################################### | |
##### CANDIDATOS A REELEICAO PREFEITOS | |
### CICLO ELEITORAL 2016-2020 | |
## Primeiro, precisamos identificar os prefeitos eleitos em 2016 que nao sao reelegiveis. | |
# Assim, temos que buscar quais deles foram eleitos em 2012 (ou em eleicoes suplementares | |
# antes de 2016). | |
# Puxa os prefeitos eleitos em 2012 (base) | |
prefeitos_eleitos_em2012 <- prefeitos2012 %>% | |
filter(DESC_SIT_TOT_TURNO == "ELEITO", | |
DESCRICAO_ELEICAO == "ELEIÇÃO MUNICIPAL 2012") %>% | |
select(ANO_ELEICAO, SIGLA_UE, CODIGO_CARGO, CPF_CANDIDATO, SIGLA_PARTIDO) %>% | |
distinct() %>% | |
mutate(momento = "eleicao") | |
# Eleicoes suplementares | |
prefeitos_eleitos_2012_suplementares <- prefeitos2012 %>% | |
filter(DESC_SIT_TOT_TURNO == "ELEITO", | |
DESCRICAO_ELEICAO != "ELEIÇÃO MUNICIPAL 2012") %>% | |
select(ANO_ELEICAO, SIGLA_UE, CODIGO_CARGO, CPF_CANDIDATO, SIGLA_PARTIDO) %>% | |
distinct() %>% | |
mutate(momento = "eleicao suplementar", | |
momento = ifelse(CPF_CANDIDATO == "42305730225", "eleicao suplementar 2", momento)) | |
# Empilha e remove as duplicacoes (municipios que tiveram eleicoes suplementares) | |
prefeitos_eleitos_2012 <- bind_rows(prefeitos_eleitos_em2012, prefeitos_eleitos_2012_suplementares) %>% | |
arrange(desc(momento)) %>% | |
mutate(duplicado = duplicated(SIGLA_UE)) %>% | |
filter(duplicado == F) %>% | |
select(-c(duplicado, momento)) | |
# Puxa os candidatos a prefeito em 2016 | |
prefeitos_candidatos_2016 <- prefeitos2016 %>% | |
filter(DESCRICAO_ELEICAO == "Eleições Municipais 2016") %>% | |
select(CPF_CANDIDATO, SIGLA_UE, CODIGO_CARGO, SIGLA_PARTIDO, DESC_SIT_TOT_TURNO) %>% | |
distinct() | |
names(prefeitos_candidatos_2016) <- paste0(names(prefeitos_candidatos_2016), "_2016") | |
# Junta os dois bancos pelo CPF dos candidatos | |
prefeitos_eleitos_2012 <- left_join(prefeitos_eleitos_2012, prefeitos_candidatos_2016, | |
by = c("CPF_CANDIDATO" = "CPF_CANDIDATO_2016")) %>% | |
left_join(ibge_tse, by = c("SIGLA_UE" = "codmun_tse")) %>% | |
left_join(municipios_atlas, by = c("codmun_ibge" = "codmun")) %>% | |
group_by(SIGLA_UE) %>% | |
mutate(soma = n()) %>% | |
ungroup() | |
# Seleciona o CPF dos prefeitos de 2012 nao reelegiveis em 2016 | |
# para retira-los da conta da reeleicao de 2016-2020 | |
nao_reelegiveis <- prefeitos_eleitos_2012 %>% | |
filter(DESC_SIT_TOT_TURNO_2016 == "ELEITO") %>% | |
.$CPF_CANDIDATO | |
# Elimina objetos que nao serao mais usados | |
rm(list = c("prefeitos_eleitos_em2012", "prefeitos_eleitos_2012_suplementares", "prefeitos_candidatos_2016")) | |
# Puxa os prefeitos eleitos em 2016 (base) | |
prefeitos_eleitos_em2016 <- prefeitos2016 %>% | |
filter(DESCRICAO_ELEICAO == "Eleições Municipais 2016", | |
DESC_SIT_TOT_TURNO == "ELEITO") %>% | |
select(CPF_CANDIDATO, SIGLA_UE, CODIGO_CARGO, SIGLA_PARTIDO) %>% | |
distinct() %>% | |
mutate(momento = "eleicao") %>% | |
mutate(reelegivel = ifelse(CPF_CANDIDATO %in% nao_reelegiveis, "nao", "sim")) | |
# Eleicoes suplementares 2016 | |
prefeitos_eleitos_2016_suplementares <- prefeitos2016 %>% | |
filter(DESC_SIT_TOT_TURNO == "ELEITO", | |
DESCRICAO_ELEICAO != "Eleições Municipais 2016") %>% | |
select(ANO_ELEICAO, SIGLA_UE, CODIGO_CARGO, CPF_CANDIDATO, SIGLA_PARTIDO) %>% | |
distinct() %>% | |
mutate(momento = "eleicao suplementar") | |
# Identifica os "atuais" mandatarios | |
prefeitos_eleitos_2016 <- bind_rows(prefeitos_eleitos_em2016, prefeitos_eleitos_2016_suplementares) %>% | |
arrange(desc(momento)) %>% | |
mutate(duplicado = duplicated(SIGLA_UE)) %>% | |
filter(duplicado == F) %>% | |
select(-c(duplicado, momento)) %>% | |
mutate(reelegivel = ifelse(is.na(reelegivel), "sim", reelegivel)) | |
# Abre os candidatos a prefeito 2020 (deferidos) | |
prefeitos_candidatos_2020 <- prefeitos2020 %>% | |
select(NR_CPF_CANDIDATO, SG_UE, CD_CARGO, SG_PARTIDO) %>% | |
mutate(NR_CPF_CANDIDATO = as.character(NR_CPF_CANDIDATO), | |
SG_UE = as.character(SG_UE)) | |
names(prefeitos_candidatos_2020) <- c("CPF_CANDIDATO", "SIGLA_UE", "CODIGO_CARGO", "SIGLA_PARTIDO") | |
names(prefeitos_candidatos_2020) <- paste0(names(prefeitos_candidatos_2020), "_2020") | |
# Junta os bancos pelo CPF dos candidatos e codigo do IBGE | |
prefeitos_eleitos_2016 <- left_join(prefeitos_eleitos_2016, prefeitos_candidatos_2020, | |
by = c("CPF_CANDIDATO" = "CPF_CANDIDATO_2020", | |
"SIGLA_UE" = "SIGLA_UE_2020")) %>% | |
distinct() %>% | |
mutate(duplicado = duplicated(CPF_CANDIDATO)) %>% | |
left_join(ibge_tse, by = c("SIGLA_UE" = "codmun_tse")) %>% | |
left_join(municipios_atlas, by = c("codmun_ibge" = "codmun")) %>% | |
mutate(reeleicao = ifelse(is.na(CODIGO_CARGO_2020), "nao", "sim")) | |
################################################################################################### | |
#### GERA OS RESULTADOS - REELEICAO DE PREFEITOS | |
# Faz o calculo do n. de prefeitos candidatos a reeleicao, por categoria e possibilidade de reeleicao | |
reeleicao_prefeitos <- prefeitos_eleitos_2016 %>% | |
group_by(reelegivel, reeleicao, categorias) %>% | |
summarise(numero = n()) %>% | |
ungroup() %>% | |
group_by(reelegivel, categorias) %>% | |
mutate(percentual = percentual_arredondar(numero/sum(numero))) %>% | |
ungroup() | |
# Grafico: categorias de municipio x concorreu a reeleicao | |
prefeitos_eleitos_2016 %>% | |
filter(reelegivel == "sim", | |
!is.na(categorias)) %>% | |
mutate(categorias = fct_rev(categorias)) %>% | |
group_by(reeleicao, categorias) %>% | |
summarise(numero = n()) %>% | |
ungroup() %>% | |
group_by(categorias) %>% | |
mutate(total_categoria = sum(numero)) %>% | |
ungroup() %>% | |
mutate(percentual = percentual_arredondar(numero/total_categoria)) %>% | |
arrange(categorias) %>% | |
tema_base() + | |
geom_col(aes(x = categorias, y = percentual, fill = reeleicao), position = "dodge") + | |
labs(x = "", y = "Candidatos a reeleição (em %)") + | |
scale_y_continuous(limits = c(0,100), breaks = seq(0,100,25)) + | |
scale_fill_grey(start = 0.8, end = 0.2) + | |
guides(fill = guide_legend(title = "Reeleição")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment