Gênero, Raça e o Custo da Vitória: Uma Análise Estatística do Financiamento de Campanhas Femininas em Pernambuco no ano de 2024

Introdução

Declaração do Problema

Foram necessários 109 anos desde a Proclamação da República para que o Brasil elegesse sua primeira presidenta. No plano municipal, a realidade não é diferente: embora as mulheres constituam mais de 52% do eleitorado nacional e a maior parte da população do estado de Pernambuco, a representação política feminina nos cargos de poder executivo e legislativo permanece historicamente desproporcional. O sufrágio universal garantiu às mulheres o direito de votar, mas votar e ser votada continuam sendo experiências estruturalmente desiguais.

A grande questão que este projeto busca responder é: até que ponto o financiamento de campanha e o perfil sociodemográfico, sobretudo a raça, determinam a eleição de uma candidata no estado de Pernambuco? A distribuição justa dos fundos públicos de campanha não é apenas uma questão legal, mas um pilar essencial para a garantia de uma democracia de fato representativa.

Abordagem do Problema

Para investigar este problema, realizaremos a fusão e o tratamento de duas grandes bases de dados fornecidas pelo Tribunal Superior Eleitoral (TSE) referentes ao pleito de 2024:

  • Dados cadastrais dos candidatos: contendo o perfil sociodemográfico e o resultado final da apuração.

  • Dados de receitas recebidas por candidatura: detalhando a origem de cada centavo que financiou as campanhas (Fundo Especial de Financiamento de Campanha, Fundo Partidário, doações de pessoas físicas e recursos próprios).

  • A metodologia empregará análise estatística descritiva, cruzamento de chaves primárias e engenharia de atributos para identificar disparidades estruturais entre candidatas eleitas e não eleitas.

Técnicas Aplicadas

O projeto apresentará uma abordagem baseada em Engenharia de Atributos (Feature Engineering). E serão criadas métricas customizadas de financiamento, tais como:

  • Dependência de Recursos Públicos: Razão entre fundos públicos recebidos (Eleitoral + Partidário) e a receita total de campanha.

  • Eficiência Financeira: Quantidade de recursos financeiros investidos por voto conquistado (para candidatas eleitas vs. não eleitas).

  • Recorte Interseccional: Cruzamento sistemático de variáveis de Gênero com Raça/Cor (CD_COR_RACA) para verificar se a barreira de financiamento é acentuada para mulheres negras em Pernambuco.

Benefícios para os Clientes de Análise

Os resultados desta análise servirão como um guia estratégico para:

  1. Partidos Políticos: Avaliar a eficiência e justiça na distribuição dos seus fundos afirmativos.

  2. Organizações de Advocacy e ONGs: Subsidiar campanhas de incentivo com base em dados concretos sobre onde as maiores barreiras financeiras residem.

  3. Futuras Candidatas: Compreender o comportamento e as demandas orçamentárias de uma campanha vitoriosa em Pernambuco.

Pacotes requeridos

Para assegurar a reprodutibilidade deste relatório, os seguintes pacotes e dependências do ecossistema R:

Instalação automatizada das dependências necessárias

# Lista de pacotes necessários para a replicação
pacotes_necessarios <- c("data.table", "tidyverse", "janitor", "plotly", "DT", "kableExtra")

# Verifica quais pacotes listados ainda não estão instalados na máquina do leitor
novos_pacotes <- pacotes_necessarios[!(pacotes_necessarios %in% installed.packages()[,"Package"])]

# Instala automaticamente os pacotes ausentes definindo o repositório em nuvem
if(length(novos_pacotes)) {
  install.packages(novos_pacotes, repos = "https://cloud.r-project.org")
}

# Carrega todas as bibliotecas de forma antecipada na sessão atual do R
library(data.table)
library(tidyverse)
library(janitor)
library(plotly)
library(DT)
library(kableExtra)

