Perfil feminino na câmara dos deputados federais

Fernando, Larissa e João

25/06/2026

1. Contextualização

##O seguinte projeto teve como objetivo analisar a participação feminina no poder legislativo, mais especificamente na câmara de deputados federais. Após alguns tratamentos na base de dados aberta da câmara, foram filtradas 247 mulheres de mais de 7700 deputados ao longo da história. O trabalho consistiu em: a) selecionar essas mulheres, inserir seus respectivos partidos políticos em cada legislatura e averiguar em quais espectros políticos essas mulheres se encontravam ao longo da história. Ao final da análise, mesmo após os tratamentos, foi perceptível como a participação feminina aumentou no recorte, mas infelizmente o crescimento vem acontecendo de forma lenta e desregular.

2. Bibliotecas

## Esses foram os pacotes usados para o desenvolvimento das análises de dados
library(ggplot2)
library(skimr)
library(dplyr)
library(gt)
library(vroom)
library(janitor)
library(forcats)
library(scales)
library(readr)
library(readxl)
library(writexl)
library(tidyr)

3. Leitura de dados

## Para começar, precisamos colocar os dados no Posit Cloud ou R Studio
espectros <- read_excel("/cloud/project/Espectros atualizados.xlsx")

anos_legislatura = read_excel("/cloud/project/anos_legislatura.xlsx")

dados = read_delim("/cloud/project/Planilha - Larissa, João Rafael.csv", 
                   delim = ";", escape_double = FALSE, trim_ws = TRUE) %>% 
                        select(-uri, 
                               -municipioNascimento, 
                               -cpf, 
                               -urlRedeSocial,
                               -urlWebsite,
                               -dataNascimento,
                               -dataFalecimento,
                               -ufNascimento)

parlamentares <- read_csv("/cloud/project/parlamentares.csv") %>% 
                    select(-nome,
                           -url)

4. Tratamento de dados

## Agora iremos tratar os dados que temos para a nossa necessidade

tratamento = dados %>% 
  left_join(anos_legislatura, 
            by = c("idLegislaturaInicial" = "ID")) %>% 
  left_join(parlamentares,
            by = c("id_deputado"="codigo")) %>% 
  left_join(espectros,
            by = c("partido" = "partido"))


evolucao_percentuais = tratamento %>% 
  group_by(idLegislaturaInicial,inicio, siglaSexo) |>
  summarise(total = n()) |>
  mutate(proporcao = total / sum(total)) |> 
  mutate(proporcao = round(proporcao, 3))|>
  mutate(proporcao=100*proporcao) 


uf_sexo = tratamento %>% 
  filter(idLegislaturaFinal == 57) %>% 
  group_by(UF, siglaSexo) %>% 
  summarise(total = n()) %>% 
  mutate(proporcao = total / sum(total)) |> 
  mutate(proporcao = round(proporcao, 3))|>
  mutate(proporcao=100*proporcao) %>% 
  filter(UF != "NA")

ordem_uf <- tratamento %>% 
  filter(
    idLegislaturaFinal == 57,
    UF != "NA"
  ) %>% 
  group_by(UF) %>% 
  summarise(
    prop_mulheres = mean(siglaSexo == "F"),
    .groups = "drop"
  ) %>% 
  arrange(prop_mulheres) %>% 
  pull(UF)

espectro_sexo = tratamento %>% 
  filter(idLegislaturaFinal == 57) %>% 
  group_by(espectros, siglaSexo) %>% 
  summarise(total = n()) %>% 
  mutate(proporcao = total / sum(total)) |> 
  mutate(proporcao = round(proporcao, 3))|>
  mutate(proporcao=100*proporcao) %>% 
  filter(espectros != "NA")

mulheres = tratamento %>% 
  select(-id_deputado) %>% 
  filter(siglaSexo == "F")

O restante da linhas de código, por ter uma tabela separada não adicionada ao File não roda diretamente

#mulheres_sempartido = mulheres %>% 
 # filter(is.na(espectros))
#View(mulheres_sempartido_preenchido)


#write_xlsx(mulheres_sempartido, "Mulheres sem partido.xlsx")


#mulheres_sempartido_preenchido <- read_excel("Mulheres com partido.xlsx")


#total_mulheres <- mulheres %>% 
  #left_join(mulheres_sempartido_preenchido, 
            #by = c("nome" = "nome",
                   #"idLegislaturaInicial" = "idLegislaturaInicial",
                   #"idLegislaturaFinal" = "idLegislaturaFinal",
                  # "siglaSexo" = "siglaSexo",
                  # "inicio" = "inicio",
                   #"Final" = "Final",
                   #"nomeCivil" = "nomeCivil"))


#rbind
#mulheres2 = mulheres %>% 
  #filter(partido != "NA")
#print(mulheres2)


