Algumas configurações para os chunks posteriores e coloração dos gráficos:
knitr::opts_chunk$set(echo = TRUE,
message = FALSE,
warning = FALSE,
fig.width = 8,
fig.height = 6,
fig.align = 'center',
fig.cap = 'Figura: {#label}',
dev = "svg",
encoding = 'latin1')
Sys.setlocale(locale = "pt_BR.UTF-8")
## [1] "LC_COLLATE=pt_BR.UTF-8;LC_CTYPE=pt_BR.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_NUMERIC=C;LC_TIME=pt_BR.UTF-8"
cores <- c('TARCISIO GOMES DE FREITAS' = '#4047ad',
'FERNANDO HADDAD' = '#802d34',
'RODRIGO GARCIA' = '#17330e',
'VOTO BRANCO' = '#242222',
'VOTO NULO' = '#141414',
'OUTROS' = '#333030')
Pedi para o chat GPT me fazer algumas perguntas sobre os dados da eleição para governador de São Paulo, de 2022. Ele formulou as seguintes questões:
1 - Qual foi o número total de eleitores que foram votar em São Paulo nas eleições estaduais para governador de 2022?
2 - Quantos candidatos concorreram ao cargo de governador em São Paulo?
3 - Qual foi a porcentagem de votos válidos recebidos pelo candidato eleito?
4 - Qual foi a porcentagem de abstenção nas eleições estaduais de São Paulo para governador?
5 - Quantos votos nulos e brancos foram registrados em São Paulo na eleição?
6 - Quais foram as principais cidades em São Paulo onde o candidato eleito obteve maior votação?
7 - Qual foi a diferença de votos entre o primeiro e o segundo colocado na eleição para governador em São Paulo?
Para responder as perguntas, pegaremos os dados oficiais do site do TSE e realizaremos as tratativas necessárias para chegar aos números desejados, e para a leitura, manipulação e visualização vamos utilizar alguns pacotes do R:
library("tidyverse")
library("geobr")
library("readxl")
library("abjutils")
library('stringr')
Primeiro baixamos o csv dos dados brutos no site do portal de dados abertos do TSE: dados.
Depois usaremos a função read.csv2 para realizar a leitura dos dados, importante utilizar o argumento fileEncoding devido a acentuação contida no nome dos munícipios e dos candidatos.
E depois realizaremos alguns filtros para selecionar apenas os dados referentes ao primeiro turno e a votação para governador.
## coleta de dados
dados_votacao_sp <- read.csv2("~/Consultas/Outros/eleicao/votacao_secao_2022_SP.csv",
fileEncoding = "latin1")
Agora que estamos com os dados brutos vamos começar a realizar as primeiras tratativas. Assim, primeiro pegaremos apenas os dados referentes ao primeiro turno e apenas para o cargo de governador. O código a seguir filtra os dados da votação com as nossas necessidades e os coloca no objeto data1.
Logo depois, nos objetos votes_x_percent e valid_votes, somamos os votos por candidato e não por municípios para chegarmos as primeiras respostas:
## cria a tabela correta
data1 <- # cria o objeto data1
dados_votacao_sp %>%
filter(DS_CARGO == 'GOVERNADOR', #filtra o cargo para governador
NR_TURNO == "1") %>% #filtra apenas o primeiro turno
select(NM_VOTAVEL, NM_MUNICIPIO, QT_VOTOS) #seleciona apenas as colunas referentes ao nome, municipio e quantidade de votos
## Somar por candidato
votes_x_percent <-
data1 %>%
select(NM_VOTAVEL, QT_VOTOS) %>% #seleciona apenas o nome e a quantidade de votos
group_by(NM_VOTAVEL) %>% # cria um grupo por nome de candidato
summarise(sum(QT_VOTOS)) %>% # cria um sumário com a soma dos votos por candidato
rename(votos = "sum(QT_VOTOS)") %>%
rename(candidato = "NM_VOTAVEL") %>%
mutate(percentual = round(votos/sum(votos)*100, 2)) %>% #cria uma outra coluna com o percentual de votos dos candidatos
arrange(desc(votos))
## Somar os votos válidos (excluindo votos brancos e nulos)
valid_votes <-
data1 %>%
select(NM_VOTAVEL, QT_VOTOS) %>%
group_by(NM_VOTAVEL) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(candidato = "NM_VOTAVEL") %>%
filter(candidato != "VOTO NULO" &
candidato != "VOTO BRANCO") %>%
mutate(percentual = round(votos/sum(votos)*100, 2)) %>%
arrange(desc(votos))
Apenas para melhorar a visualização futura, vamos unificar todos os candidatos que tiveram um montante inferior a 2% dos votos em uma coluna chamada de “outros”.
## Tabela de unificacao dos outros candidatos
primeiros_candidatos <- head(votes_x_percent, 5) #filtra os 5 primeiros registros
outros_candidatos <-
votes_x_percent %>%
tail(7) %>% #filtra os 7 ultimos registros
summarise(candidato = 'OUTROS', #cria o nome Outros
votos = sum(votos), #soma os 7 ultimos registros de votacao
percentual = sum(percentual)) #soma os percentuais dos 7 ultimos
votos_unificacao1 <-
rbind(primeiros_candidatos, outros_candidatos) #unifica os 5 primeiros com os 7 ultimos
Agora faremos as mesmas tratativas para os dados do segundo turno:
## segundo turno criamos o objeto data2 para armazenar
data2 <-
dados_votacao_sp %>%
filter(DS_CARGO == 'GOVERNADOR',
NR_TURNO == "2") %>% #filtro para o numero do turno
select(NM_VOTAVEL, NM_MUNICIPIO, QT_VOTOS)
## Somar por candidato
votes_x_percent2 <-
data2 %>%
select(NM_VOTAVEL, QT_VOTOS) %>%
group_by(NM_VOTAVEL) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(candidato = "NM_VOTAVEL") %>%
mutate(percentual = round(votos/sum(votos)*100, 2)) %>%
arrange(desc(votos))
## Somar por candidatos apenas os votos validos
valid_votes2 <-
data2 %>%
select(NM_VOTAVEL, QT_VOTOS) %>%
group_by(NM_VOTAVEL) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(candidato = "NM_VOTAVEL") %>%
filter(candidato != "VOTO NULO" &
candidato != "VOTO BRANCO") %>%
mutate(percentual = round(votos/sum(votos)*100, 2)) %>%
arrange(desc(votos))
Faremos uma separação dos votos válidos para uma das respostas futuras, basicamente usaremos o mesmo código anterior só que com os dados válidos:
## Tabela de unificacao dos outros candidatos
primeiros_candidatos2 <- head(valid_votes, 3) #filtra os 3 primeiros registros
outros_candidatos2 <-
valid_votes %>%
filter(candidato != 'VOTO NULO',
candidato != 'VOTO BRANCO') %>% #retira os votos de abstencao
tail(7) %>% #filtra os 7 ultimos registros
summarise(candidato = 'OUTROS', #cria o nome Outros
votos = sum(votos), #soma os 7 ultimos registros de votacao
percentual = sum(percentual)) #soma os percentuais dos 7 ultimos
votos_unificacao2 <-
rbind(primeiros_candidatos2, outros_candidatos2) #unifica os 5 primeiros com os 7 ultimos
Vamos criar uma visualização de dados em colunas, utilizando o ggplot2:
## graficos de comparacao
## grafico de quantidade absoluta de votos por candidato no primeiro turno
g1 <-
votos_unificacao1 %>%
ggplot()+
aes(x = reorder(candidato, -votos), y = votos, fill = candidato)+ #seleciona os eixos do grafico
geom_bar(stat = 'identity')+
geom_text(aes(label=votos, #cria os labels nas barras
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+ #seleciona as cores das barras
labs(x='',
y='',
title='Quantidade de votos por candidato (Primeiro Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
## grafico de quantidade percentual de votos por candidato no primeiro turno
g2 <- votos_unificacao1 %>%
ggplot()+
aes(x = reorder(candidato, -percentual), y = percentual, fill= candidato)+
geom_bar(stat = 'identity')+
geom_text(aes(label=percentual,
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+
labs(x='',
y='',
title = 'Percentual de votos por candidato (Primeiro Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
## grafico de quantidade absoluta de votos por candidato no segundo turno
g3 <-
votes_x_percent2 %>%
ggplot()+
aes(x = reorder(candidato, -votos), y = votos, fill = candidato)+
geom_bar(stat = 'identity')+
geom_text(aes(label=votos,
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+
labs(x='',
y='',
title = 'Quantidade de votos por candidato (Segundo Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
## grafico de quantidade percentual de votos por candidato no segundo turno
g4 <-
votes_x_percent2 %>%
ggplot()+
aes(x = reorder(candidato, -percentual), y = percentual, fill = candidato)+
geom_bar(stat = 'identity')+
geom_text(aes(label=percentual,
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+
labs(x='',
y='',
title='Percentual de votos por candidato (Segundo Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
Agora podemos criar a visualização conjunta dos votos absolutos do primeiro turno com a função grid arrange:
gridExtra::grid.arrange(g1,g3)
Figura: {#label}
E também a visualização conjunta dos votos percentuais por candidato:
gridExtra::grid.arrange(g2,g4)
Figura: {#label}
Agora com todas as manipulações e visualizações feitas, podemos responder as perguntas:
Para isso, basta somar todas as seções de votação de votação do primeiro turno:
print(sum(votes_x_percent$votos))
## [1] 27147847
print(sum(votes_x_percent2$votos))
## [1] 27341816
Assim, o número total de eleitores que foram as urnas no primeiro turno foi de 27147847 e no segundo turno de 27341816
Nesse caso, apenas devemos somar a quantidade de nomes únicos na coluna de candidatos do primeiro turno, porém usaremos o objeto com votos válidos, que já desconsidera votos brancos e nulos
print(length(unique(valid_votes$candidato)))
## [1] 10
Assim, chegamos a reposta da segunda questão, onde tinhamos 10 candidatos concorrente para o cargo de governador de São Paulo.
Para isso, podemos utilizar os objetos criados anteriormente para votos válidos e apenas criar a visualização de porcentagem:
g5 <- votos_unificacao2 %>%
ggplot()+
aes(x = reorder(candidato, -percentual), y = percentual, fill= candidato)+
geom_bar(stat = 'identity')+
geom_text(aes(label=percentual,
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+
labs(x='',
y='',
title = 'Percentual de votos validos por candidato (Primeiro Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
g6 <-
valid_votes2 %>%
ggplot()+
aes(x = reorder(candidato, -percentual), y = percentual, fill = candidato)+
geom_bar(stat = 'identity')+
geom_text(aes(label=percentual,
vjust=1.5),
color='white',
fontface='bold')+
scale_fill_manual(values = cores)+
labs(x='',
y='',
title='Percentual de votos validos por candidato (Segundo Turno)')+
theme_bw()+
theme(axis.text.y = element_blank(),
legend.position = 'none',
plot.title = element_text(face='bold',
size=11),
axis.text.x = element_text(face = 'bold',
size = 8,
color='black'))
E plotar a visualização:
gridExtra::grid.arrange(g5,g6)
Figura: {#label}
Assim, podemos ver que no primeiro turno, o candidato eleito Tarcísio Gomes, teve 42.32% dos votos válidos e no segundo turno 55.27% dos votos válidos. Como podemos ver no gráfico.
Segundo os dados do TSE, São Paulo tem 34667793 eleitores aptos, considerando esse número, teríamos:
print(round(abs(((34667793-27147847)/34667793)*100), 2))
## [1] 21.69
print(round(abs(((34667793-27341816)/34667793)*100), 2))
## [1] 21.13
Assim, a porcentagem de abstenção, pessoas que não compareceram as urnas para votação foi de 21.69% no primeiro turno e levemente menor no segundo, 21.13%.
Quando falamos dos eleitores que compareceram mas que votaram nulo ou branco, podemos observar nos gráficos feitos anteriormente para visualização inicial, sendo:
gridExtra::grid.arrange(g1,g3)
Figura: {#label}
No primeiro turno, 2149776 votos nulos e 1645522 brancos. Já no segundo turno 1849298 nulos e 1102504 brancos.
Quando falamos de maior votação, obviamente, os municípios que tem os maiores colégios eleitorais serão aqueles com maior representatividade na votação. Assim, a Região metropolitana de São Paulo mostrará números mais significativos.
Desse modo, vamos criar uma visualização gráfica que compare os municípios em que Tarcisio teve mais votação do que Haddad. Pintaremos esses lugares de azul, e os que ele recebeu menos votos de vermelho. Para criar isso vamos utilizar o pacote geobr:
### grafico de mapas
## puxar estado do geobr
state <- read_municipality(code_muni = 'SP',
year = 2020) %>%
mutate(muni = toupper(name_muni))
##
Downloading: 780 B
Downloading: 780 B
Downloading: 1.9 kB
Downloading: 1.9 kB
Downloading: 2.2 kB
Downloading: 2.2 kB
Downloading: 3.2 kB
Downloading: 3.2 kB
Downloading: 3.2 kB
Downloading: 3.2 kB
Downloading: 3.2 kB
Downloading: 3.2 kB
Downloading: 11 kB
Downloading: 11 kB
Downloading: 19 kB
Downloading: 19 kB
Downloading: 19 kB
Downloading: 19 kB
Downloading: 27 kB
Downloading: 27 kB
Downloading: 36 kB
Downloading: 36 kB
Downloading: 36 kB
Downloading: 36 kB
Downloading: 36 kB
Downloading: 36 kB
Downloading: 44 kB
Downloading: 44 kB
Downloading: 52 kB
Downloading: 52 kB
Downloading: 52 kB
Downloading: 52 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 68 kB
Downloading: 68 kB
Downloading: 68 kB
Downloading: 68 kB
Downloading: 68 kB
Downloading: 68 kB
Downloading: 76 kB
Downloading: 76 kB
Downloading: 92 kB
Downloading: 92 kB
Downloading: 110 kB
Downloading: 110 kB
Downloading: 120 kB
Downloading: 120 kB
Downloading: 140 kB
Downloading: 140 kB
Downloading: 160 kB
Downloading: 160 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 190 kB
Downloading: 190 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 220 kB
Downloading: 220 kB
Downloading: 230 kB
Downloading: 230 kB
Downloading: 230 kB
Downloading: 230 kB
Downloading: 240 kB
Downloading: 240 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 260 kB
Downloading: 260 kB
Downloading: 270 kB
Downloading: 270 kB
Downloading: 270 kB
Downloading: 270 kB
Downloading: 280 kB
Downloading: 280 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 300 kB
Downloading: 300 kB
Downloading: 310 kB
Downloading: 310 kB
Downloading: 310 kB
Downloading: 310 kB
Downloading: 320 kB
Downloading: 320 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 340 kB
Downloading: 340 kB
Downloading: 340 kB
Downloading: 340 kB
Downloading: 350 kB
Downloading: 350 kB
Downloading: 350 kB
Downloading: 350 kB
Downloading: 360 kB
Downloading: 360 kB
Downloading: 370 kB
Downloading: 370 kB
Downloading: 370 kB
Downloading: 370 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 400 kB
Downloading: 400 kB
Downloading: 400 kB
Downloading: 400 kB
Downloading: 410 kB
Downloading: 410 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 430 kB
Downloading: 430 kB
Downloading: 430 kB
Downloading: 430 kB
Downloading: 440 kB
Downloading: 440 kB
Downloading: 450 kB
Downloading: 450 kB
Downloading: 450 kB
Downloading: 450 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 470 kB
Downloading: 470 kB
Downloading: 480 kB
Downloading: 480 kB
Downloading: 480 kB
Downloading: 480 kB
Downloading: 490 kB
Downloading: 490 kB
Downloading: 500 kB
Downloading: 500 kB
Downloading: 500 kB
Downloading: 500 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 520 kB
Downloading: 520 kB
Downloading: 520 kB
Downloading: 520 kB
Downloading: 530 kB
Downloading: 530 kB
Downloading: 540 kB
Downloading: 540 kB
Downloading: 540 kB
Downloading: 540 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 560 kB
Downloading: 560 kB
Downloading: 560 kB
Downloading: 560 kB
Downloading: 570 kB
Downloading: 570 kB
Downloading: 580 kB
Downloading: 580 kB
Downloading: 580 kB
Downloading: 580 kB
Downloading: 590 kB
Downloading: 590 kB
Downloading: 590 kB
Downloading: 590 kB
Downloading: 590 kB
Downloading: 590 kB
Downloading: 600 kB
Downloading: 600 kB
Downloading: 610 kB
Downloading: 610 kB
Downloading: 610 kB
Downloading: 610 kB
Downloading: 620 kB
Downloading: 620 kB
Downloading: 620 kB
Downloading: 620 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 630 kB
Downloading: 640 kB
Downloading: 640 kB
Downloading: 650 kB
Downloading: 650 kB
Downloading: 650 kB
Downloading: 650 kB
Downloading: 660 kB
Downloading: 660 kB
Downloading: 670 kB
Downloading: 670 kB
Downloading: 670 kB
Downloading: 670 kB
Downloading: 670 kB
Downloading: 670 kB
Downloading: 680 kB
Downloading: 680 kB
Downloading: 680 kB
Downloading: 680 kB
Downloading: 680 kB
Downloading: 680 kB
Downloading: 690 kB
Downloading: 690 kB
Downloading: 690 kB
Downloading: 690 kB
Downloading: 700 kB
Downloading: 700 kB
Downloading: 710 kB
Downloading: 710 kB
Downloading: 710 kB
Downloading: 710 kB
Downloading: 720 kB
Downloading: 720 kB
Downloading: 720 kB
Downloading: 720 kB
Downloading: 730 kB
Downloading: 730 kB
Downloading: 730 kB
Downloading: 730 kB
Downloading: 740 kB
Downloading: 740 kB
Downloading: 740 kB
Downloading: 740 kB
Downloading: 740 kB
Downloading: 740 kB
Downloading: 750 kB
Downloading: 750 kB
Downloading: 760 kB
Downloading: 760 kB
Downloading: 760 kB
Downloading: 760 kB
Downloading: 760 kB
Downloading: 760 kB
Downloading: 770 kB
Downloading: 770 kB
Downloading: 770 kB
Downloading: 770 kB
Downloading: 770 kB
Downloading: 770 kB
Downloading: 780 kB
Downloading: 780 kB
Downloading: 790 kB
Downloading: 790 kB
Downloading: 790 kB
Downloading: 790 kB
Downloading: 800 kB
Downloading: 800 kB
Downloading: 800 kB
Downloading: 800 kB
Downloading: 800 kB
Downloading: 800 kB
Downloading: 810 kB
Downloading: 810 kB
Downloading: 820 kB
Downloading: 820 kB
Downloading: 820 kB
Downloading: 820 kB
Downloading: 830 kB
Downloading: 830 kB
Downloading: 840 kB
Downloading: 840 kB
Downloading: 850 kB
Downloading: 850 kB
Downloading: 850 kB
Downloading: 850 kB
Downloading: 850 kB
Downloading: 850 kB
Downloading: 860 kB
Downloading: 860 kB
Downloading: 870 kB
Downloading: 870 kB
Downloading: 870 kB
Downloading: 870 kB
Downloading: 880 kB
Downloading: 880 kB
Downloading: 890 kB
Downloading: 890 kB
Downloading: 890 kB
Downloading: 890 kB
Downloading: 890 kB
Downloading: 890 kB
Downloading: 900 kB
Downloading: 900 kB
Downloading: 910 kB
Downloading: 910 kB
Downloading: 910 kB
Downloading: 910 kB
Downloading: 920 kB
Downloading: 920 kB
Downloading: 920 kB
Downloading: 920 kB
Downloading: 930 kB
Downloading: 930 kB
Downloading: 930 kB
Downloading: 930 kB
Downloading: 930 kB
Downloading: 930 kB
Downloading: 940 kB
Downloading: 940 kB
Downloading: 950 kB
Downloading: 950 kB
Downloading: 950 kB
Downloading: 950 kB
Downloading: 960 kB
Downloading: 960 kB
Downloading: 970 kB
Downloading: 970 kB
Downloading: 970 kB
Downloading: 970 kB
Downloading: 970 kB
Downloading: 970 kB
Downloading: 980 kB
Downloading: 980 kB
Downloading: 990 kB
Downloading: 990 kB
Downloading: 1,000 kB
Downloading: 1,000 kB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.1 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.2 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.3 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
Downloading: 1.4 MB
## arrumar dados para o mapa 1 turno
tarcisio1 <- #filtra apenas os dados de votacao do tarcisio
data1 %>%
filter(NM_VOTAVEL == "TARCISIO GOMES DE FREITAS") %>%
group_by(NM_MUNICIPIO) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(municipio = "NM_MUNICIPIO")
##haddad
haddad1 <- #filtra apenas os dados de votacao do haddad
data1 %>%
filter(NM_VOTAVEL == "FERNANDO HADDAD") %>%
group_by(NM_MUNICIPIO) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(municipio = "NM_MUNICIPIO")
#tarcisio, haddad, rodrigo e others
comparation1 <- #junta as duas tabelas
full_join(tarcisio1, haddad1, by="municipio") %>%
rename(TARCISIO = "votos.x",
HADDAD = "votos.y") %>%
mutate(vencedor = ifelse(`TARCISIO` > `HADDAD`, "TARCISIO", "HADDAD")) %>% #cria tabela com o candidato que teve mais votos em cada municipio
arrange(desc(TARCISIO))
### problema encontrado, alguns municipios tem nomes incorretos no pacote do geobr
## descobrir os nomes errados
setdiff(comparation1$municipio, state$muni)
## [1] "SANTA BÁRBARA D OESTE" "ESTRELA D OESTE" "PALMEIRA D OESTE"
## [4] "SÃO LUÍS DO PARAITINGA" "APARECIDA D OESTE" "SANTA CLARA D OESTE"
## [7] "SANTA RITA D OESTE" "SÃO JOÃO DO PAU D ALHO" "GUARANI D OESTE"
## 9 nomes errados
comparation1$municipio <- gsub("SÃO LUÍS DO PARAITINGA", "SÃO LUIZ DO PARAITINGA", comparation1$municipio)
comparation1$municipio <- gsub("SÃO JOÃO DO PAU D ALHO", "SÃO JOÃO DO PAU D'ALHO", comparation1$municipio)
comparation1$municipio <- gsub("SANTA CLARA D OESTE", "SANTA CLARA D'OESTE", comparation1$municipio)
comparation1$municipio <- gsub("GUARANI D OESTE", "GUARANI D'OESTE", comparation1$municipio)
comparation1$municipio <- gsub("SANTA RITA D OESTE", "SANTA RITA D'OESTE",comparation1$municipio)
comparation1$municipio <- gsub("PALMEIRA D OESTE", "PALMEIRA D'OESTE", comparation1$municipio)
comparation1$municipio <- gsub("SANTA BÁRBARA D OESTE", "SANTA BÁRBARA D'OESTE", comparation1$municipio)
comparation1$municipio <- gsub("ESTRELA D OESTE", "ESTRELA D'OESTE", comparation1$municipio)
comparation1$municipio <- gsub("APARECIDA D OESTE", "APARECIDA D'OESTE", comparation1$municipio)
## depois da correcao realizar a juncao
full_maps1 <- #unir tabela de municipios com a tabelas com a votacao
left_join(state, comparation1, by=c('muni' = 'municipio'))
## mapa primeiro turno
m1 <-
ggplot() +
geom_sf(data = full_maps1,
aes(fill = vencedor),
color = "black") +
scale_fill_manual(values = c(`TARCISIO` = "#4047ad",
`HADDAD` = "#802d34"))+
theme_bw()+
labs(title = 'Maior quantidade de votos por município de São Paulo',
subtitle = 'TARCISIO VS HADDAD (1º Turno)')+
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
plot.title = element_text(size = 11,
face='bold'),
plot.subtitle = element_text(size=9,
face='italic'))
## arrumar dados para o mapa 2 turno
## tarcisio
tarcisio2 <-
data2 %>%
filter(NM_VOTAVEL == "TARCISIO GOMES DE FREITAS") %>%
group_by(NM_MUNICIPIO) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(municipio = "NM_MUNICIPIO")
##tarcisio e haddad
haddad2 <-
data2 %>%
filter(NM_VOTAVEL == "FERNANDO HADDAD") %>%
group_by(NM_MUNICIPIO) %>%
summarise(sum(QT_VOTOS)) %>%
rename(votos = "sum(QT_VOTOS)") %>%
rename(municipio = "NM_MUNICIPIO")
comparation2 <-
full_join(tarcisio2, haddad2, by="municipio") %>%
rename(TARCISIO = "votos.x",
HADDAD = "votos.y") %>%
arrange(desc(TARCISIO)) %>%
mutate(vencedor = ifelse(`TARCISIO` > `HADDAD`, "TARCISIO", "HADDAD"))
### problema encontrado, alguns municipios tem nomes incorretos no pacote do geobr
## descobrir os nomes errados
setdiff(comparation2$municipio, state$muni)
## [1] "SANTA BÁRBARA D OESTE" "SÃO LUÍS DO PARAITINGA" "ESTRELA D OESTE"
## [4] "PALMEIRA D OESTE" "APARECIDA D OESTE" "SANTA RITA D OESTE"
## [7] "SANTA CLARA D OESTE" "SÃO JOÃO DO PAU D ALHO" "GUARANI D OESTE"
## 9 nomes errados
comparation2$municipio <- gsub("SÃO LUÍS DO PARAITINGA", "SÃO LUIZ DO PARAITINGA", comparation2$municipio)
comparation2$municipio <- gsub("SÃO JOÃO DO PAU D ALHO", "SÃO JOÃO DO PAU D'ALHO", comparation2$municipio)
comparation2$municipio <- gsub("SANTA CLARA D OESTE", "SANTA CLARA D'OESTE", comparation2$municipio)
comparation2$municipio <- gsub("GUARANI D OESTE", "GUARANI D'OESTE", comparation2$municipio)
comparation2$municipio <- gsub("SANTA RITA D OESTE", "SANTA RITA D'OESTE",comparation2$municipio)
comparation2$municipio <- gsub("PALMEIRA D OESTE", "PALMEIRA D'OESTE", comparation2$municipio)
comparation2$municipio <- gsub("SANTA BÁRBARA D OESTE", "SANTA BÁRBARA D'OESTE", comparation2$municipio)
comparation2$municipio <- gsub("ESTRELA D OESTE", "ESTRELA D'OESTE", comparation2$municipio)
comparation2$municipio <- gsub("APARECIDA D OESTE", "APARECIDA D'OESTE", comparation2$municipio)
## depois da correcao realizar a juncao
full_maps2 <-
left_join(state, comparation2, by=c('muni' = 'municipio'))
## grafico de visualizacao
m2 <-
ggplot() +
geom_sf(data = full_maps2,
aes(fill = vencedor),
color = "black") +
scale_fill_manual(values = c(`TARCISIO` = "#4047ad",
`HADDAD` = "#802d34"))+
theme_bw()+
labs(title = 'Maior quantidade de votos por município de São Paulo',
subtitle = 'TARCISIO VS HADDAD (2º Turno)')+
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
plot.title = element_text(size = 11,
face='bold'),
plot.subtitle = element_text(size=9,
face='italic'))
Com os gráficos criados, vamos apenas criar a contagem de municipios por candidatos e visualizar os dois:
print(sum(str_count(full_maps1$vencedor, 'TARCISIO')))
## [1] 539
print(sum(str_count(full_maps2$vencedor, 'TARCISIO')))
## [1] 566
print(sum(str_count(full_maps1$vencedor, 'HADDAD')))
## [1] 106
print(sum(str_count(full_maps2$vencedor, 'HADDAD')))
## [1] 79
gridExtra::grid.arrange(m1, m2)
Figura: {#label}
Assim, no primeiro turno Tarcisio foi vitorioso em 539 municípios, enquanto Haddad foi para 106. Já no segundo turno, o número de Tarcisio sobe para 566, já Haddad os municípios em que Haddad foi o vencedor diminuíram para 79. Que mostra a maior migração dos eleitores de Rodrigo Garcia e dos outros candidatos foram para Tarcisio.
Curiosamente, Tarcisio teve menos votos na maioria dos municípios correspondentes às proximidades da capital, Fernando Haddad vendeu em quase todos, durante o primeiro turno. Além desses locais, Tarcisio apenas teve desvantagem na totalidade de votos, em alguns municípios de Presidente Prudente, Sorocaba, Araraquara e Taubaté. Vencendo em todos os outros.
Como vimos nos gráficos, Tarcisio recebeu 9881995 votos e Haddad 8337139. Já no segundo turno Tarcisio teve 13480643 e Haddad 10909371.
print(round(((9881995-8337139)/9881995)*100, 2))
## [1] 15.63
print(round(((13480643-10909371)/13480643)*100, 2))
## [1] 19.07
No primeiro turno, a diferença foi de 15.63% que passou para 19.07% no segundo turno.
O objetivo dessa análise foi meramente exploratório, tentando usar técnicas de ETL para responder as perguntas feitas pelo ChatGPT, as visualizações também, visaram apenas de maneiras simples dar uma visualização diferente das que encontramos como opção no site do TSE.