Pacotes e suas utilizações

  1. data.table: Essencial para uma leitura mais rápida de arquivos massivos em formato CSV (como os do TSE), minimizando gargalos de memória.

  2. tidyverse: O principal kit de ferramentas para ciência de dados em R, que engloba o dplyr para manipulação, tidyr para pivotagem, stringr para manipulação de textos e ggplot2 para visualização de dados.

  3. janitor: Usado para limpar os nomes das colunas importadas do TSE, convertendo-os de forma automática para o padrão snake_case (letras minúsculas e sem acentos).

  4. plotly: Biblioteca responsável por converter gráficos estáticos em componentes interativos que permitem a exploração dinâmica dos dados via cursor.

  5. DT: Fornece uma interface em R para a biblioteca JavaScript DataTables, permitindo a exibição de matrizes de dados por meio de tabelas dinâmicas, ordenáveis e com filtros de busca.

  6. kableExtra: Extensão do pacote knitr para formatação avançada de tabelas estáticas em HTML, permitindo personalizar estilos, adicionar notas de rodapé e controlar o layout das tabelas geradas com kable().

Preparação de Dados

Fontes Originais e Repositórios

Os dados utilizados neste projeto são de natureza pública e institucional, extraídos diretamente do Portal de Dados Abertos do Tribunal Superior Eleitoral (TSE). Para viabilizar a replicação desta análise, os conjuntos de dados originais do pleito municipal de 2024 podem ser acessados nos seguintes hiperlinks oficiais:

Escopo, Propósito e Peculiaridades da Base Bruta

O propósito original da coleta desses dados pela Justiça Eleitoral é garantir a transparência pública, a conformidade jurídica dos partidos e a fiscalização social contra o abuso de poder econômico nas eleições. No entanto, por se tratar de um repositório administrativo que unifica registros de todo o território nacional, a base bruta apresenta características complexas e não normalizadas:

  • Dimensão Massiva: A base de prestação de contas nacional possui quase 2 milhões de linhas de transações financeiras e 104 colunas informacionais.
  • Codificação e Dialeto: Os arquivos originais utilizam codificação de caracteres em Latin-1 (ISO-8859-1) e trazem separadores de campos em ponto e vírgula (;), o que frequentemente gera quebras de codificação se importados com funções padrão de leitura do R.
  • Valores Ausentes e Ruídos: Dados ausentes ou não preenchidos não estão registrados como NA, mas sim mascarados como strings de texto (ex: "#NULO", "-1" ou espaços em branco). Além disso, os valores monetários (VR_RECEITA) vêm no formato de texto brasileiro (ex: "1.500,50" com vírgula decimal), exigindo conversão numérica explícita antes de qualquer soma matemática.

Pipeline de Importação, Filtragem e Limpeza de Dados

O processo lógico de ETL (Extração, Transformação e Limpeza) abaixo foi desenhado para contornar os gargalos da base. O script executa as seguintes operações:

  1. Identifica se as bases locais estão presentes para processamento real; caso contrário, ativa um simulador de contingência realista para fins de demonstração.

  2. Filtra o escopo geográfico para o estado de Pernambuco (sg_uf == "PE") e o gênero para feminino (cd_genero == 4).

  3. Limpa e padroniza as strings de Raça/Cor e converte a situação do turno em uma variável binária clara (Eleita vs. Não Eleita).

  4. Converte os valores financeiros de texto para formato decimal numérico e agrega os totais de receitas por candidata (sq_candidato).

  5. Realiza a mesclagem das bases (Left Join) para consolidar o perfil sociodemográfico com a saúde financeira da campanha.

# Definição dos nomes dos arquivos locais esperados
arquivo_candidatos <- "consulta_cand_2024_PE.csv"
arquivo_receitas   <- "receitas_candidatos_2024_PE.csv"

