Esta análise usará os dados eleições de 2016 para mostrar algumas possibilidades do R. O download do arquivo usado abaixo pode ser feito no repositório de dados do TSE. O caminho neste link é “Candidatos > 2016 > Candidatos (formato ZIP)”.
Baixe o código desta análise aqui.
Caso você ainda não tenha instalado os pacotes abaixo, você precisa rodar esse código com a função install.packages()
.
install.packages("tidyverse")
install.packages("data.table")
Em seguida, precisamos carregar os pacotes que serão usados na análise com a função library()
.
library(tidyverse)
library(data.table)
Queremos saber em qual pasta estamos agora para, se necessário, mudar a pasta. Por isso, vamos usar a função setwd()
.
getwd()
Para importar o arquivo do TSE, informamos onde está o arquivo. Neste caso, o arquivo está no caminho “Downloads > consulta_cand_2016_24out2019”. Queremos acessar essa pasta e usamos a função setwd()
.
Isso vai de computador para computador. O nome da pasta “consulta_cand_24out2019” foi escolhido por mim, e o arquivo CSV está lá dentro.
setwd("~/Downloads/consulta_cand_2016_24out2019")
Usamos a função list.files()
para checar quais arquivos estão na pasta em que queremos trabalhar.
list.files()
Depois, usamos a função fread()
para importar o arquivo. O nome do arquivo precisa estar entre aspas, como mostramos abaixo, e também deve informar o formato da extensão do arquivo (no caso, CSV).
consulta_cand_BR <- fread("consulta_cand_2016_BRASIL.csv", encoding = "Latin-1")
A função View()
abre o arquivo em uma das abas do RStudio e te permite, por exemplo, olhar o arquivi e também buscar por termos.
View(consulta_cand_BR)
A função head()
mostra, por padrão, as seis primeiras linhas do arquivo lido. Também possível informar que queremos ver, por exemplo, as oito primeiras linhas do arquivo lido, com head(consulta_cand_BR, 8)
.
head(consulta_cand_BR)
A função summary()
é outra função para conseguir algumas informações sobre o arquivo.
summary(consulta_cand_BR)
A função unique()
mostra as correspondências únicas de determinada coluna.
unique(consulta_cand_BR$DS_CARGO)
A função length()
mostra o tamanho de determinada coluna.
length(consulta_cand_BR$DS_CARGO)
length(unique(consulta_cand_BR$DS_CARGO))
Usamos a função filter()
para filtrar o arquivo, já que só queremos os dados referentes a candidatos a prefeito. Abaixo, filtramos a coluna “DS_CARGO” por “PREFEITO” (ou seja, não entram os vice-prefeitos e os vereadores);
consulta_prefeito <- consulta_cand_BR %>%
filter(DS_CARGO == "PREFEITO")
Como não queremos trabalhar com um arquivo muito grande, nós selecionamos quais colunas queremos manter no arquivo. Para isso, usamos a função select()
.
consulta_prefeito <- consulta_prefeito %>%
select(SG_UF, SG_UE, NM_UE, NM_CANDIDATO,
NM_URNA_CANDIDATO, SG_PARTIDO, DS_SIT_TOT_TURNO,
DS_COMPOSICAO_COLIGACAO)
Também renomeamos os nomes de algumas colunas do arquivo (o novo nome aparece primeiro e precisa estar entre aspas). Usamos a função rename()
.
consulta_prefeito <- consulta_prefeito %>%
rename("NM_PREFEITO" = NM_CANDIDATO,
"NM_URNA_PREFEITO" = NM_URNA_CANDIDATO,
"SG_PARTIDO_PREFEITO" = SG_PARTIDO,
"DS_SIT_TOT_TURNO_PREFEITO" = DS_SIT_TOT_TURNO)
Usamos as funções group_by()
e summarise()
para contabilizar quantos candidatos a prefeito cada partido teve. Por isso, inserimos a coluna “SG_PARTIDO_PREFEITO” dentro de group_by()
. E pedimos, com n()
, para contar em quantas linhas cada partido aparece.
cand_prefeito_por_partido <- consulta_prefeito %>%
group_by(SG_PARTIDO_PREFEITO) %>%
summarise(int = n())
Usamos as funções group_by()
e summarise()
para contabilizar quantos candidatos a cada cargo cada partido teve. Agora, repare, inserimos tanto “DS_CARGO” quanto “SG_PARTIDO” dentro de group_by()
. Novamente, usamos o summarise()
e o n()
para contar o número de linhas, já que cada linha é um candidato.
cand_por_partido <- consulta_cand_BR %>%
group_by(DS_CARGO, SG_PARTIDO) %>%
summarise(int = n())
View(cand_por_partido)
Agora, queremos que cada linha seja um partido e que os cargos eletivos sejam as colunas. Os valores das colunas devem ser a soma da quantidade de candidatos. Usamos a função spread()
.
cand_por_partido_new <- cand_por_partido %>%
spread(DS_CARGO, int)
View(cand_por_partido_new)
Já se quiséssemos voltar a como estava antes nós usamos a função gather()
.
cand_por_partido_new <- cand_por_partido_new %>%
gather(key = "DS_CARGO", value = "int", 2:4)
View(cand_por_partido_new)
Também podemos criar uma nova coluna no arquivo que contenha os nomes dos candidatos (NM_CANDIDATO) sem os acentos. Para isso, usamos a função rm_accent()
do pacote abjutils
. Usamos o mutate()
para criar a nova coluna.
library(abjutils)
novo_consulta_cand_BR <- consulta_cand_BR %>%
mutate(NM_CANDIDATO_SEM_ACENTO = rm_accent(NM_CANDIDATO))
Aqui, novamente usamos o mutate()
e informamos que a nossa nova coluna se chama “coluna_zoada” e tem o conteúdo “ Eu me chamo Gabriela. ” em todas as linhas.
novo_consulta_cand_BR <- novo_consulta_cand_BR %>%
mutate(coluna_zoada = " Eu me chamo Gabriela. ")
novo_consulta_cand_BR$coluna_zoada
A coluna “coluna_zoada” tem vários espaços desnecessários que atrapalham o seu conteúdo. Para resolver esse problema, vamos usar a função str_trim()
.
novo_consulta_cand_BR <- novo_consulta_cand_BR %>%
mutate(coluna_zoada = str_trim(coluna_zoada))
novo_consulta_cand_BR$coluna_zoada
Para apagar a coluna, podemos fazer assim:
novo_consulta_cand_BR$coluna_zoada <- NULL
Também podemos usar str_replace()
ou str_replace_all()
para fazer substituições no arquivo. Por exemplo, queremos substituir “AVANTE” por “Avante”.
novo_consulta_cand_BR <- novo_consulta_cand_BR %>%
mutate(SG_PARTIDO = str_replace_all(SG_PARTIDO, "AVANTE", "Avante"))
unique(novo_consulta_cand_BR$SG_PARTIDO)
Nessa mesma coluna (SG_PARTIDO), nós queremos apagar os espacços que aparecem em alguns partidos, como “PC do B” e “PT do B”. Por isso, vamos usar str_remove_all()
.
novo_consulta_cand_BR <- novo_consulta_cand_BR %>%
mutate(SG_PARTIDO = str_remove_all(SG_PARTIDO, " "))
unique(novo_consulta_cand_BR$SG_PARTIDO)
Usamos a função str_detect()
para encontrar determinado texto. Por exemplo, na coluna “DS_COMPOSICAO_COLIGACAO” nós queremos filtrar apenas as linhas que contenham o texto “PSL”. O “PSL” não aparece sozinho nas linhas, então o str_detect()
nos ajuda nisso.
consulta_cand_BR_PSL <- novo_consulta_cand_BR %>%
filter(str_detect(DS_COMPOSICAO_COLIGACAO, "PSL"))
unique(consulta_cand_BR_PSL$DS_COMPOSICAO_COLIGACAO)
Se a gente quisesse saber quais candidatos nasceram em outubro, a gente poderia pegar o conteúdo da coluna DT_NASCIMENTO, que está no formato “dd/mm/YY”, e pedir para separar as informações considerando o separador “/”. A função para isso se chama separate()
. Se quisermos manter a coluna original, podemos incluir remove = FALSE
.
novo_consulta_cand_BR_out <- novo_consulta_cand_BR %>%
separate(DT_NASCIMENTO, c("dia", "mes", "ano"), sep = "/", remove = FALSE) %>%
filter(mes == "10")
unique(novo_consulta_cand_BR_out$mes)
Da mesma forma que nós podemos separar, nós também podemos unir. A função se chama unite()
. Por exemplo, queremos uma coluna que tenha tanto o nome do munícipio quanto a sigla da UF. Queremos algo assim: “Angra dos Reis - RJ”; “Conde - BA”; “Santos - SP”.
novo_consulta_cand_BR_cidade <- novo_consulta_cand_BR %>%
unite("cidade_e_UF", c("NM_UE", "SG_UF"), sep = " - ")
unique(novo_consulta_cand_BR_cidade$cidade_e_UF)
Esta etapa é bem importante. Nós agora vamos cruzar, com left_join()
, os dois arquivos criados abaixo (“consulta_prefeito” e “consulta_vice_prefeito”). O cruzamento desses arquivos se chamará “consulta_merged”.
Para o cruzamento, não vamos levar em conta apenas uma coluna, mas sim três colunas. Para haver correspondência de um arquivo com o outro, ambos devem ter valores iguais nas colunas “SG_UF”, “NM_UE”, “DS_COMPOSICAO_COLIGACAO”.
Assim, teremos em apenas uma coluna informações sobre os candidatos a prefeito e vice-prefeito que estão na mesma chapa, na mesma cidade e na mesma UF.
consulta_prefeito <- consulta_cand_BR %>%
filter(DS_CARGO == "PREFEITO") %>%
select(SG_UF, SG_UE, NM_UE, NM_CANDIDATO,
NM_URNA_CANDIDATO, SG_PARTIDO, DS_SIT_TOT_TURNO,
DS_COMPOSICAO_COLIGACAO) %>%
rename("NM_PREFEITO" = NM_CANDIDATO,
"NM_URNA_PREFEITO" = NM_URNA_CANDIDATO,
"SG_PARTIDO_PREFEITO" = SG_PARTIDO,
"DS_SIT_TOT_TURNO_PREFEITO" = DS_SIT_TOT_TURNO)
consulta_vice_prefeito <- consulta_cand_BR %>%
filter(DS_CARGO == "VICE-PREFEITO") %>%
select(SG_UF, SG_UE, NM_UE, NM_CANDIDATO,
NM_URNA_CANDIDATO, SG_PARTIDO, DS_SIT_TOT_TURNO,
DS_COMPOSICAO_COLIGACAO) %>%
rename("NM_VICE_PREFEITO" = NM_CANDIDATO,
"NM_URNA_VICE_PREFEITO" = NM_URNA_CANDIDATO,
"SG_PARTIDO_VICE_PREFEITO" = SG_PARTIDO,
"DS_SIT_TOT_TURNO_VICE_PREFEITO" = DS_SIT_TOT_TURNO)
consulta_merged <- consulta_prefeito %>%
left_join(consulta_vice_prefeito,
by = c("SG_UF", "NM_UE", "DS_COMPOSICAO_COLIGACAO"))
consulta_chapa_psl_pt <- consulta_merged %>%
filter(SG_PARTIDO_PREFEITO == "PSL" & SG_PARTIDO_VICE_PREFEITO == "PT" |
SG_PARTIDO_PREFEITO == "PT" & SG_PARTIDO_VICE_PREFEITO == "PSL")
consulta_chapa_psl_pt_eleita <- consulta_chapa_psl_pt %>%
filter(DS_SIT_TOT_TURNO_PREFEITO == "ELEITO")
Para baixar a versão final do nosso arquivo, nós podemos fazer assim, com a função write.csv()
:
write.csv(consulta_chapa_psl_pt_eleita, "consulta_chapa_psl_pt_eleita-27out2019.csv")