Encontro 3

Análise exploratória na prática: revisando conceitos e extraindo informações de um conjunto de dados real com R.

Os comandos a seguir mostram diversas técnicas vistas em aula para análise exploratória de variáveis qualitativas e quantitativas por meio de tabelas, gráficos e medidas.

Fica como tarefa aos interessados em linguagem R buscar maneiras de customizar os gráficos e tabelas e explorar ferramentas mais modernas para fazer a mesma análise proposta. Sugere-se fortemente a exploração de pacotes como dplyr e ggplot2.


#-----------------------------------------------------------------------
# Encontro 3: Revisão Prática - Perfil do Eleitorado (TSE RR 2024)
#-----------------------------------------------------------------------
rm(list = ls()) 
library(tidyverse)

# --- Seção 1: Configuração Inicial e Carregamento dos Dados ---

# No TSE, o padrão é read_csv2 (separador ; e encoding Latin1/ISO-8859-1)
dados_aula <- read_csv2("perfil_eleitor_secao_2024_RR.csv", 
                        locale = locale(encoding = "ISO-8859-1"))

# Primeiras linhas (inspeção inicial)
dados_aula[,c(6,10,12,14,16,18,20,22,24,26,27,28,29,30,31)] %>% 
  head() %>% 
  View()

# --- Seção 2: Análise Exploratória de Variáveis Qualitativas ---

## 2.1. Tabelas de Frequência
tabela_quali <- dados_aula %>%
  group_by(DS_ESTADO_CIVIL) %>%
  summarise("freq_abs" = sum(QT_ELEITORES_PERFIL)) %>%
  mutate(freq_rel = freq_abs / sum(freq_abs),
         perc = freq_rel * 100)

names(tabela_quali) <- c("Estado civil", "Freq. Abs.", 
                         "Freq. Rel.", "Percentual")
tabela_quali
tabela_quali %>% arrange(., desc(`Freq. Rel.`))

## 2.2. Gráficos para Variáveis Qualitativas

# 2.2.1. Gráficos de Barras Simples
ggplot(tabela_quali, aes(x = `Estado civil`, y = `Freq. Abs.`)) +
  geom_col(fill = "steelblue") +
  theme_minimal()

ggplot(tabela_quali, aes(x = reorder(`Estado civil`, `Freq. Abs.`), y = `Freq. Abs.`)) +
  geom_col(fill = "steelblue") +
  theme_minimal() + 
  xlab("Estado Civil")

ggplot(tabela_quali, aes(x = reorder(`Estado civil`, desc(`Freq. Abs.`)), 
                         y = `Freq. Abs.`)) +
  geom_col(fill = "steelblue") +
  theme_minimal() + 
  xlab("Estado Civil")