if (file.exists(arquivo_candidatos) & file.exists(arquivo_receitas)) {
  
  # --- PROCESSAMENTO ---
  # Leitura rápida definindo separador e encoding correto
  raw_cand <- fread(arquivo_candidatos, encoding = "Latin-1", sep = ";") %>% clean_names()
  raw_receitas <- fread(arquivo_receitas, encoding = "Latin-1", sep = ";") %>% clean_names()
  
  # Filtragem e limpeza do perfil das candidatas de Pernambuco
  candidatas_pe <- raw_cand %>% 
    filter(sg_uf == "PE", cd_genero == 4) %>%
    mutate(
      situacao_turno = case_when(
        cd_sit_tot_turno %in% c(1, 2, 3) ~ "Eleita",
        TRUE ~ "Não Eleita"
      ),
      cor_raca = case_when(
        cd_cor_raca == 1 ~ "Sem Declaração",
        cd_cor_raca == 2 ~ "Branca",
        cd_cor_raca == 3 ~ "Preta",
        cd_cor_raca == 4 ~ "Parda",
        cd_cor_raca == 5 ~ "Amarela",
        cd_cor_raca == 6 ~ "Indígena",
        TRUE ~ "Outros"
      )
    )
  
  # LOCALIZADOR INTELIGENTE DE COLUNAS 
  colunas_receitas <- colnames(raw_receitas)
  col_fonte <- "ds_fonte_receita" # Padrão do TSE
  
  if (!col_fonte %in% colunas_receitas) {
    # Fallbacks se o TSE mudar o padrão da coluna
    col_fonte <- grep("fonte_receita|origem_receita", colunas_receitas, value = TRUE)[1]
    if (is.na(col_fonte)) col_fonte <- "ds_origem_receita"
  }
  
  # Cria uma coluna unificada temporária para evitar erros no pipeline dplyr
  raw_receitas$fonte_local <- raw_receitas[[col_fonte]]
  
  # Limpeza financeira e agregação de receitas por candidatura (sq_candidato)
  receitas_agregadas <- raw_receitas %>%
    mutate(
      # Força a conversão do padrão monetário brasileiro (vírgula) para decimal numérico (ponto)
      valor_limpo = as.numeric(gsub(",", ".", vr_receita)),
      # Converte para minúsculas e remove acentos para busca por texto robusto
      fonte_limpa = iconv(tolower(fonte_local), to = "ASCII//TRANSLIT")
    ) %>%
    group_by(sq_candidato) %>%
    summarise(
      receita_total = sum(valor_limpo, na.rm = TRUE),
      # Soma usando buscas flexíveis de termos (evita quebrar por variações de nomenclatura)
      fundo_eleitoral = sum(valor_limpo[grepl("especial|eleitoral", fonte_limpa)], na.rm = TRUE),
      fundo_partidario = sum(valor_limpo[grepl("partid", fonte_limpa)], na.rm = TRUE)
    ) %>%
    mutate(
      # Criação da variável de dependência de fundos públicos
      dep_fundo_publico = (fundo_eleitoral + fundo_partidario) / (receita_total + 0.01)
    )
  
  # Cruzamento estrutural das duas tabelas através da chave unificadora (sq_candidato)
  df_analise <- left_join(candidatas_pe, receitas_agregadas, by = "sq_candidato") %>% 
    mutate(
      receita_total = coalesce(receita_total, 0),
      dep_fundo_publico = coalesce(dep_fundo_publico, 0)
    )
  
}

Dimensão e Período dos Dados

Os dados cobrem o pleito municipal de outubro de 2024, referente às eleições para prefeito, vice-prefeito e vereador em todos os 184 municípios de Pernambuco. A base de candidaturas original conta com 51 variáveis por registro, enquanto a base de receitas possui 104 colunas de transações financeiras. Após a filtragem para candidatas do sexo feminino em PE e o left join entre as duas bases, o dataset analítico final retém 5512 registros e as variáveis de interesse detalhadas abaixo.

Amostra do Dataset Final

Após todas as etapas de limpeza e cruzamento, o dataset analítico apresenta a seguinte estrutura:

library(kableExtra)

df_analise %>%
  select(nm_candidato, cor_raca, situacao_turno, receita_total, dep_fundo_publico) %>%
  head(10) %>%
  knitr::kable(
    col.names = c("Nome da Candidata", "Raça/Cor", "Situação", "Receita Total (R$)", "Dep. Fundo Público"),
    digits = 2
  ) %>%
  kable_styling(full_width = TRUE) %>%
  footnote(
    general = "Tabela 1: Amostra do dataset final após limpeza e cruzamento das bases (10 primeiras linhas)",
    general_title = "",
    footnote_as_chunk = TRUE
  )