#deputadas = mulheres2 %>% 
  #select(-nome_partido, -espectros, - Status)
#print(deputadas)


#deputadas_total = rbind(deputadas, mulheres_sempartido_preenchido)


#diferença = deputadas_total %>% 
  #anti_join(mulheres, by = character()) %>% 
  #anti_join(deputadas_total, by = character())
#View(diferença)


#deputadas_total = deputadas_total %>% 
  #relocate(partido, .after = UF) %>% 
  #left_join(espectros, by = 'partido')
#View(deputadas_total)


#deputadas_espectros = left_join(deputadas_total, espectros, 
                                #by = c("partido" = "partido",
                                       #"nome_partido" = "nome_partido",
                                       #"espectros" = "espectros",
                                       #"Status" = "Status"))
#View(deputadas_espectros)


#quantidade_espectros = deputadas_espectros %>% 
  #count(espectros, name = "Deputadas") %>% 
  #complete(
    #espectros = c("Extrema-Esquerda", "Esquerda", "Centro-Esquerda", 
                  #"Centro", "Centro-Direita", "Direita", "Extrema-Direita"),
    #fill = list(Deputadas = 0)
  #) %>%
  #arrange(desc(Deputadas))
#print(quantidade_espectros)


#deputadas_por_partido = deputadas_espectros %>% 
  #count(partido, name = "Deputadas") %>% 
  #arrange(desc(Deputadas))
#View(deputadas_por_partido)

#deputadas em cada legislatura
# Foi adicionada uma planilha com cada deputada em sua respectiva legislatura

#Deputadas_por_Legislatura = read_excel("Deputadas por Legislatura.xlsx")

#Averiguar se existem linhas onde o idInicial e o idFinal são diferentes
#teste_diferenca = Deputadas_por_Legislatura %>% 
  #filter(idLegislaturaInicial != idLegislaturaFinal) %>% 
  #print()

5. Os gráficos criados a partir das planilhas

#Gráfico 1
plot1 <- tratamento %>% 
  filter(idLegislaturaFinal == 57) %>% 
  group_by(UF, siglaSexo) %>% 
  summarise(total = n()) %>% 
  filter(UF != "NA") %>%
  mutate(UF = factor(UF, levels = ordem_uf)) %>% 
  ggplot(
    aes(
      x = UF, 
      y = total, 
      fill = siglaSexo
      )
    ) +
  geom_col(position = "fill") + 
  coord_flip() +
  theme_minimal()+
  scale_y_continuous(labels = label_percent()) +
  labs(
    title = "Percentual de Deputadas por UF",
    subtitle = "Legislatura 57, ano inicial = 2023",
    x = "UF",
    y = "Proporção (%)",
    fill = "Sexo"
  )

ggsave(filename = "Percentual de Deputadas por UF - Leg. 57.png",
       plot = plot1,
       dpi = 300,
       width = 1920,
       height = 1080,
       units = "px")

#Gráfico 2
plot2 = evolucao_percentuais %>% 
  filter (
    inicio >= 1933,
    inicio %in% c(1933, 1945, 1951, 1975, 1987, 2003, 2011, 2019, 2023)
          ) %>%
  mutate(posicao = ifelse(siglaSexo == "M", -8,8)) %>% 
 ggplot(aes(x=inicio, 
           y=proporcao, 
           col= siglaSexo))+
  geom_line(linewidth = 1.5)+
  geom_point(size = 2)+
  geom_label(
    aes(
      label = round(proporcao,1),
      y = proporcao + posicao
      ),
    fill = "white",
    show.legend = FALSE,
    label.size = 0.2,
    size = 3.5
  ) +
  scale_x_continuous(
    breaks = c(1933, 1945, 1951, 1975, 1987, 2003, 2011, 2019, 2023)
  ) +
  scale_y_continuous(limits = c(0, 105)) +
  labs(
    title = "Participação Feminina na Câmara dos Deputados",
    x = "Ano de Início da Legislatura",
    y = "Proporção (%)",
    color = "Sexo"
  ) +
  theme_light() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1)
  )
## Warning: The `label.size` argument of `geom_label()` is deprecated as of ggplot2 3.5.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggsave(filename = "Participação Feminina ao longo dos anos.png",
       plot = plot2,
       dpi = 300,
       width = 1920,
       height = 1080,
       units = "px")

#Gráfico 3 - Deputadas por espectro político
#quantidade_espectros |>
  #ggplot(aes(x = espectros,
            # y = Deputadas)) +
  #geom_col(fill = "purple", color = "purple") +
  #labs(
    #title = "Quantidade de Deputadas por Espectro Político",
    #x = "Espectro Político",
   # y = "Quantidade de Deputadas"
 # ) +
  #theme_minimal()

