Panorama eleitoral · Pernambuco · 2026
Um olhar sobre o comparecimento e a abstenção no primeiro turno das eleições de 2026 em Pernambuco. Este relatório reúne uma investigação exploratória sobre a participação eleitoral e suas diferenças pelo território pernambucano.
Explore as seções pelo menu lateral para conhecer as fontes, acompanhar as etapas de preparação dos dados e navegar pelos resultados da análise.
O cenário político brasileiro é marcado por uma expressiva polarização ideológica, tornando a conquista de votos de eleitores com posicionamentos já estabelecidos um desafio para as campanhas eleitorais. Nesse contexto, a mobilização dos cidadãos que não compareceram às urnas no primeiro turno pode representar uma oportunidade estratégica para ampliar o eleitorado no segundo turno. Compreender o perfil desses eleitores, portanto, torna-se relevante para orientar ações de aproximação e comunicação.
Diante disso, este estudo tem como objetivo analisar os padrões de comparecimento e abstenção eleitoral em Pernambuco no primeiro turno das Eleições Gerais de 2026. A partir de dados oficiais do Tribunal Superior Eleitoral (TSE), são exploradas características demográficas e territoriais do eleitorado, como gênero, faixa etária e grau de escolaridade, buscando identificar grupos e regiões com diferentes níveis de abstenção.
Espera-se que os resultados forneçam subsídios para o planejamento de campanhas presidenciais no segundo turno, auxiliando na identificação de públicos prioritários e na definição de estratégias de mobilização e comunicação mais adequadas. Ressalta-se, contudo, que os dados agregados permitem caracterizar padrões de abstenção, mas não determinar as motivações individuais ou as preferências políticas dos eleitores ausentes.
Os dados utilizados neste estudo foram obtidos por meio do Portal de Dados Abertos do Tribunal Superior Eleitoral (TSE), que disponibiliza informações estatísticas referentes ao comparecimento e à abstenção eleitoral nas Eleições de 2026.
O conjunto de dados pode ser consultado no seguinte endereço:
Comparecimento e Abstenção – Eleições 2026
A documentação técnica disponibilizada pelo TSE também foi utilizada para compreender a estrutura dos arquivos, o significado das variáveis e os códigos empregados no registro das informações.
A análise é desenvolvida na linguagem R e utiliza pacotes que oferecem recursos para manipulação, organização e visualização dos dados. A tabela a seguir apresenta os pacotes necessários para a execução do código que você verá nesse projeto e garantem a reprodutibilidade das análises.
| Pacote | Finalidade |
|---|---|
library(tidyverse) |
Conjunto de pacotes para manipulação, transformação e visualização de dados. Já carregado no setup. |
library(sf) |
Manipulação de dados espaciais, especialmente para a elaboração de mapas. |
O download disponibilizado pelo Tribunal Superior Eleitoral (TSE) contém um arquivo compactado (.zip) com os dados referentes ao perfil dos eleitores aptos a votar que compareceram e dos que se abstiveram no primeiro turno das Eleições Gerais de 2026, abrangendo as 27 unidades da Federação. O pacote também inclui um leiaute com a descrição das variáveis presentes no conjunto de dados (dataset).
Os arquivos de dados possuem extensão .csv. Para esta análise, foi utilizado exclusivamente o arquivo correspondente ao estado de Pernambuco (PE).
dados_originais <- readr::read_csv2(
"perfil_comparecimento_abstencao_2026_PE.csv",
locale = readr::locale(encoding = "latin1")
)
tibble(
total_observacoes = nrow(dados_originais),
total_variaveis = ncol(dados_originais)
) |>
knitr::kable(
caption = "Dimensões da base de dados",
col.names = c("Total de observações", "Total de variáveis"),
align = 'l'
)
| Total de observações | Total de variáveis |
|---|---|
| 467244 | 45 |
Para facilitar a compreensão da estrutura do conjunto de dados, apresenta-se a seguir o dicionário de variáveis, contendo a identificação e a descrição dos campos disponibilizados pelo TSE. As variáveis estão agrupadas conforme sua finalidade, abrangendo informações de geração do arquivo, identificação territorial, características demográficas e indicadores de comparecimento e abstenção.
Observa-se que os campos iniciados por CD_ representam
códigos de identificação, enquanto aqueles iniciados por
DS_ apresentam suas respectivas descrições. Já os campos
iniciados por QT_ correspondem a quantidades relacionadas
ao eleitorado e à participação eleitoral.
dicionario_variaveis <- tibble::tibble(
grupo = c(
rep("Metadados", 4),
rep("Identificação territorial", 4),
rep("Características demográficas", 22),
rep("Indicadores eleitorais gerais", 3),
rep("Indicadores relacionados à deficiência", 2),
rep("Transferência temporária", 2),
rep("Obrigatoriedade do voto", 4),
rep("Deficiência e obrigatoriedade do voto", 4)
),
variavel = names(dados_originais),
descricao = c(
"Data de geração do arquivo pelo TSE.",
"Horário de geração do arquivo pelo TSE.",
"Ano de realização da eleição.",
"Número do turno eleitoral.",
"Sigla da unidade da Federação.",
"Código de identificação do município.",
"Nome do município.",
"Número da zona eleitoral.",
"Código correspondente ao gênero.",
"Descrição do gênero.",
"Código correspondente ao estado civil.",
"Descrição do estado civil.",
"Código correspondente à faixa etária.",
"Descrição da faixa etária.",
"Código correspondente ao grau de instrução.",
"Descrição do grau de instrução.",
"Código correspondente à classificação de cor ou raça.",
"Descrição da classificação de cor ou raça.",
"Código de identificação da condição quilombola.",
"Descrição da condição quilombola.",
"Código que identifica se o eleitor declarou ser intérprete de Libras.",
"Descrição da condição de ser ou não intérprete de Libras.",
"Código correspondente à identidade de gênero.",
"Descrição da identidade de gênero.",
"Código correspondente ao idioma indígena.",
"Descrição do idioma indígena.",
"Código correspondente ao grupo indígena.",
"Descrição do grupo indígena.",
"Código correspondente ao idioma quilombola.",
"Descrição do idioma quilombola.",
"Quantidade de eleitores aptos a votar.",
"Quantidade de eleitores que compareceram.",
"Quantidade de eleitores que se abstiveram.",
"Quantidade de eleitores com deficiência que compareceram.",
"Quantidade de eleitores com deficiência que se abstiveram.",
"Quantidade de eleitores vinculados à transferência temporária que compareceram.",
"Quantidade de eleitores vinculados à transferência temporária que se abstiveram.",
"Quantidade de eleitores com voto facultativo que compareceram.",
"Quantidade de eleitores com voto facultativo que se abstiveram.",
"Quantidade de eleitores com voto obrigatório que compareceram.",
"Quantidade de eleitores com voto obrigatório que se abstiveram.",
"Quantidade de eleitores com deficiência e voto facultativo que compareceram.",
"Quantidade de eleitores com deficiência e voto facultativo que se abstiveram.",
"Quantidade de eleitores com deficiência e voto obrigatório que compareceram.",
"Quantidade de eleitores com deficiência e voto obrigatório que se abstiveram."
)
)
knitr::kable(
dicionario_variaveis,
col.names = c("Grupo", "Variável", "Descrição"),
align = c("l", "l", "l"),
caption = "Dicionário de variáveis da base de dados"
)
| Grupo | Variável | Descrição |
|---|---|---|
| Metadados | DT_GERACAO | Data de geração do arquivo pelo TSE. |
| Metadados | HH_GERACAO | Horário de geração do arquivo pelo TSE. |
| Metadados | ANO_ELEICAO | Ano de realização da eleição. |
| Metadados | NR_TURNO | Número do turno eleitoral. |
| Identificação territorial | SG_UF | Sigla da unidade da Federação. |
| Identificação territorial | CD_MUNICIPIO | Código de identificação do município. |
| Identificação territorial | NM_MUNICIPIO | Nome do município. |
| Identificação territorial | NR_ZONA | Número da zona eleitoral. |
| Características demográficas | CD_GENERO | Código correspondente ao gênero. |
| Características demográficas | DS_GENERO | Descrição do gênero. |
| Características demográficas | CD_ESTADO_CIVIL | Código correspondente ao estado civil. |
| Características demográficas | DS_ESTADO_CIVIL | Descrição do estado civil. |
| Características demográficas | CD_FAIXA_ETARIA | Código correspondente à faixa etária. |
| Características demográficas | DS_FAIXA_ETARIA | Descrição da faixa etária. |
| Características demográficas | CD_GRAU_INSTRUCAO | Código correspondente ao grau de instrução. |
| Características demográficas | DS_GRAU_INSTRUCAO | Descrição do grau de instrução. |
| Características demográficas | CD_COR_RACA | Código correspondente à classificação de cor ou raça. |
| Características demográficas | DS_COR_RACA | Descrição da classificação de cor ou raça. |
| Características demográficas | CD_QUILOMBOLA | Código de identificação da condição quilombola. |
| Características demográficas | DS_QUILOMBOLA | Descrição da condição quilombola. |
| Características demográficas | CD_INTERPRETE_LIBRAS | Código que identifica se o eleitor declarou ser intérprete de Libras. |
| Características demográficas | DS_INTERPRETE_LIBRAS | Descrição da condição de ser ou não intérprete de Libras. |
| Características demográficas | CD_IDENTIDADE_GENERO | Código correspondente à identidade de gênero. |
| Características demográficas | DS_IDENTIDADE_GENERO | Descrição da identidade de gênero. |
| Características demográficas | CD_IDIOMA_INDIGENA | Código correspondente ao idioma indígena. |
| Características demográficas | DS_IDIOMA_INDIGENA | Descrição do idioma indígena. |
| Características demográficas | CD_GRUPO_INDIGENA | Código correspondente ao grupo indígena. |
| Características demográficas | DS_GRUPO_INDIGENA | Descrição do grupo indígena. |
| Características demográficas | CD_IDIOMA_QUILOMBOLA | Código correspondente ao idioma quilombola. |
| Características demográficas | DS_IDIOMA_QUILOMBOLA | Descrição do idioma quilombola. |
| Indicadores eleitorais gerais | QT_APTOS | Quantidade de eleitores aptos a votar. |
| Indicadores eleitorais gerais | QT_COMPARECIMENTO | Quantidade de eleitores que compareceram. |
| Indicadores eleitorais gerais | QT_ABSTENCAO | Quantidade de eleitores que se abstiveram. |
| Indicadores relacionados à deficiência | QT_COMPARECIMENTO_DEFICIENCIA | Quantidade de eleitores com deficiência que compareceram. |
| Indicadores relacionados à deficiência | QT_ABSTENCAO_DEFICIENCIA | Quantidade de eleitores com deficiência que se abstiveram. |
| Transferência temporária | QT_COMPARECIMENTO_TTE | Quantidade de eleitores vinculados à transferência temporária que compareceram. |
| Transferência temporária | QT_ABSTENCAO_TTE | Quantidade de eleitores vinculados à transferência temporária que se abstiveram. |
| Obrigatoriedade do voto | QT_COMPAREC_FACULTATIVO | Quantidade de eleitores com voto facultativo que compareceram. |
| Obrigatoriedade do voto | QT_ABST_FACULTATIVO | Quantidade de eleitores com voto facultativo que se abstiveram. |
| Obrigatoriedade do voto | QT_COMPAREC_OBRIGATORIO | Quantidade de eleitores com voto obrigatório que compareceram. |
| Obrigatoriedade do voto | QT_ABST_OBRIGATORIO | Quantidade de eleitores com voto obrigatório que se abstiveram. |
| Deficiência e obrigatoriedade do voto | QT_COMPAREC_DEFIC_FACULTATIVO | Quantidade de eleitores com deficiência e voto facultativo que compareceram. |
| Deficiência e obrigatoriedade do voto | QT_ABST_DEFIC_FACULTATIVO | Quantidade de eleitores com deficiência e voto facultativo que se abstiveram. |
| Deficiência e obrigatoriedade do voto | QT_COMPAREC_DEFIC_OBRIGATORIO | Quantidade de eleitores com deficiência e voto obrigatório que compareceram. |
| Deficiência e obrigatoriedade do voto | QT_ABST_DEFIC_OBRIGATORIO | Quantidade de eleitores com deficiência e voto obrigatório que se abstiveram. |
Após a identificação das variáveis, é possível observar uma amostra dos registros importados.
head(dados_originais)
Como o conjunto de dados é composto essencialmente por variáveis
categóricas, observa-se que as colunas iniciadas em CD_ e
DS_ representam, em geral, a mesma informação,
diferenciando-se apenas pela forma de apresentação: códigos numéricos e
descrições textuais, respectivamente. Dessa forma, para evitar
redundâncias e facilitar a interpretação dos resultados, serão mantidas
preferencialmente as colunas descritivas (DS_), enquanto as
colunas de códigos (CD_) serão removidas da base utilizada
nas análises.
Também foram identificadas colunas cujos valores permanecem
constantes em todas as observações, como DT_GERACAO,
HH_GERACAO, ANO_ELEICAO, NR_TURNO
e SG_UF. Como essas variáveis não apresentam variação entre
os registros, não contribuem para as análises propostas e podem ser
removidas sem perda de informação relevante para os objetivos deste
estudo.
dados_originais |>
summarise(
across(
c(DT_GERACAO, HH_GERACAO, ANO_ELEICAO, NR_TURNO, SG_UF),
~ n_distinct(.x, na.rm = FALSE)
)
)
dados <- dados_originais |>
select(
-starts_with("CD_"),
-c(
DT_GERACAO,
HH_GERACAO,
ANO_ELEICAO,
NR_TURNO,
SG_UF
)
)
Após a remoção das colunas consideradas irrelevantes para as análises, a estrutura do conjunto de dados passou a apresentar as seguintes dimensões:
tibble(
total_observacoes = nrow(dados),
total_variaveis = ncol(dados)
) |>
knitr::kable(
caption = "Dimensões da base de dados após limpeza",
col.names = c("Total de observações", "Total de variáveis"),
align = 'l'
)
| Total de observações | Total de variáveis |
|---|---|
| 467244 | 28 |
Vale destacar que os códigos -1 e -3,
utilizados nas colunas numéricas para representar informações não
registradas ou inválidas, possuem correspondência nas respectivas
colunas descritivas, sendo representados por categorias textuais como
“NÃO INFORMADO” e “Inválido”, respectivamente. Dessa forma, considerando
que as descrições textuais serão priorizadas nesta análise, não é
necessário realizar um tratamento adicional desses códigos na base
preparada para as análises.
dados |>
summarise(
across(
everything(),
~ sum(is.na(.x))
)
) |>
pivot_longer(
cols = everything(),
names_to = "variavel",
values_to = "valores_ausentes"
) |>
knitr::kable(
caption = "Quantidade de valores ausentes por variável",
col.names = c("Nome da variável", "Valores ausentes"),
align = "lr"
)
| Nome da variável | Valores ausentes |
|---|---|
| NM_MUNICIPIO | 0 |
| NR_ZONA | 0 |
| DS_GENERO | 0 |
| DS_ESTADO_CIVIL | 0 |
| DS_FAIXA_ETARIA | 0 |
| DS_GRAU_INSTRUCAO | 0 |
| DS_COR_RACA | 0 |
| DS_QUILOMBOLA | 0 |
| DS_INTERPRETE_LIBRAS | 0 |
| DS_IDENTIDADE_GENERO | 0 |
| DS_IDIOMA_INDIGENA | 0 |
| DS_GRUPO_INDIGENA | 0 |
| DS_IDIOMA_QUILOMBOLA | 0 |
| QT_APTOS | 0 |
| QT_COMPARECIMENTO | 0 |
| QT_ABSTENCAO | 0 |
| QT_COMPARECIMENTO_DEFICIENCIA | 0 |
| QT_ABSTENCAO_DEFICIENCIA | 0 |
| QT_COMPARECIMENTO_TTE | 0 |
| QT_ABSTENCAO_TTE | 0 |
| QT_COMPAREC_FACULTATIVO | 0 |
| QT_ABST_FACULTATIVO | 0 |
| QT_COMPAREC_OBRIGATORIO | 0 |
| QT_ABST_OBRIGATORIO | 0 |
| QT_COMPAREC_DEFIC_FACULTATIVO | 0 |
| QT_ABST_DEFIC_FACULTATIVO | 0 |
| QT_COMPAREC_DEFIC_OBRIGATORIO | 0 |
| QT_ABST_DEFIC_OBRIGATORIO | 0 |
A identificação de registros duplicados é uma etapa importante da auditoria dos dados, pois permite detectar possíveis inconsistências que podem comprometer os resultados da análise, especialmente em situações de dupla contagem.
Neste estudo, considera-se um registro inteiramente duplicado quando uma linha apresenta valores idênticos aos de outra em todas as colunas do conjunto de dados. Inicialmente, verifica-se a quantidade de registros duplicados identificados:
total_duplicados <- sum(duplicated(dados))
str(total_duplicados)
## int 53
Para visualizar todas as ocorrências envolvidas nas duplicações, incluindo tanto as primeiras aparições quanto suas respectivas repetições, são selecionados os registros correspondentes:
dados_duplicados <- dados |>
filter(
duplicated(dados) |
duplicated(dados, fromLast = TRUE)
)
dados_duplicados |>
arrange(NM_MUNICIPIO, NR_ZONA, DS_FAIXA_ETARIA)
Ao examinar as observações duplicadas, verifica-se que elas ocorrem em pares, isto é, cada registro repetido possui exatamente duas ocorrências no conjunto de dados. Essa distribuição é apresentada a seguir:
dados_duplicados |>
count(across(everything()), name = "ocorrencias") |>
filter(ocorrencias > 1) |>
count(ocorrencias, name = "quantidade_de_grupos") |>
knitr::kable(
caption = "Grupos fuplicados",
col.names = c(
"Ocorrências",
"Quantidade de grupos"
),
align = "l"
)
| Ocorrências | Quantidade de grupos |
|---|---|
| 2 | 53 |
Na análise das características dos registros duplicados, observa-se
que todos compartilham o mesmo valor na variável
DS_IDENTIDADE_GENERO: “Transgênero”. Para investigar esse
padrão, são contabilizadas as categorias distintas de cada variável,
desconsiderando as colunas de quantidade (QT_).
dados_duplicados |>
summarise(
across(
-starts_with("QT_"),
~ n_distinct(.x, na.rm = FALSE)
)
)
Essa constatação levanta a hipótese de que a duplicidade possa estar relacionada à forma como os registros referentes à identidade de gênero foram organizados ou disponibilizados pelo TSE. Entretanto, a coincidência observada não é suficiente para estabelecer uma relação entre os dois fatores, tampouco para afirmar que houve uma falha no registro dessas informações.
Dessa forma, torna-se necessário investigar se a categoria “Transgênero” está efetivamente associada à ocorrência de duplicidades ou se esse padrão pode ser explicado por outras características dos registros.
Para aprofundar a investigação, verifica-se a distribuição dos
registros duplicados e não duplicados entre as categorias da variável
DS_IDENTIDADE_GENERO. Para isso, é criada uma variável
indicadora de duplicidade, permitindo comparar as ocorrências entre os
grupos:
dados |>
mutate(
duplicado = duplicated(dados) |
duplicated(dados, fromLast = TRUE)
) |>
group_by(DS_IDENTIDADE_GENERO) |>
summarise(
total_registros = n(),
registros_duplicados = sum(duplicado),
percentual_duplicados = registros_duplicados / total_registros * 100
) |>
arrange(desc(percentual_duplicados))|>
knitr::kable(
caption = "Percentual de duplicatas por identidade de gênero",
col.names = c("Descrição identidade de gênero", "Total de registro", "Registros duplicados", "Percentual de duplicados"),
align = "l",
digits = 2
)
| Descrição identidade de gênero | Total de registro | Registros duplicados | Percentual de duplicados |
|---|---|---|---|
| Transgênero | 3909 | 106 | 2.71 |
| Cisgênero | 261378 | 0 | 0.00 |
| NÃO INFORMADO | 141755 | 0 | 0.00 |
| Prefere não informar | 60202 | 0 | 0.00 |
O resultado evidencia que todos os 106 registros identificados como duplicados pertencem à categoria “Transgênero”. Entretanto, essa categoria também apresenta 3.803 registros que não possuem duplicidade. Nas demais categorias de identidade de gênero, não foram identificadas ocorrências duplicadas.
Portanto, embora as duplicidades estejam concentradas na categoria “Transgênero”, elas não abrangem todos os registros associados a essa classificação. Esse comportamento indica uma possível associação entre a identidade de gênero e a ocorrência de duplicidades, entretanto, os resultados, isoladamente, não permitem determinar a causa desse padrão nem afirmar que houve uma falha no processo de registro ou disponibilização dos dados pelo TSE.
Apesar da identificação de registros duplicados na etapa anterior, é possível realizar verificações adicionais para avaliar a consistência dos quantitativos presentes no conjunto de dados. Como a base apresenta informações agregadas, a repetição de uma linha não significa necessariamente que os valores totais estejam incorretos. Entretanto, essas ocorrências podem influenciar os resultados de operações de soma, sendo necessário avaliar seu impacto separadamente.
Inicialmente, verifica-se se os quantitativos de cada registro respeitam a relação entre eleitores aptos, comparecimento e abstenção. Considera-se consistente o registro em que a quantidade de eleitores aptos corresponde à soma dos eleitores que compareceram e daqueles que se abstiveram, conforme a seguinte expressão:
\[ QT\_APTOS = QT\_COMPARECIMENTO + QT\_ABSTENCAO \]
Para verificar essa condição, calcula-se a diferença entre a quantidade de eleitores aptos e a soma das duas categorias de participação eleitoral:
dados_validacao <- dados |>
mutate(
diferenca = QT_APTOS -
(QT_COMPARECIMENTO + QT_ABSTENCAO)
)
Em seguida, são contabilizados os registros consistentes, inconsistentes e aqueles que eventualmente apresentam valores ausentes nos campos necessários à verificação.
dados_validacao |>
summarise(
total_registros = n(),
registros_consistentes = sum(diferenca == 0, na.rm = TRUE),
registros_inconsistentes = sum(diferenca != 0, na.rm = TRUE),
registros_sem_validacao = sum(is.na(diferenca)),
percentual_consistente = mean(diferenca == 0, na.rm = TRUE) * 100
) |>
knitr::kable(
caption = "Consistência dos quantitativos por registro",
col.names = c(
"Total de registros",
"Consistentes",
"Inconsistentes",
"Sem validação",
"Consistentes (%)"
),
align = "l"
)
| Total de registros | Consistentes | Inconsistentes | Sem validação | Consistentes (%) |
|---|---|---|---|---|
| 467244 | 467244 | 0 | 0 | 100 |
Após essa primeira verificação, observa-se que os registros apresentam coerência quanto à relação entre as três quantidades analisadas. Isso indica que, individualmente, os valores de comparecimento e abstenção correspondem ao total de eleitores aptos informado em cada linha.
Entretanto, essa consistência individual não garante que a soma dos quantitativos de toda a base esteja livre de possíveis distorções decorrentes das duplicidades identificadas anteriormente. Por esse motivo, torna-se necessário comparar os totais calculados a partir do conjunto de dados com os números divulgados pelo Tribunal Superior Eleitoral (TSE).
Para essa comparação, foram consultadas duas fontes oficiais. O portal Resultados do TSE (quando consultado: Última atualização 24/10/2026 - 12:41:15 (Horário local)) apresenta os seguintes quantitativos para Pernambuco:
| Eleitorado apto | Comparecimento | Taxa comparecimento | Abstenção | Taxa abstenção |
|---|---|---|---|---|
| 7.216.989 | 5.905.236 | 81,82% | 1.311.753 | 18.18% |
Por outro lado, o portal Estatíticas eleitorais do TSE (quando consultado: Última atualização: 13/10/2026 - 16:46) apresenta valores ligeiramente diferentes:
| Eleitorado apto | Comparecimento | Taxa comparecimento | Abstenção | Taxa abstenção |
|---|---|---|---|---|
| 7.225.744 | 5.913.207 | 81,84% | 1.312.537 | 18,16% |
Observa-se, portanto, uma diferença entre os quantitativos apresentados pelas duas fontes, o que exige cautela na escolha dos valores de referência para a validação. Essas divergências podem estar relacionadas a critérios de atualização, extração ou apresentação dos dados, sendo necessário considerar o período e os filtros utilizados em cada consulta.
Para reproduzir os indicadores apresentados pelos portais, também são calculadas as taxas de comparecimento e abstenção a partir dos quantitativos da base:
\[ \text{Taxa de abstenção} = \frac{QT\_ABSTENCAO}{QT\_APTOS} \times 100 \]
\[ \text{Taxa de comparecimento} = \frac{QT\_COMPARECIMENTO}{QT\_APTOS} \times 100 \]
Por fim, os quantitativos totais e suas respectivas taxas são calculados para a base original e para uma versão sem registros inteiramente duplicados. Essa comparação permite avaliar se as duplicidades identificadas anteriormente interferem nos resultados agregados.
resumo_comparativo <- bind_rows(
dados |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_comparecimento = sum(QT_COMPARECIMENTO, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE)
) |>
mutate(base = "Original"),
dados |>
distinct() |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_comparecimento = sum(QT_COMPARECIMENTO, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE)
) |>
mutate(base = "Sem duplicatas")
) |>
mutate(
taxa_comparecimento = total_comparecimento / total_aptos * 100,
taxa_abstencao = total_abstencao / total_aptos * 100
) |>
select(
base,
total_aptos,
total_comparecimento,
taxa_comparecimento,
total_abstencao,
taxa_abstencao
)
resumo_comparativo |>
knitr::kable(
caption = "Comparação dos quantitativos gerais da base",
col.names = c(
"Base",
"Eleitores aptos",
"Comparecimento",
"Taxa de comparecimento (%)",
"Abstenção",
"Taxa de abstenção (%)"
),
align = "l",
digits = 2
)
| Base | Eleitores aptos | Comparecimento | Taxa de comparecimento (%) | Abstenção | Taxa de abstenção (%) |
|---|---|---|---|---|---|
| Original | 7225744 | 5913207 | 81.84 | 1312537 | 18.16 |
| Sem duplicatas | 7225690 | 5913161 | 81.84 | 1312529 | 18.16 |
A soma dos quantitativos presentes na base original resultou em 7.225.744 eleitores aptos, dos quais 5.913.207 compareceram às urnas e 1.312.537 se abstiveram. As taxas calculadas correspondem, respectivamente, a 81,84% de comparecimento e 18,16% de abstenção.
Ao comparar os resultados com as informações do portal Estatísticas Eleitorais do TSE, observa-se correspondência exata entre os quantitativos e percentuais, apesar das duplicidades identificadas anteriormente. Entretanto, existem pequenas divergências em relação aos dados do portal Resultados do TSE.
Dessa forma, embora a base apresente consistência em relação a uma das fontes oficiais consultadas, essa concordância não permite descartar possíveis inconsistências nos registros nem determinar a origem das duplicidades. Ainda assim, considera-se viável dar continuidade às análises, mantendo-se essas ressalvas.
Inicialmente, foram examinadas as categorias presentes na variável
DS_GENERO, com o objetivo de identificar os valores
registrados e verificar a quantidade de ocorrências de cada um. Para
complementar essa caracterização, também foram contabilizados os
quantitativos de eleitores aptos e de abstenções correspondentes a cada
categoria.
Observou-se a presença de registros classificados como “NÃO INFORMADO”, que não apresentam informações suficientes para a comparação pretendida. Por esse motivo, essa categoria foi desconsiderada no cálculo das taxas de abstenção por gênero, mantendo-se os demais registros da base original.
dados |>
group_by(DS_GENERO) |>
summarise(
total_registros = n(),
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(total_aptos)) |>
knitr::kable(
caption = "Distribuição dos registros e quantitativos eleitorais por gênero",
col.names = c(
"Gênero",
"Registros",
"Eleitores aptos",
"Abstenções"
),
align = "l"
)
| Gênero | Registros | Eleitores aptos | Abstenções |
|---|---|---|---|
| FEMININO | 252482 | 3876071 | 639907 |
| MASCULINO | 214487 | 3349351 | 672397 |
| NÃO INFORMADO | 275 | 322 | 233 |
A partir dos quantitativos de eleitores aptos e de abstenções, foi calculada a taxa de abstenção de cada gênero, dividindo-se o total de abstenções pelo total de eleitores aptos da respectiva categoria.
abstencao_genero <- dados |>
group_by(DS_GENERO) |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
taxa_abstencao = total_abstencao / total_aptos * 100,
.groups = "drop"
) |>
filter(
DS_GENERO != "NÃO INFORMADO"
) |>
arrange(desc(taxa_abstencao))
abstencao_genero |>
knitr::kable(
caption = "Abstenção eleitoral por gênero",
col.names = c(
"Gênero",
"Eleitores aptos",
"Abstenções",
"Taxa de abstenção (%)"
),
align = "l",
digits = 2
)
| Gênero | Eleitores aptos | Abstenções | Taxa de abstenção (%) |
|---|---|---|---|
| MASCULINO | 3349351 | 672397 | 20.08 |
| FEMININO | 3876071 | 639907 | 16.51 |
ggplot(
abstencao_genero,
aes(
x = reorder(DS_GENERO, taxa_abstencao),
y = taxa_abstencao
)
) +
geom_col(fill = "#C98791") +
coord_flip() +
labs(
title = "Taxa de abstenção por gênero",
x = "Gênero",
y = "Taxa de abstenção (%)"
) +
theme_minimal()
O gráfico apresenta uma taxa de abstenção superior entre os eleitores do
gênero masculino, aproximadamente 20%, enquanto entre os eleitores do
gênero feminino o percentual fica em torno de 16,5%. Essa diferença
indica que, proporcionalmente ao eleitorado apto de cada grupo, a
abstenção foi mais elevada entre os homens.
É importante destacar que essa comparação considera as taxas relativas de cada grupo, e não apenas os quantitativos absolutos de abstenções. Dessa forma, evita-se que diferenças no tamanho dos eleitorados sejam interpretadas equivocadamente como diferenças na proporção de eleitores que deixaram de comparecer.
Em seguida, foi realizada uma análise semelhante utilizando a
variável DS_FAIXA_ETARIA. Inicialmente, foram identificadas
as categorias existentes e contabilizados os registros, os eleitores
aptos e as abstenções correspondentes a cada faixa etária.
Assim como na análise anterior, foi identificada uma categoria sem informação válida para a comparação, denominada “Inválido”. Seus registros foram desconsiderados no cálculo das taxas de abstenção por idade.
dados |>
group_by(DS_FAIXA_ETARIA) |>
summarise(
total_registros = n(),
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(total_aptos)) |>
knitr::kable(
caption = "Distribuição dos registros e quantitativos eleitorais por faixa etária",
col.names = c(
"Faixa etária",
"Registros",
"Eleitores aptos",
"Abstenções"
),
align = "l"
)
| Faixa etária | Registros | Eleitores aptos | Abstenções |
|---|---|---|---|
| 40 a 44 anos | 37763 | 726026 | 100412 |
| 25 a 29 anos | 30243 | 713973 | 143260 |
| 35 a 39 anos | 35826 | 706772 | 112825 |
| 30 a 34 anos | 33230 | 703286 | 127875 |
| 45 a 49 anos | 38073 | 690351 | 85808 |
| 50 a 54 anos | 37311 | 615681 | 69051 |
| 55 a 59 anos | 37085 | 540311 | 57597 |
| 21 a 24 anos | 26420 | 525979 | 106518 |
| 60 a 64 anos | 35634 | 482228 | 54201 |
| 65 a 69 anos | 31336 | 373732 | 51572 |
| 70 a 74 anos | 25394 | 287305 | 85515 |
| 75 a 79 anos | 19158 | 207411 | 97705 |
| 20 anos | 13936 | 121215 | 21028 |
| 80 a 84 anos | 13613 | 120417 | 75631 |
| 19 anos | 12180 | 109626 | 16866 |
| 18 anos | 9943 | 97126 | 10165 |
| 85 a 89 anos | 9425 | 62696 | 46943 |
| 17 anos | 6054 | 59726 | 5472 |
| 16 anos | 4057 | 36311 | 3034 |
| 90 a 94 anos | 5743 | 25441 | 21743 |
| 95 a 99 anos | 3102 | 11280 | 10643 |
| 100 anos ou mais | 1595 | 8722 | 8624 |
| Inválido | 123 | 129 | 49 |
abstencao_faixa_etaria <- dados |>
group_by(DS_FAIXA_ETARIA) |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
taxa_abstencao = total_abstencao / total_aptos * 100,
.groups = "drop"
) |>
filter(
DS_FAIXA_ETARIA != "Inválido"
) |>
arrange(desc(taxa_abstencao))
abstencao_faixa_etaria |>
knitr::kable(
caption = "Abstenção eleitoral por faixa etária",
col.names = c(
"Faixa etária",
"Eleitores aptos",
"Abstenções",
"Taxa de abstenção (%)"
),
align = "lrrr",
digits = 2
)
| Faixa etária | Eleitores aptos | Abstenções | Taxa de abstenção (%) |
|---|---|---|---|
| 100 anos ou mais | 8722 | 8624 | 98.88 |
| 95 a 99 anos | 11280 | 10643 | 94.35 |
| 90 a 94 anos | 25441 | 21743 | 85.46 |
| 85 a 89 anos | 62696 | 46943 | 74.87 |
| 80 a 84 anos | 120417 | 75631 | 62.81 |
| 75 a 79 anos | 207411 | 97705 | 47.11 |
| 70 a 74 anos | 287305 | 85515 | 29.76 |
| 21 a 24 anos | 525979 | 106518 | 20.25 |
| 25 a 29 anos | 713973 | 143260 | 20.07 |
| 30 a 34 anos | 703286 | 127875 | 18.18 |
| 20 anos | 121215 | 21028 | 17.35 |
| 35 a 39 anos | 706772 | 112825 | 15.96 |
| 19 anos | 109626 | 16866 | 15.39 |
| 40 a 44 anos | 726026 | 100412 | 13.83 |
| 65 a 69 anos | 373732 | 51572 | 13.80 |
| 45 a 49 anos | 690351 | 85808 | 12.43 |
| 60 a 64 anos | 482228 | 54201 | 11.24 |
| 50 a 54 anos | 615681 | 69051 | 11.22 |
| 55 a 59 anos | 540311 | 57597 | 10.66 |
| 18 anos | 97126 | 10165 | 10.47 |
| 17 anos | 59726 | 5472 | 9.16 |
| 16 anos | 36311 | 3034 | 8.36 |
ggplot(
abstencao_faixa_etaria,
aes(
x = reorder(DS_FAIXA_ETARIA, taxa_abstencao),
y = taxa_abstencao
)
) +
geom_col(fill = "#C98791") +
coord_flip() +
labs(
title = "Taxa de abstenção por faixa etária",
x = "Faixa etária",
y = "Taxa de abstenção (%)"
) +
theme_minimal()
Os resultados evidenciam uma relação expressiva entre a faixa etária e a taxa de abstenção. As maiores proporções concentram-se nas faixas de idade mais avançadas, especialmente a partir dos 70 anos. A taxa cresce de maneira acentuada nas categorias seguintes, ultrapassando 75% entre os eleitores de 85 a 89 anos e aproximando-se de 100% na faixa de 100 anos ou mais.
Entre as faixas etárias mais jovens, por outro lado, as taxas são consideravelmente menores. Observa-se uma elevação gradual até a faixa de 21 a 24 anos, seguida de uma redução progressiva ao longo de boa parte das faixas seguintes, até aproximadamente os 60 a 64 anos. A partir desse ponto, a taxa volta a crescer, com uma elevação mais acentuada entre os eleitores a partir dos 70 anos.
Esse comportamento demonstra que a abstenção não se distribui uniformemente entre as diferentes idades. Entretanto, os percentuais extremamente elevados nas faixas etárias mais avançadas devem ser interpretados com cautela, especialmente porque essas categorias podem reunir quantitativos menores de eleitores aptos. Assim, é importante considerar também os totais apresentados na tabela, e não apenas as taxas exibidas no gráfico.
Por fim, as variáveis de gênero e faixa etária foram analisadas conjuntamente, permitindo observar como as taxas de abstenção se comportam entre os diferentes grupos demográficos. Para isso, os quantitativos de eleitores aptos e de abstenções foram agrupados por combinação de gênero e faixa etária, possibilitando calcular uma taxa específica para cada grupo.
Na visualização, as faixas etárias foram organizadas em ordem crescente, de modo a facilitar a identificação de tendências ao longo da idade. Também foram mantidas apenas as categorias de gênero com informações válidas para a comparação.
abstencao_genero_idade <- dados |>
group_by(DS_GENERO, DS_FAIXA_ETARIA) |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
taxa_abstencao = total_abstencao / total_aptos * 100,
.groups = "drop"
) |>
filter(
DS_FAIXA_ETARIA != "Inválido",
DS_GENERO != "NÃO INFORMADO"
) |>
arrange(desc(taxa_abstencao))
ordem_faixas <- c(
"16 anos",
"17 anos",
"18 anos",
"19 anos",
"20 anos",
"21 a 24 anos",
"25 a 29 anos",
"30 a 34 anos",
"35 a 39 anos",
"40 a 44 anos",
"45 a 49 anos",
"50 a 54 anos",
"55 a 59 anos",
"60 a 64 anos",
"65 a 69 anos",
"70 a 74 anos",
"75 a 79 anos",
"80 a 84 anos",
"85 a 89 anos",
"90 a 94 anos",
"95 a 99 anos",
"100 anos ou mais"
)
abstencao_genero_idade <- abstencao_genero_idade |>
mutate(
DS_FAIXA_ETARIA = factor(
DS_FAIXA_ETARIA,
levels = ordem_faixas
)
)
ggplot(
abstencao_genero_idade,
aes(
x = DS_FAIXA_ETARIA,
y = taxa_abstencao,
color = DS_GENERO,
group = DS_GENERO
)
) +
geom_line(linewidth = 1) +
geom_point(size = 2.5) +
scale_color_manual(
values = c(
"FEMININO" = "#C98791",
"MASCULINO" = "#E9D38D"
)
) +
labs(
title = "Taxa de abstenção por gênero e faixa etária",
x = "Faixa etária",
y = "Taxa de abstenção (%)",
color = "Gênero"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
O gráfico evidencia que a diferença entre os gêneros varia conforme a faixa etária. Entre os eleitores de 16 a 69 anos, as taxas de abstenção masculinas são, em geral, superiores às femininas. Essa diferença é mais perceptível nas faixas de 19 a 49 anos, nas quais a linha correspondente ao gênero masculino permanece acima da feminina.
A partir da faixa de 70 a 74 anos, entretanto, observa-se uma inversão desse comportamento: as taxas femininas passam a superar as masculinas, e a diferença se amplia nas faixas etárias seguintes. Na categoria de 100 anos ou mais, as taxas dos dois gêneros voltam a apresentar valores bastante próximos, ambos próximos de 100%.
Portanto, a análise conjunta revela que a diferença observada na comparação geral por gênero não se mantém uniforme ao longo das idades. Enquanto a abstenção masculina tende a ser superior entre os eleitores mais jovens e de meia-idade, o comportamento se inverte nas faixas mais avançadas. Esse resultado reforça a importância de considerar simultaneamente diferentes características demográficas para compreender a distribuição da abstenção eleitoral.
Inicialmente, foram identificadas as categorias presentes na variável
DS_GRAU_INSTRUCAO, contabilizando-se os registros, os
eleitores aptos e as abstenções correspondentes a cada nível de
escolaridade. Também foi identificada a categoria “NÃO INFORMADO”, cujos
registros foram desconsiderados no cálculo das taxas, por não
apresentarem informações suficientes para a comparação pretendida.
dados |>
group_by(DS_GRAU_INSTRUCAO) |>
summarise(
total_registros = n(),
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(total_abstencao)) |>
knitr::kable(
caption = "Distribuição dos registros e quantitativos eleitorais por escolaridade",
col.names = c(
"Grau de escolaridade",
"Registros",
"Eleitores aptos",
"Abstenções"
),
align = "l"
)
| Grau de escolaridade | Registros | Eleitores aptos | Abstenções |
|---|---|---|---|
| ENSINO FUNDAMENTAL INCOMPLETO | 83744 | 1622083 | 306301 |
| ENSINO MÉDIO COMPLETO | 88218 | 1978608 | 261467 |
| ENSINO MÉDIO INCOMPLETO | 63360 | 1247876 | 208755 |
| ANALFABETO | 48231 | 432693 | 188898 |
| LÊ E ESCREVE | 52953 | 664126 | 165160 |
| SUPERIOR COMPLETO | 50992 | 603235 | 72557 |
| ENSINO FUNDAMENTAL COMPLETO | 44090 | 332362 | 60515 |
| SUPERIOR INCOMPLETO | 35423 | 344427 | 48659 |
| NÃO INFORMADO | 233 | 334 | 225 |
abstencao_escolaridade <- dados |>
group_by(DS_GRAU_INSTRUCAO) |>
summarise(
total_aptos = sum(QT_APTOS, na.rm = TRUE),
total_abstencao = sum(QT_ABSTENCAO, na.rm = TRUE),
taxa_abstencao = total_abstencao / total_aptos * 100,
.groups = "drop"
) |>
filter(
DS_GRAU_INSTRUCAO != "NÃO INFORMADO"
) |>
arrange(desc(taxa_abstencao))
ggplot(
abstencao_escolaridade,
aes(
x = reorder(DS_GRAU_INSTRUCAO, taxa_abstencao),
y = taxa_abstencao
)
) +
geom_col(fill = "#C98791") +
coord_flip() +
labs(
title = "Taxa de abstenção por grau de escolaridade",
x = "Grau de escolaridade",
y = "Taxa de abstenção (%)"
) +
theme_minimal()
Os resultados revelam diferenças expressivas nas taxas de abstenção entre os níveis de escolaridade. O maior percentual foi observado entre os eleitores analfabetos, cuja taxa se aproxima de 44%, seguido daqueles que sabem ler e escrever, com aproximadamente 25%. Em contrapartida, os menores percentuais foram registrados entre os eleitores com ensino superior completo (cerca de 12%) e ensino médio completo (aproximadamente 13%).
É importante destacar que a maior taxa de abstenção não corresponde necessariamente ao maior quantitativo absoluto de abstenções. Embora os eleitores com ensino fundamental incompleto apresentem um número maior de abstenções do que os analfabetos (306.301 contra 188.898), a taxa entre as pessoas que não sabem ler e escrever é notavelmente maior, pois seu eleitorado apto é menor. Isso evidencia a importância de considerar a proporção de abstenções em relação ao total de eleitores aptos de cada categoria, e não apenas os números absolutos.
De modo geral, os resultados indicam uma associação entre escolaridade e abstenção eleitoral, com taxas mais elevadas entre os grupos de menor escolaridade. Entretanto, essa observação não permite estabelecer uma relação de causalidade, uma vez que outros fatores demográficos e sociais também podem influenciar o comparecimento às urnas.