Nome da Candidata Raça/Cor Situação Receita Total (R$) Dep. Fundo Público
LICIA DA SILVA MACIEL Sem Declaração Eleita 0.0 0.00
LEONIA MARIA DA SILVA Sem Declaração Não Eleita 930.0 1.00
LUCIENE SOARES DA SILVA COSTA Preta Não Eleita 50.0 0.00
ELIANE MARIA MARQUES DA SILVA LUZ Preta Não Eleita 2590.0 0.39
MARIA DE FÁTIMA MARQUES RUFINO Sem Declaração Não Eleita 600.0 1.00
MARIA JOSÉ DA SILVA Preta Não Eleita 1008.0 1.00
MARIA MEDEIROS DOS ANJOS Preta Não Eleita 0.0 0.00
MARIA DE LOURDES ALVES SILVA Sem Declaração Não Eleita 3300.0 0.61
LUZINEIDE VIANA DA SILVA Sem Declaração Não Eleita 1540.8 0.00
NAYARA DE SIQUEIRA VANDERLEI Sem Declaração Não Eleita 0.0 0.00
Tabela 1: Amostra do dataset final após limpeza e cruzamento das bases (10 primeiras linhas)

Resumo das Variáveis de Interesse

O dataset final consolida cinco variáveis centrais para esta análise. A tabela abaixo apresenta um resumo estatístico das variáveis quantitativas e a distribuição das categóricas:

library(knitr)
library(kableExtra)

resumo_quant <- data.frame(
  Variavel = c("Candidatas (total)", "Eleitas", "Taxa de Eleição (%)",
               "Receita Média", "Receita Mediana", "Receita Máxima",
               "Dep. Média Fundo Público"),
  Valor = c(
    format(nrow(df_analise), big.mark = "."),
    format(sum(df_analise$situacao_turno == "Eleita"), big.mark = "."),
    paste0(round(mean(df_analise$situacao_turno == "Eleita") * 100, 1), "%"),
    paste0("R$ ", format(round(mean(df_analise$receita_total), 2), big.mark = ".", decimal.mark = ",")),
    paste0("R$ ", format(round(median(df_analise$receita_total), 2), big.mark = ".", decimal.mark = ",")),
    paste0("R$ ", format(round(max(df_analise$receita_total), 2), big.mark = ".", decimal.mark = ",")),
    paste0(round(mean(df_analise$dep_fundo_publico) * 100, 1), "%")
  )
)

kable(resumo_quant, col.names = c("Variável", "resultado"), align = c("l", "r")) %>%
  kable_styling(full_width = TRUE)
Variável resultado
Candidatas (total) 5.512
Eleitas 414
Taxa de Eleição (%) 7.5%
Receita Média R$ 11.816,19
Receita Mediana R$ 1.121,1
Receita Máxima R$ 2.105.606
Dep. Média Fundo Público 38.9%

Tabela 2: Resumo das variáveis de interesse do dataset final

A receita mediana de campanha é expressivamente inferior à média, evidenciando uma distribuição assimétrica com cauda longa: a maioria das candidatas arrecada valores modestos, enquanto uma minoria concentra recursos muito acima da média. A variável dep_fundo_publico captura a proporção da receita proveniente de fundos públicos (eleitoral + partidário), servindo como proxy para o grau de autonomia financeira de cada candidatura.

Análise Exploratória dos Dados

Perfil Sociodemográfico das Candidatas

Para compreender a composição do ecossistema político de candidatas em Pernambuco, o gráfico abaixo apresenta a distribuição univariada da autodeclaração de raça e cor. Essa visualização permite identificar quais grupos demográficos possuem maior representatividade factual no início das campanhas, ou seja, quem efetivamente chega às urnas como candidata.

# Geração do gráfico estatístico univariado (ggplot2)
g1 <- ggplot(df_analise, aes(x = fct_infreq(as.factor(cor_raca)))) +
  geom_bar(fill = "#90EE90", color = "black", alpha = 0.85) +
  geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5, fontface = "bold", size = 2) +
  labs(
    title = "Distribuição de Candidatas por Raça/Cor em Pernambuco",
    subtitle = "Eleições Municipais 2024 (Dados Reais TSE)",
    x = "Autodeclaração de Raça/Cor",
    y = "Quantidade Absoluta de Candidatas"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 10, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    panel.grid.major.x = element_blank(),
    axis.text.x = element_text(face = "bold")
  )

