4 Senadores e Parlamentares
O Senado Federal tem 81 cadeiras — três por estado. Mas quem são, de onde vêm e por quais partidos esses senadores foram eleitos? Este capítulo responde essas perguntas e mostra como navegar o histórico de mandatos, lideranças e formação dos parlamentares.
| Função | Argumentos | O que retorna |
|---|---|---|
obter_dados_senadores_legislatura() |
legislatura_inicio, legislatura_fim |
Senadores de uma legislatura |
get_afastados() |
— | Senadores atualmente afastados |
processar_xml_mandatos() |
codigos |
Histórico de mandatos |
processar_xml_liderancas() |
codigos |
Lideranças partidárias |
processar_xml_profissoes() |
codigos |
Profissões declaradas |
processar_xml_apartes() |
codigos |
Apartes em pronunciamentos |
dados_academicos() |
codigos |
Formação acadêmica |
dados_relatorias_parlamentares() |
codigos_parlamentares, anos |
Relatorias |
coletar_autorias_parlamentares() |
cod_parlamentares |
Autorias de matérias |
4.1 Lista de senadores por legislatura
O argumento numérico refere-se ao número da legislatura. A 57ª legislatura (2023–2027) é a mais recente:
library(senatebR)
library(dplyr)
senadores_raw <- obter_dados_senadores_legislatura(57, 57)
glimpse(senadores_raw)
#> Rows: 245
#> Columns: 13
#> $ IdentificacaoParlamentar.CodigoParlamentar <chr> "5918", "6382", ...
#> $ IdentificacaoParlamentar.NomeParlamentar <chr> "Adilson Gomes", ...
#> $ IdentificacaoParlamentar.NomeCompletoParlamentar <chr> "Adilson Gomes Silva", ...
#> $ IdentificacaoParlamentar.SexoParlamentar <chr> "Masculino", ...
#> $ IdentificacaoParlamentar.FormaTratamento <chr> "Senador ", ...
#> $ IdentificacaoParlamentar.SiglaPartidoParlamentar <chr> NA, NA, "PV", ...
#> $ IdentificacaoParlamentar.CodigoPublicoNaLegAtual <chr> NA, NA, NA, ...
#> $ IdentificacaoParlamentar.UrlFotoParlamentar <chr> NA, NA, NA, ...
#> $ IdentificacaoParlamentar.UrlPaginaParlamentar <chr> NA, NA, NA, ...
#> $ IdentificacaoParlamentar.EmailParlamentar <chr> NA, NA, NA, ...
#> $ IdentificacaoParlamentar.UfParlamentar <chr> NA, NA, NA, ...
#> $ IdentificacaoParlamentar.UrlPaginaParticular <chr> NA, NA, NA, ...
#> $ Mandatos.Mandato <list> [<data.frame[1 x 13]>], ...A função retorna 245 linhas porque inclui titulares e suplentes que exerceram mandato na legislatura. Filtre por !is.na(SiglaPartidoParlamentar) e !is.na(UfParlamentar) para obter apenas os registros com dados completos (~84 linhas). As colunas têm o prefixo IdentificacaoParlamentar. pois os dados vêm de um XML aninhado.
As principais colunas (após remoção do prefixo):
| Coluna | Descrição |
|---|---|
CodigoParlamentar |
Código único na API — use em todas as outras funções |
NomeParlamentar |
Nome parlamentar |
NomeCompletoParlamentar |
Nome civil completo |
SexoParlamentar |
"Masculino" ou "Feminino" |
FormaTratamento |
"Senador " ou "Senadora " |
SiglaPartidoParlamentar |
Sigla do partido atual (NA para suplentes sem exercício) |
UfParlamentar |
Estado de representação (NA para suplentes sem exercício) |
EmailParlamentar |
E-mail institucional |
4.2 Simplificando os nomes das colunas
Para facilitar o uso, remova o prefixo e filtre os registros com dados completos:
senadores <- obter_dados_senadores_legislatura(57, 57) |>
rename_with(~ gsub("IdentificacaoParlamentar\\.", "", .x)) |>
filter(!is.na(SiglaPartidoParlamentar), !is.na(UfParlamentar))
senadores |>
count(SiglaPartidoParlamentar, sort = TRUE)
#> # A tibble: 14 × 2
#> SiglaPartidoParlamentar n
#> <chr> <int>
#> 1 PL 17
#> 2 PSD 14
#> 3 MDB 9
#> 4 PT 9
#> 5 PP 7
#> 6 PSB 7
#> 7 REPUBLICANOS 6
#> 8 UNIÃO 4
#> 9 PODEMOS 3
#> 10 PSDB 3
#> 11 PDT 2
#> 12 AVANTE 1
#> 13 NOVO 1
#> 14 SOLIDARIEDADE 14.3 Análise da composição partidária
senadores |>
count(SiglaPartidoParlamentar, sort = TRUE) |>
rename(Partido = SiglaPartidoParlamentar, Senadores = n)4.4 Mandatos históricos
As funções processar_xml_mandatos(), processar_xml_liderancas(), processar_xml_apartes() e processar_xml_profissoes() exigem que os códigos sejam passados como números (não strings). Use c(5672, 5982, 5386) e não c("5672", "5982", "5386").
codigos <- c(5672, 5982, 5386)
mandatos <- processar_xml_mandatos(codigos)
glimpse(mandatos)
#> Rows: 3
#> Columns: 14
#> $ CodigoSenador <chr> "5672", "5982", "5386"
#> $ NomeSenador <chr> "Alan Rick", "Alessandro Vieira", "Professora Dorinha..."
#> $ CodigoMandato <chr> "596", "559", "615"
#> $ UfParlamentar <chr> "AC", "SE", "TO"
#> $ NumeroLegislatura1 <chr> "57", "56", "57"
#> $ DataInicioLegislatura1 <chr> "2023-02-01", "2019-02-01", "2023-02-01"
#> $ DataFimLegislatura1 <chr> "2027-01-31", "2023-01-31", "2027-01-31"
#> $ DescricaoParticipacao <chr> "Titular", "Titular", "Titular"
#> $ Suplentes <chr> "Gemil Junior; Coronel Casagrande", ...
#> $ Exercicios <chr> "2023-02-01", "2019-02-01", "2023-02-01"
#> $ CausaAfastamento <chr> "", "", ""senadores <- obter_dados_senadores_legislatura(57, 57) |>
rename_with(~ gsub("IdentificacaoParlamentar\\.", "", .x)) |>
filter(!is.na(SiglaPartidoParlamentar), !is.na(UfParlamentar))
senadores |>
filter(grepl("Pacheco", NomeParlamentar)) |>
select(CodigoParlamentar, NomeParlamentar, SiglaPartidoParlamentar)
#> # A tibble: 1 × 3
#> CodigoParlamentar NomeParlamentar SiglaPartidoParlamentar
#> <chr> <chr> <chr>
#> 1 5732 Rodrigo Pacheco PSB4.5 Formação acadêmica
# dados_academicos() pode retornar NAs quando o senador não preencheu os dados
academico <- dados_academicos(codigos)
glimpse(academico)
#> Rows: 3
#> Columns: 3
#> $ NomeCurso <chr> NA, NA, NA
#> $ GrauInstrucao <chr> NA, NA, NA
#> $ Estabelecimento <chr> NA, NA, NAdados_academicos() retorna as colunas NomeCurso, GrauInstrucao e Estabelecimento. Retorna NA quando o senador não preencheu o campo. Tente com senadores de legislaturas anteriores para obter mais dados preenchidos.
4.6 Lideranças, apartes e profissões
# Use valores numéricos (sem aspas)
codigos <- c(5672, 5982, 5386)
liderancas <- processar_xml_liderancas(codigos)
glimpse(liderancas)
#> Rows: 20
#> Columns: 16
#> $ CodigoParlamentar <chr> "5672", "5672", "5982", ...
#> $ NomeParlamentar <chr> "Alan Rick", "Alan Rick", "Alessandro Vieira", ...
#> $ UnidadeLideranca <chr> "Liderança de Partido no Senado Federal", ...
#> $ SiglaPartido <chr> "REPUBLICANOS", "UNIÃO", ...
#> $ NomePartido <chr> "REPUBLICANOS", "União Brasil", ...
#> $ SiglaCasaLideranca <chr> "SF", "SF", ...
#> $ DescricaoTipoLideranca <chr> "Líder do Senado Federal", "Vice-líder...", ...
#> $ DataDesignacao <chr> "2026-03-17", "2023-02-28", ...
#> $ DataFim <chr> NA, "2025-01-31", ...
apartes <- processar_xml_apartes(codigos)
glimpse(apartes)
#> Rows: 16
#> Columns: 21
#> $ CodigoParlamentar <chr> "5672", "5672", ...
#> $ NomeParlamentar <chr> "Alan Rick", ...
#> $ CodigoPronunciamento <chr> "501476", ...
#> $ TipoUsoPalavra <chr> "Discurso", ...
#> $ DataPronunciamento <chr> "2023-10-17", ...
#> $ TextoResumo <chr> "Elogios à atuação do Presidente do Senado...", ...
#> $ UrlTexto <chr> "https://www25.senado.leg.br/...", ...
profissoes <- processar_xml_profissoes(codigos)
#> # A tibble: 1 × 4
#> CodigoParlamentar NomeParlamentar NomeProfissao IndicadorAtividadePrincipal
#> <chr> <chr> <chr> <chr>
#> 1 5386 Professora Dorinha ... Professor(a) Sim4.7 Exercício
library(senatebR)
library(dplyr)
library(ggplot2)
leg56 <- obter_dados_senadores_legislatura(56, 56) |>
rename_with(~ gsub("IdentificacaoParlamentar\\.", "", .x)) |>
filter(!is.na(SiglaPartidoParlamentar), !is.na(UfParlamentar))
leg57 <- obter_dados_senadores_legislatura(57, 57) |>
rename_with(~ gsub("IdentificacaoParlamentar\\.", "", .x)) |>
filter(!is.na(SiglaPartidoParlamentar), !is.na(UfParlamentar))
# Proporção por legislatura
bind_rows(
leg56 |> mutate(legislatura = "56ª (2019–2023)"),
leg57 |> mutate(legislatura = "57ª (2023–2027)")
) |>
group_by(legislatura) |>
summarise(
total = n(),
feminino = sum(SexoParlamentar == "Feminino"),
proporcao = feminino / total
)
#> # A tibble: 2 × 4
#> legislatura total feminino proporcao
#> 56ª (2019–2023) 84 13 0.155
#> 57ª (2023–2027) 84 15 0.179
# Proporção feminina por partido na 57ª
leg57 |>
group_by(SiglaPartidoParlamentar) |>
summarise(
total = n(),
feminino = sum(SexoParlamentar == "Feminino"),
prop_f = feminino / total
) |>
arrange(desc(prop_f))A proporção cresceu levemente (15,5% → 17,9%), mas continua baixa. Alguns partidos têm zero senadoras na 57ª legislatura — o que levanta questões sobre recrutamento partidário que os dados de discursos e comissões (caps. 4 e 7) podem ajudar a investigar.