The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

senatebR: coletando dados do Senado Federal brasileiro

Vinicius Santos

2026-04-08

Introdução

No debate sobre governo aberto, a disponibilidade de dados é vista como basilar para o funcionamento transparente e eficaz de qualquer democracia. No caso do Senado brasileiro, esses dados não apenas fornecem insights sobre o processo legislativo, mas também permitem a análise das políticas públicas e do comportamento dos legisladores.

O pacote senatebR foi criado com o propósito de simplificar a interação com as APIs e a obtenção de dados por meio de web scraping do Senado Federal / Congresso Nacional. O objetivo central é disponibilizar à comunidade acadêmica uma ferramenta que permita o acesso eficiente a dados legislativos.

library(senatebR)

Escopo e propósito

O senatebR abrange cinco dimensões principais de dados:

  1. Projetos e Matérias — projetos de lei, propostas legislativas e matérias em tramitação, com título, autor, status e histórico.
  2. Parlamentares — perfis de senadores, biografias, filiações partidárias e histórico legislativo.
  3. Composição — distribuição partidária, unidades federativas, duração de mandatos e dados demográficos.
  4. Comissões — funções, membros, agendas e atividades das comissões.
  5. Plenário — pautas de votação, transcrições de debates, vetos, medidas provisórias e decisões.

Exemplos de uso

1. Senadores por Legislatura

A função obter_dados_senadores_legislatura() recebe como argumentos a legislatura inicial e final do intervalo desejado.

df_senadores <- obter_dados_senadores_legislatura(47, 56)
dplyr::glimpse(df_senadores)

2. Medidas Provisórias

O pacote oferece duas funções para MPs: em tramitação e encerradas.

# MPs em tramitação
mpv_tramitacao <- coletar_medidas_provisorias_em_tramitacao()
dplyr::glimpse(mpv_tramitacao)

# MPs encerradas (todas as páginas)
mpv_encerradas <- coletar_medidas_provisorias_encerradas(364)
dplyr::glimpse(mpv_encerradas)

3. Vetos

dados_vetos <- info_vetos(pages = 20)
dplyr::glimpse(dados_vetos)

Estudo de Caso: Pronunciamentos dos Parlamentares

Coleta de dados

Coletando os senadores da 56ª legislatura e, em seguida, seus pronunciamentos entre 2020 e 2024:

df_56 <- obter_dados_senadores_legislatura(56, 56)

codigos <- df_56$IdentificacaoParlamentar.CodigoParlamentar

dados_multi <- extrair_pronunciamentos_multi(
  codigos_parlamentares = codigos,
  anos = c(2020:2024)
)

Transformação dos dados

Separando partido e UF em colunas distintas:

dados_multi <- dados_multi |>
  tidyr::separate(Partido_UF, into = c("Partido", "UF"), sep = "/")

Análise temporal

library(ggplot2)

pronunciamentos_por_ano <- dplyr::count(dados_multi, Ano)

ggplot(pronunciamentos_por_ano, aes(x = factor(Ano), y = n, fill = factor(Ano))) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  geom_text(aes(label = n), vjust = -0.5, size = 3) +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal() +
  labs(
    title = "Distribuição de Pronunciamentos por Ano",
    x = "Ano",
    y = "Número de Pronunciamentos"
  )

Distribuição por tipo de pronunciamento

tipos <- dplyr::count(dados_multi, Tipo_Pronunciamento) |>
  dplyr::arrange(n)

ggplot(tipos, aes(x = reorder(Tipo_Pronunciamento, n), y = n)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  coord_flip() +
  theme_minimal() +
  labs(
    title = "Frequência de Tipos de Pronunciamento",
    x = "Tipo",
    y = "Número de Pronunciamentos"
  )

Referências

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.