# Renderiza o gráfico de barras na tela
g1
Figura 1: Distribuição por Autodeclaração de Raça/Cor das Candidatas (PE - 2024)

Figura 1: Distribuição por Autodeclaração de Raça/Cor das Candidatas (PE - 2024)

Nota metodológica: A análise qualitativa dos registros classificados como “Amarela” (n=54) revelou nomes sem indicativo de origem asiática, sugerindo erros sistemáticos de preenchimento no formulário do TSE. Esse achado, somado ao volume expressivo do grupo “Sem Declaração” e ao número estatisticamente improvável de candidatas pardas em Pernambuco, aponta para fragilidades estruturais no sistema de autodeclaração racial eleitoral brasileiro.

Taxa de Sucesso Eleitoral por Raça/Cor

Antes de avançar para o financiamento, a tabela abaixo antecipa uma das perguntas centrais desta análise: candidatar-se em maior número se traduz em eleger-se em maior número?

library(dplyr)
library(DT)

tabela_sucesso <- df_analise %>%
  group_by(cor_raca) %>%
  summarise(
    `Total de Candidatas` = n(),
    `Total de Eleitas`    = sum(situacao_turno == "Eleita"),
    `Taxa de Eleição (%)`  = round(sum(situacao_turno == "Eleita") / n() * 100, 1)
  ) %>%
  arrange(desc(`Taxa de Eleição (%)`)) %>%
  rename(`Raça/Cor` = cor_raca)

datatable(
  tabela_sucesso,
  caption = "Tabela 3: Taxa de conversão eleitoral por grupo racial — PE 2024",
  options = list(pageLength = 10, dom = 't'),
  rownames = FALSE
)

Conexão legislativa: A Lei 9.504/97 e suas emendas obrigam os partidos a reservarem no mínimo 30% das candidaturas para mulheres. No entanto, a legislação eleitoral brasileira não estabelece nenhuma cota ou meta racial para candidaturas. Esse vazio legal é precisamente o gap que esta análise evidencia: enquanto o gênero possui proteção normativa mínima, a raça permanece invisível na arquitetura jurídica do sistema eleitoral e os dados do TSE tornam as consequências dessa omissão mensuráveis.

Relação entre Financiamento de Campanha e Sucesso Eleitoral

O gráfico bivariado abaixo cruza o volume de receita total arrecadada (eixo Y) com o resultado recebido nas urnas (eixo X) utilizando o motor do plotly. A escala logarítmica no eixo Y é necessária porque a distribuição de receitas eleitorais possui uma cauda muito longa: a maioria das candidatas arrecada valores modestos, enquanto uma minoria concentra recursos expressivos.

# Filtra candidatas com receita
df_grafico2 <- df_analise %>% filter(receita_total > 0)

# Construção do gráfico bivariado
g2 <- ggplot(df_grafico2, aes(
  x = situacao_turno, 
  y = receita_total, 
  fill = situacao_turno
)) +
  geom_jitter(aes(color = situacao_turno), alpha = 0.4, width = 0.2, size = 1.8) +
  geom_boxplot(alpha = 0.7, outlier.shape = NA, width = 0.4, color = "black") +
  scale_y_log10(labels = scales::label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ",")) +
  scale_fill_manual(values = c("Eleita" = "#2ca02c", "Não Eleita" = "#d62728")) +
  scale_color_manual(values = c("Eleita" = "#1f77b4", "Não Eleita" = "#7f7f7f")) +
  labs(
    title = "Volume Financeiro Arrecadado vs. Resultado Eleitoral",
    x = "Resultado nas Urnas",
    y = "Receita de Campanha (Escala Logarítmica)"
  ) +
  theme_light() +
  theme(
    plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
    legend.position = "none"
  )

# Transforma em interativo exibindo os dados dos eixos automaticamente
ggplotly(g2)