#Gráfico 4 - Deputadas por espectro político
#quantidade_espectros |>
  #gt() |>
  #tab_header(
    #title = "Quantidade de Deputadas por Espectro Político"
 # ) |>
  #cols_label(
   # espectros = "Espectro Político",
  #  Deputadas = "Quantidade de Deputadas"
 # )

#quantidade_espectros %>% 
  #gt() %>% 
 # tab_header(
  #  title = "Quantidade de Deputadas por Espectro Político"
  #) %>% 
 # cols_label(
  #  espectros = "Espectro Político",
   # Deputadas = "Quantidade de Deputadas"
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_body()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_column_labels()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black", weight = "bold"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "purple"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "#BA68C8"),
    #locations = cells_column_labels()
  #)

#Gráfico 5

#Deputadas_emcada_Legislatura = Deputadas_por_Legislatura  %>% 
 # group_by(idLegislaturaInicial) %>% 
  #summarise(Deputadas = n()) %>% 
  #rename(Legislatura = idLegislaturaInicial) %>% 
  #arrange(Legislatura)
#View(Deputadas_emcada_Legislatura)

#Deputadas_emcada_Legislatura %>% 
 # gt() %>% 
  #tab_header(
   # title = "Quantidade de Deputadas em cada Legislatura"
  #) %>% 
  #cols_label(
   # Legislatura = "Legislatura",
    #Deputadas = "Quantidade de Deputadas"
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_body()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_column_labels()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black", weight = "bold"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "purple"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "#BA68C8"),
    #locations = cells_column_labels()
  #)

#Gráfico 6

#espectros_por_legislatura = Deputadas_por_Legislatura %>% 
 # group_by(espectros) %>% 
  #summarise(Deputadas = n()) %>% 
  #arrange(desc(Deputadas))

#espectros_por_legislatura %>% 
 # gt() %>% 
  #tab_header(
   # title = "Espectros em todas as Legislaturas"
  #) %>% 
  #cols_label(
   # espectros = "Espectros",
    #Deputadas = "Quantidade de Deputadas"
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_body()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black"),
    #locations = cells_column_labels()
  #) %>% 
  #tab_style(
   # style = cell_text(color = "black", weight = "bold"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "purple"),
    #locations = cells_title()
  #) %>% 
  #tab_style(
   # style = cell_fill(color = "#BA68C8"),
    #locations = cells_column_labels()
  #)

#Gráfico 7

# Função de Legislaturas

#tabela_espectros = function(legislatura) {
 # Deputadas_por_Legislatura %>% 
  #  filter(idLegislaturaInicial == legislatura) %>% 
   # group_by(espectros) %>% 
    #summarise(nome = n()) %>% 
    #arrange(desc(nome)) %>% 
    #rename(
     # "Quantidade de Deputadas" = nome,
      #"Espectros" = espectros
    #) %>% 
    #gt() %>% 
    #tab_header(
     # title = paste("Espectros - Legislatura", legislatura)
    #) %>% 
    #tab_style(
     # style = cell_text(color = "black"),
      #locations = cells_body()
    #) %>% 
    #tab_style(
     # style = cell_text(color = "black"),
      #locations = cells_column_labels()
    #) %>% 
    #tab_style(
     # style = cell_text(color = "black", weight = "bold"),
      #locations = cells_title()
    #) %>% 
    #tab_style(
     # style = cell_fill(color = "purple"),
      #locations = cells_title()
    #) %>% 
    #tab_style(
     # style = cell_fill(color = "#BA68C8"),
      #locations = cells_column_labels()
    #)
#}
#tabela_espectros(57)
#tabela_espectros(56)
#tabela_espectros(55)
#tabela_espectros(54)
#tabela_espectros(53)
#tabela_espectros(52)
#tabela_espectros(51)

#deputadas por partidos ao longo da história

#deputadas_por_partido_total = Deputadas_por_Legislatura %>% 
 # count(partido, name = "Deputadas") %>% 
  #arrange(desc(Deputadas))
#View(deputadas_por_partido_total)

# Exportar tabelas
#write_xlsx(quantidade_espectros, "quantidade_espectros.xlsx")
#write_xlsx(Deputadas_emcada_Legislatura, "deputadas_em_cada_legislatura.xlsx")
#write_xlsx(espectros_por_legislatura, "espectros_por_legislatura.xlsx")
#write_xlsx(deputadas_por_partido_total, "Deputadas por partidos na história.xlsx")

# Exportar espectros por legislatura
#write_xlsx(espectros_57, "espectros_57.xlsx")
#write_xlsx(espectros_56, "espectros_56.xlsx")
#write_xlsx(espectros_55, "espectros_55.xlsx")
#write_xlsx(espectros_54, "espectros_54.xlsx")
#write_xlsx(espectros_53, "espectros_53.xlsx")
#write_xlsx(espectros_52, "espectros_52.xlsx")
#write_xlsx(espectros_51, "espectros_51.xlsx")