# 2.2.3. Gráficos de Barras Horizontais
ggplot(tabela_quali, aes(x = reorder(`Estado civil`, `Freq. Abs.`), 
                         y = `Freq. Abs.`)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  theme_minimal()+
  labs(x = "Estado Civil")

# 2.2.4. Gráficos de Barras Empilhadas (Uma única barra)
ggplot(tabela_quali, aes(x = "Paraná", 
                         y = `Freq. Abs.`, 
                         fill = `Estado civil`)) +
  geom_col(position = "stack")

# 2.2.5. Gráficos de Pizza
ggplot(tabela_quali, aes(x = "", y = `Freq. Abs.`, 
                         fill = `Estado civil`)) +
  geom_col() +
  coord_polar("y") +
  theme_void()

# --- Seção 3: Análise Exploratória de Variáveis Quantitativas ---

## 3.1. Tabelas de Frequência com Classes
# Criando faixas para a variável quantidade de eleitores por local
eleitores_local <- dados_aula %>%
  group_by(NM_LOCAL_VOTACAO) %>%
  summarise(freq = sum(QT_ELEITORES_PERFIL))

eleitores_local <- eleitores_local %>%
  mutate(Faixas = cut(freq, 
                      breaks = seq(0,4100,300), 
                      right = FALSE, 
                      include.lowest = TRUE,
                      dig.lab=10))

eleitores_local %>% group_by(Faixas) %>% summarise(n = n())

## 3.2. Gráficos para Variáveis Quantitativas (Variável: QT_ELEITORES_PERFIL)

# 3.2.1. Histograma e Densidade

ggplot(eleitores_local, aes(x = freq)) +
  geom_histogram(binwidth = 300, fill = "gray", col = 1, boundary = 0) +
  scale_x_continuous(
    breaks = seq(0, 4100, by = 300), 
    limits = c(0, 4100)
  ) +
  labs(title = "Histograma", x = 'Faixas', y = 'Frequência')

ggplot(eleitores_local, aes(x = freq)) +
  geom_density(color = "red", size = 1) +
  labs(title = "Densidade", x = '', y='Densidade')

ggplot(eleitores_local, aes(x = freq)) +
  geom_histogram(aes(y = ..density..), binwidth = 300, 
                 fill = "gray", col = 1, boundary = 0) +
  geom_density(color = "red", size = 1) +
  labs(title = "Histograma e Densidade", x = 'Faixas', y='Densidade')

# 3.2.2. Boxplot
ggplot(eleitores_local, aes(y = freq)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Boxplot")

# --- Seção 4: Medidas Resumo (Posição e Dispersão) ---

## 4.1. Medidas de Posição
resumo_posicao <- eleitores_local %>%
  summarise(
    media = mean(freq),
    mediana = median(freq),
    q1 = quantile(freq, 0.25),
    q3 = quantile(freq, 0.75),
    decil_9 = quantile(freq, 0.9)
  )

resumo_posicao

## 4.2. Medidas de Dispersão
resumo_dispersao <- eleitores_local %>%
  summarise(
    amplitude = diff(range(freq)),
    variancia = var(freq),
    desvio_padrao = sd(freq)#,
    #cv = (desvio_padrao / media) * 100,
    #dma = mean(abs(freq - mean(freq))) # Desvio Médio Absoluto
  )

resumo_dispersao

# 4.2.6. Escores Z (Padronização)
print(eleitores_local %>%
        mutate(z_score = scale(freq)), 
      n=nrow(eleitores_local))

# --- Seção 5: Análises Bivariadas ---

## 5.1. Tabelas de Contingência (Gênero vs Raça/Cor)
tabela_contingencia <- dados_aula %>%
  group_by(DS_GENERO, DS_RACA_COR) %>%
  summarise(total = sum(QT_ELEITORES_PERFIL)) 

# 5.1.2. Proporção Geral / 5.1.3. Por Linha / 5.1.4. Por Coluna
tabela_contingencia %>%
  mutate(prop_geral = total / sum(total)) %>%
  group_by(DS_GENERO) %>%
  mutate(prop_linha = total / sum(total))

## 5.2. Gráficos Bivariados (Quali vs Quali)

# 5.2.1. Barras lado a lado
ggplot(tabela_contingencia, aes(x = DS_GENERO, 
                                y = total, 
                                fill = DS_RACA_COR)) +
  geom_col(position = "dodge") 

ggplot(tabela_contingencia, aes(x = DS_RACA_COR, 
                                y = total, 
                                fill = DS_GENERO)) +
  geom_col(position = "dodge")

# 5.2.2. Barras empilhadas
ggplot(tabela_contingencia, aes(x = DS_GENERO, 
                                y = total, 
                                fill = DS_RACA_COR)) +
  geom_col(position = "stack")

ggplot(tabela_contingencia, aes(x = DS_RACA_COR, 
                                y = total, 
                                fill = DS_GENERO)) +
  geom_col(position = "stack")

# 5.2.3. Barras empilhadas proporcionais
ggplot(tabela_contingencia, aes(x = DS_GENERO, 
                                y = total, 
                                fill = DS_RACA_COR)) +
  geom_col(position = "fill") +
  labs(y = "Proporção")

ggplot(tabela_contingencia, aes(x = DS_RACA_COR, 
                                y = total, 
                                fill = DS_GENERO)) +
  geom_col(position = "fill") +
  labs(y = "Proporção")

## 5.3. Diagrama de Dispersão / 5.4. Correlação (Quanti vs Quanti)
# Relação entre Total de Eleitores e Eleitores com Deficiência por municipio

eleitores_pcd <- dados_aula %>%
  group_by(NR_SECAO) %>%
  summarise(eleitores = sum(QT_ELEITORES_PERFIL),
            pcd = sum(QT_ELEITORES_DEFICIENCIA))

ggplot(eleitores_pcd, aes(x = eleitores, 
                          y = pcd)) +
  geom_point(alpha = 0.8)

ggplot(eleitores_pcd, aes(x = eleitores, 
                          y = pcd)) +
  geom_point(alpha = 0.8) +
  geom_smooth(method = "lm")

ggplot(eleitores_pcd, aes(x = eleitores, 
                          y = pcd)) +
  geom_point(alpha = 0.8) +
  geom_smooth(method = "loess")

ggplot(eleitores_pcd, aes(x = eleitores, 
                          y = pcd)) +
  geom_point(alpha = 0.8) +
  geom_smooth(method = "loess", se=F)+
  geom_smooth(method = "lm", se=F, col=2)

cor(eleitores_pcd$eleitores, eleitores_pcd$pcd)

## 5.5. Comparativa por Grupo (Quanti vs Quali)

# 5.5.1. Medidas Resumo por Grupo (Gênero)
eleitores_genero <- dados_aula %>%
  group_by(NM_LOCAL_VOTACAO, DS_GENERO) %>%
  summarise(eleitores = sum(QT_ELEITORES_PERFIL))

eleitores_genero %>%
  group_by(DS_GENERO) %>%
  summarise(media = mean(eleitores), 
            sd = sd(eleitores))

# 5.5.2. Boxplots Comparativos
ggplot(eleitores_genero, aes(x = DS_GENERO, 
                             y = eleitores)) +
  geom_boxplot()

# 5.5.3. Histograma e Densidade por Grupo
ggplot(eleitores_genero, aes(x = eleitores, fill = DS_GENERO)) +
  geom_density(alpha = 0.4) +
  labs(title = "")