Figura 2: Relação entre Volume Financeiro Arrecadado e Sucesso Eleitoral (PE - 2024)

A separação entre as distribuições das candidatas eleitas e não eleitas é visualmente clara e estatisticamente expressiva. A mediana de receita das candidatas eleitas supera em múltiplas ordens de magnitude a das não eleitas, uma diferença que, na escala logarítmica utilizada, representa distâncias imensas em valores absolutos. Isso confirma a hipótese central deste projeto: o financiamento de campanha não é apenas um facilitador, mas uma condição estrutural para a vitória eleitoral feminina em Pernambuco. Candidatas sem acesso a recursos suficientes enfrentam, na prática, uma barreira quase intransponível, independentemente de sua competência, trajetória ou proposta política.


Intersecção entre Raça, Financiamento e Sucesso Eleitoral

Para testar a hipótese de desigualdade na distribuição de recursos, o gráfico abaixo apresenta o orçamento médio direcionado exclusivamente às candidatas que alcançaram o sucesso eleitoral (Eleitas), categorizadas por autodeclaração de raça e cor. Este recorte revela o “custo real da vitória” para cada grupo racial.

Nota: A análise interseccional apresentada a seguir deve ser lida com cautela para dois grupos específicos. O grupo “Amarela” (n=54) apresentou, em inspeção qualitativa, registros com nomes incompatíveis com origem asiática, indicando prováveis erros de preenchimento no formulário do TSE. Já o grupo “Sem Declaração” (n=1.943), embora numericamente expressivo, representa uma ausência de informação, e não uma identidade racial definida. Para os demais grupos (Preta, Branca, Parda e Indígena), os padrões identificados refletem tendências estruturais reais e são interpretados com maior segurança analítica.

library(dplyr)
library(ggplot2)
library(scales)

# Tabela analítica focando no topo do funil: apenas as mulheres ELEITAS
df_raca_eleitas <- df_analise %>%
  filter(situacao_turno == "Eleita") %>%
  group_by(cor_raca) %>%
  summarise(
    Total_Eleitas = n(),
    Media_Receita = mean(receita_total, na.rm = TRUE)
  ) %>%
  filter(!cor_raca %in% c("SEM INFORMAÇÃO", "Não informado"))

# Gráfico de barras mostrando o custo médio real de uma vitória por raça
g3 <- ggplot(df_raca_eleitas, aes(x = reorder(cor_raca, -Media_Receita), y = Media_Receita, fill = cor_raca)) +
  geom_col(color = "black", alpha = 0.8, width = 0.5) +
  geom_text(aes(label = paste0("n = ", Total_Eleitas, "\nR$ ", format(round(Media_Receita, 0), big.mark=".", decimal.mark=","))), 
            vjust = -0.4, fontface = "bold", size = 3.2) +
  scale_y_continuous(labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ","),
                     expand = expansion(mult = c(0, 0.25))) +
  scale_fill_brewer(palette = "Pastel1") +
  labs(
    title = "O Custo da Vitória: Orçamento Médio das Candidatas Eleitas",
    subtitle = "Análise restrita às candidatas vitoriosas em Pernambuco (Eleições 2024)",
    x = "Autodeclaração de Raça/Cor",
    y = "Orçamento Médio Arrecadado (R$)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    legend.position = "none",
    panel.grid.major.x = element_blank(),
    axis.text.x = element_text(face = "bold")
  )

#Exibe o gráfico
g3
Figura 3: Orçamento Médio das Candidatas Eleitas por Raça/Cor (PE - 2024)

Figura 3: Orçamento Médio das Candidatas Eleitas por Raça/Cor (PE - 2024)

Mesmo entre as vencedoras, as poucas que superaram todas as barreiras e chegaram ao mandato, a desigualdade de recursos persiste. O número de eleitas exibido em cada barra (n =) é fundamental para contextualizar as médias: grupos com poucas eleitas têm médias mais voláteis e susceptíveis a distorções por casos extremos. A comparação entre o orçamento médio de candidatas brancas eleitas e pretas eleitas traduz, em cifras concretas, o que a literatura acadêmica chama de dupla penalização: ser mulher já é uma barreira; ser mulher negra significa enfrentar essa barreira com menos recursos financeiros.


A Taxa de Conversão: De Candidata a Eleita por Raça/Cor

De cada 100 candidatas de um determinado grupo racial, quantas efetivamente conquistam um mandato?

library(dplyr)
library(ggplot2)

# Calcula a taxa de eleição por grupo racial
df_conversao <- df_analise %>%
  group_by(cor_raca) %>%
  summarise(
    n_total     = n(),
    n_eleitas   = sum(situacao_turno == "Eleita"),
    taxa_eleicao = round(n_eleitas / n_total * 100, 1)
  ) %>%
  filter(n_total >= 10) %>%  # Remove grupos com poucos casos para evitar distorção estatística
  arrange(desc(taxa_eleicao))

# Gráfico de barras horizontais com destaque por performance
g4 <- ggplot(df_conversao, aes(
    x = reorder(cor_raca, taxa_eleicao), 
    y = taxa_eleicao,
    fill = taxa_eleicao
  )) +
  geom_col(color = "black", alpha = 0.85, width = 0.6) +
  geom_text(
    aes(label = paste0(taxa_eleicao, "%  (", n_eleitas, " de ", n_total, ")")),
    hjust = -0.05, fontface = "bold", size = 3.5
  ) +
  scale_fill_gradient(low = "#f7a072", high = "#2ca02c") +
  scale_y_continuous(
    limits = c(0, max(df_conversao$taxa_eleicao) * 1.4),
    labels = function(x) paste0(x, "%")
  ) +
  coord_flip() +
  labs(
    title = "Taxa de Conversão Eleitoral por Raça/Cor",
    subtitle = "De cada 100 candidatas, quantas foram eleitas? (PE - Eleições 2024)",
    x = "Autodeclaração de Raça/Cor",
    y = "Taxa de Eleição (%)",
    caption = "Grupos com menos de 10 candidatas foram excluídos para evitar distorção estatística.\nFonte: TSE - Dados Abertos 2024."
  ) +
  theme_minimal() +
  theme(
    plot.title    = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    plot.caption  = element_text(size = 8, color = "gray50", hjust = 0),
    legend.position = "none",
    panel.grid.major.y = element_blank(),
    axis.text.y   = element_text(face = "bold")
  )

g4
Figura 4: Taxa de Conversão Eleitoral por Raça/Cor (PE - 2024)

Figura 4: Taxa de Conversão Eleitoral por Raça/Cor (PE - 2024)

Lembrete: As ressalvas metodológicas sobre os grupos “Amarela” e “Sem Declaração” descritas na seção anterior aplicam-se também a esta visualização.


Dependência de Fundos Públicos: Quem Depende do Estado para Competir?

A variável dep_fundo_publico — criada durante a etapa de engenharia de atributos — mede a proporção da receita de campanha proveniente de fontes públicas (Fundo Especial de Financiamento de Campanha + Fundo Partidário). Uma candidata com valor próximo de 1 depende quase exclusivamente do Estado para financiar sua campanha; uma candidata com valor próximo de 0 é predominantemente financiada por recursos próprios ou doações privadas.

O gráfico abaixo, interativo via plotly, compara essa dependência entre candidatas eleitas e não eleitas — respondendo à pergunta: o fundo público é o principal recurso das que vencem ou das que perdem?

library(ggplot2)
library(plotly)
library(dplyr)

df_fundo <- df_analise %>% filter(receita_total > 0)

g5 <- ggplot(df_fundo, aes(x = situacao_turno, y = dep_fundo_publico, fill = situacao_turno)) +
  geom_violin(alpha = 0.6, color = "black") +
  geom_boxplot(width = 0.15, alpha = 0.9, outlier.shape = NA, color = "black") +
  scale_fill_manual(values = c("Eleita" = "#2ca02c", "Não Eleita" = "#d62728")) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    title = "Dependência de Fundos Públicos por Resultado Eleitoral",
    subtitle = "Proporção da receita de campanha proveniente de fontes públicas (PE - 2024)",
    x = "Resultado nas Urnas",
    y = "Proporção de Recursos Públicos na Receita",
    caption = "Fonte: TSE - Dados Abertos 2024. Candidatas com receita zero excluídas."
  ) +
  theme_light() +
  theme(
    plot.title    = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    legend.position = "none"
  )

ggplotly(g5)

Figura 5: Dependência de Fundos Públicos por Resultado Eleitoral (PE - 2024)

Dependência de Fundos Públicos por Raça/Cor

Se o fundo público é a principal fonte de financiamento para candidatas que dependem menos de doadores privados, a questão que se segue é: essa dependência é igual entre todos os grupos raciais? O gráfico abaixo responde diretamente.

library(ggplot2)
library(dplyr)

df_fundo_raca <- df_analise %>%
  filter(receita_total > 0) %>%
  group_by(cor_raca) %>%
  summarise(
    dep_media = round(mean(dep_fundo_publico), 2),
    n = n()
  ) %>%
  filter(n >= 10)

g6 <- ggplot(df_fundo_raca, aes(x = reorder(cor_raca, dep_media), y = dep_media, fill = dep_media)) +
  geom_col(color = "black", alpha = 0.85, width = 0.6) +
  geom_text(aes(label = paste0(round(dep_media * 100, 1), "%  (n=", n, ")")),
            hjust = -0.05, fontface = "bold", size = 3.5) +
  scale_fill_gradient(low = "#f7a072", high = "#2ca02c") +
  scale_y_continuous(
    limits = c(0, max(df_fundo_raca$dep_media) * 1.4),
    labels = scales::percent_format(accuracy = 1)
  ) +
  coord_flip() +
  labs(
    title = "Dependência Média de Fundos Públicos por Raça/Cor",
    subtitle = "Proporção média da receita proveniente de fontes públicas (PE - 2024)",
    x = "Autodeclaração de Raça/Cor",
    y = "Dependência Média de Fundo Público",
    caption = "Candidatas com receita zero excluídas. Grupos com menos de 10 candidatas excluídos.\nFonte: TSE - Dados Abertos 2024."
  ) +
  theme_minimal() +
  theme(
    plot.title    = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30"),
    plot.caption  = element_text(size = 8, color = "gray50", hjust = 0),
    legend.position = "none",
    panel.grid.major.y = element_blank(),
    axis.text.y = element_text(face = "bold")
  )

g6
Figura 6: Dependência de Fundos Públicos por Raça/Cor (PE - 2024)

Figura 6: Dependência de Fundos Públicos por Raça/Cor (PE - 2024)

candidatas brancas são as que proporcionalmente mais dependem do fundo público (62%), enquanto candidatas pretas dependem menos (55%). Isso sugere que mulheres pretas precisam buscar mais recursos fora do Estado, em doações privadas ou recursos próprios, para complementar suas campanhas, o que representa uma barreira adicional para quem historicamente tem menos acesso a redes de financiamento privado.

Conclusões

Este projeto cruzou as bases públicas de candidaturas e receitas eleitorais do TSE (2024) para investigar se financiamento e perfil racial determinam a eleição de mulheres em Pernambuco. Os dados confirmam que sim: mulheres pretas lideram em candidaturas (2.805) e, proporcionalmente, vencem mais que brancas, taxa de conversão de 6,4% contra 3,5%. No entanto, para chegar à vitória, precisam investir mais: sua mediana de receita eleitoral (R$ 9.260) supera a de candidatas brancas eleitas (R$ 5.944), revelando que o sistema exige mais recursos de quem já parte em desvantagem. O dado mais revelador, porém, é que o maior grupo de eleitas (204) não tem raça declarada, um apagão que não é neutro: sem identidade racial registrada, essas mandatárias são invisíveis para qualquer política de monitoramento de equidade. Partidos, ONGs e futuras candidatas encontram nesta análise evidências concretas de que equidade racial no financiamento eleitoral é condição estrutural para uma democracia representativa. Como limitações, destacam-se os erros de autodeclaração racial do TSE, a ausência de dados de votação individual e o escopo restrito a 2024, lacunas que pesquisas longitudinais e cruzamentos com dados de seção eleitoral poderiam suprir.