Análise Gastos Parlamentares

Visualização dos gastos parlamentares com R

Obtendo dados

Os dados podem ser obtidos via download diretamente no Portal da Câmara: Despesas pela Cota para Exercício da Atividade Parlamentar

Usaremos os dados em CSV, salvando o arquivo em uma pasta chamada “Gastos Parlamentares”, que também usaremos para salvar o projeto do R.

Importando os dados para o R

Para importar os dados, usaremos a função import() do pacote rio, e chamaremos de dados2022:

library(rio)

dados2022 <- import("Ano-2022.csv", encoding = "UTF-8")
  • Note que usaremos o argumendo encoding = "UTF-8", afim de evitar problemas com acentuação e outros caracteres usados na língua portuguesa.

O banco deverá ter tais características (visualizadas através da função glimpse() do pacote dplyr):

library(dplyr)

glimpse(dados2022)
## Rows: 50,668
## Columns: 31
## $ txNomeParlamentar         <chr> "LIDERANÇA DO CIDADANIA", "LIDERANÇA DO DEMO~
## $ cpf                       <int64> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA~
## $ ideCadastro               <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ nuCarteiraParlamentar     <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ nuLegislatura             <int> 2019, 2019, 2019, 2019, 2019, 2019, 2019, 20~
## $ sgUF                      <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "N~
## $ sgPartido                 <chr> "", "", "", "", "", "", "", "", "", "", "", ~
## $ codLegislatura            <int> 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, ~
## $ numSubCota                <int> 5, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 1~
## $ txtDescricao              <chr> "DIVULGAÇÃO DA ATIVIDADE PARLAMENTAR.", "ASS~
## $ numEspecificacaoSubCota   <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ txtDescricaoEspecificacao <chr> "", "", "", "", "", "", "", "", "", "", "", ~
## $ txtFornecedor             <chr> "Zoom Video Communications Inc.", "AGENCIA E~
## $ txtCNPJCPF                <chr> "000.000.000/0001-0", "626.529.610/0013-8", ~
## $ txtNumero                 <chr> "133129852", "00767834", "00769761", "3381",~
## $ indTipoDocumento          <int> 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 0,~
## $ datEmissao                <dttm> 2022-02-14, 2022-01-04, 2022-02-02, 2022-01~
## $ vlrDocumento              <dbl> 1561.96, 600.00, 600.00, 1527.28, 2500.00, 2~
## $ vlrGlosa                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ vlrLiquido                <dbl> 1561.96, 600.00, 600.00, 1527.28, 2500.00, 2~
## $ numMes                    <int> 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 1,~
## $ numAno                    <int> 2022, 2022, 2022, 2022, 2022, 2022, 2022, 20~
## $ numParcela                <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ txtPassageiro             <chr> "", "", "", "", "", "", "", "", "", "", "", ~
## $ txtTrecho                 <chr> "", "", "", "", "", "", "", "", "", "", "", ~
## $ numLote                   <int> 1833951, 1822148, 1825721, 1824104, 1826660,~
## $ numRessarcimento          <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ vlrRestituicao            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ nuDeputadoId              <int> 3453, 2713, 2713, 2713, 2713, 2713, 2713, 27~
## $ ideDocumento              <int> 7342370, 7317427, 7324813, 7321395, 7326637,~
## $ urlDocumento              <chr> "https://www.camara.leg.br/cota-parlamentar/~

Visualizando as primeiras informações

Usaremos a variável vlrDocumento para visualizar os gastos de forma geral:

summary(dados2022$vlrDocumento)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -3690.1   100.0   264.9  1020.2   686.3 75795.0
sum(dados2022$vlrDocumento)
## [1] 51690814

Assim obtemos informações como o valor mínimo, máximo, mediana e média dos gastos. Também usamos a função sum() para obter a soma dos gastos (nesse caso, R$ 51.690.814,00).

  • Essas informações são importantes, mas queremos mais detalhes, como gastos por mês, por parlamentar e por tipo de gasto. Para isso, precisamos tratar as variáveis que iremos usar (principalmente as de datas).

Caso você NÃO queira ver os dados por mês, apenas pelo tipo, você pode pular diretamente para sessão Gastos por parlamentar e tipo de gasto!

Tratando variáveis que iremos usar

Verificando a classe da variável datEmissao com a função class(), percemos que ela já é reconhecida como data. Caso não fosse, bastaria a função as.Date(). Como queremos as informações por mês, já iremos formatar a nova variável anoMes para apresentar apenas ano e mês, usando a função format()e o argumento "%Y-%m" (%Ano-%mês):

class(dados2022$datEmissao)
## [1] "POSIXct" "POSIXt"
dados2022$anoMes <- format(as.Date(dados2022$datEmissao), "%Y-%m")

Gastos mensais

Agora agruparemos os valores gastos pelos parlamentares por mês, usando a função group_by(), agrupando os dados de acordo com as variáveis txNomeParlamentar e anoMes. Para tanto, indicaremos que queremos somar os valores da variável vlrDocumento, usando a função sum(), e daremos o nome de totalGastos. Esses valores somados estarão agregados ao conjunto através da função summarise(), utilizando o conector %>%:

gastosMensais2022 <- dados2022 %>% 
  group_by(txNomeParlamentar, anoMes) %>%
  summarise(totalGastos = sum(vlrDocumento))
head(gastosMensais2022,10)
## # A tibble: 10 x 3
## # Groups:   txNomeParlamentar [2]
##    txNomeParlamentar anoMes  totalGastos
##    <chr>             <chr>         <dbl>
##  1 Abílio Santana    2022-01    33227   
##  2 Abílio Santana    2022-02    37567.  
##  3 Abílio Santana    2022-03    32833.  
##  4 Abílio Santana    2022-04     5264.  
##  5 Abílio Santana    <NA>           0.38
##  6 Abou Anni         2022-01    29968.  
##  7 Abou Anni         2022-02     6267.  
##  8 Abou Anni         2022-03    69874.  
##  9 Abou Anni         2022-04    47845.  
## 10 Abou Anni         <NA>           7.41
  • Apesar de termos limitado a visualização usando a função head(), ainda é um banco com muitas linhas. Vamos então facilitar a visualização, mostrando os dados de acordo com cada parlamentar, e vamos aproveitar para conferir qual o tipo do gasto.

Gastos mensais por parlamentar

Para isso vamos apenas aplicar um filtro usando a função filter() do pacote dplyr. Mas para usar o filtro corretamente, criaremos um objeto que carregará o nome do parlamentar (assim basta alterar o nome no objeto que iremos criar, sem precisar alterar dados na função).

Na sequência, iremos criar uma tabela usando a função kable() do pacote kableExtra:

parlamentar = "Bibo Nunes"

gastoMensalParlamentar2022 <- dados2022 %>%
  filter(txNomeParlamentar == parlamentar) %>%
  group_by(txNomeParlamentar, anoMes) %>%
  summarise(totalGastos = sum(vlrDocumento))

library(kableExtra)

kable(gastoMensalParlamentar2022)
txNomeParlamentar anoMes totalGastos
Bibo Nunes 2022-01 29650.52
Bibo Nunes 2022-02 118006.12
Bibo Nunes 2022-03 10841.34
Bibo Nunes 2022-04 512.21
Bibo Nunes NA 10.16

Gastos por parlamentar e tipo de gasto

É interessante saber o gasto mensal dos parlamentares, mas talvez mais importante seja análisar os gastos por tipo de gasto. Assim, alterando a váriável anoMes dentro da função group_by() pela variável txtDescricao, obteremos a seguinte tabela com o novo banco gastoParlamentar2022:

parlamentar <- "Eduardo Bolsonaro"
gastoParlamentar2022 <- dados2022 %>%
  filter(txNomeParlamentar == parlamentar) %>%
  group_by(txNomeParlamentar, txtDescricao) %>%
  summarise(Gastos = sum(vlrDocumento))
kable(gastoParlamentar2022)
txNomeParlamentar txtDescricao Gastos
Eduardo Bolsonaro COMBUSTÍVEIS E LUBRIFICANTES. 6390.31
Eduardo Bolsonaro FORNECIMENTO DE ALIMENTAÇÃO DO PARLAMENTAR 418.00
Eduardo Bolsonaro HOSPEDAGEM ,EXCETO DO PARLAMENTAR NO DISTRITO FEDERAL. 1708.20
Eduardo Bolsonaro LOCAÇÃO OU FRETAMENTO DE VEÍCULOS AUTOMOTORES 28393.69
Eduardo Bolsonaro MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR 29588.69
Eduardo Bolsonaro PASSAGEM AÉREA - RPA 25509.16
Eduardo Bolsonaro SERVIÇO DE TÁXI, PEDÁGIO E ESTACIONAMENTO 400.00
Eduardo Bolsonaro SERVIÇOS POSTAIS 258.24
Eduardo Bolsonaro TELEFONIA 3988.35

Podemos ajustar os nomes das variáveis para uma melhor visualização, usando o argumento col.names =, e também usaremos align = para alinhar as colunas (l= left, r= right, c= center) e a função kable_styling() para algumas configurações adicionais:

kable(gastoParlamentar2022, 
      col.names = c("Parlamentar", "Descrição", "Valor Gasto (R$)"),
      align = c("l", "r", "r")) %>%
  kable_styling(full_width = F, bootstrap_options = c("striped"))
Parlamentar Descrição Valor Gasto (R$)
Eduardo Bolsonaro COMBUSTÍVEIS E LUBRIFICANTES. 6390.31
Eduardo Bolsonaro FORNECIMENTO DE ALIMENTAÇÃO DO PARLAMENTAR 418.00
Eduardo Bolsonaro HOSPEDAGEM ,EXCETO DO PARLAMENTAR NO DISTRITO FEDERAL. 1708.20
Eduardo Bolsonaro LOCAÇÃO OU FRETAMENTO DE VEÍCULOS AUTOMOTORES 28393.69
Eduardo Bolsonaro MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR 29588.69
Eduardo Bolsonaro PASSAGEM AÉREA - RPA 25509.16
Eduardo Bolsonaro SERVIÇO DE TÁXI, PEDÁGIO E ESTACIONAMENTO 400.00
Eduardo Bolsonaro SERVIÇOS POSTAIS 258.24
Eduardo Bolsonaro TELEFONIA 3988.35

Tabela dinâmica (DT::datatable)

Outra forma seria usar a função datatable do pacote DT. Assim podemos criar uma tabela dinâmica, localizando o Parlamentar diretamente pela busca na tabela. Nesse caso, usaremos a mesma função anterior, mas sem filtro:

library(DT)
library(janitor)

gastosParlamentares2022 <- dados2022 %>%
  group_by(txNomeParlamentar, txtDescricao) %>%
  summarise(Gastos = sum(vlrDocumento))

datatable(gastosParlamentares2022, 
          colnames = c("Parlamentar", "Descrição", "Valor Gasto (R$)"))
  • Agora é possível fazer buscas na tabela, tanto por parlamentar, quanto por tipo de gasto, o que permite fazer comparações entre os mesmos!

Visualizando gastos com gráficos

Podemos ainda plotar um gráfico usando a função ggplot() do pacote ggplot2 e facilitar a visualização:

library(ggplot2)

ggplot(gastoParlamentar2022) +
  aes(x = txtDescricao, 
      fill = txtDescricao, 
      weight = Gastos) +
  geom_bar() +
  labs(
    x = " ",
    y = " ",
    title = parlamentar,
    subtitle = " ",
    caption = " ",
    fill = " "
  ) +
  coord_flip() +
  theme_minimal() +
  theme(legend.position = "none") +
  geom_text(aes(y = Gastos, 
                label = Gastos),
            hjust = -1)

Considerações finais

Muito bem! Agora sempre que quiser conferir os gastos de algum parlamentar em especial e visualizar as informações em tabelas e/ou gráficos, basta alterar o nome inserido no objeto parlamentar e rodar os comandos do banco e da tabela/gráfico para atualizar as informações:

parlamentar <- "Carla Zambelli"
gastoParlamentar2022 <- dados2022 %>%
  filter(txNomeParlamentar == parlamentar) %>%
  group_by(txNomeParlamentar, txtDescricao) %>%
  summarise(Gastos = sum(vlrDocumento))
kable(gastoParlamentar2022, 
      col.names = c("Parlamentar", "Descrição", "Valor Gasto (R$)"),
      align = c("l", "r", "r")) %>%
  kable_styling(full_width = F, bootstrap_options = c("striped"))
Parlamentar Descrição Valor Gasto (R$)
Carla Zambelli COMBUSTÍVEIS E LUBRIFICANTES. 5205.95
Carla Zambelli DIVULGAÇÃO DA ATIVIDADE PARLAMENTAR. 19882.18
Carla Zambelli HOSPEDAGEM ,EXCETO DO PARLAMENTAR NO DISTRITO FEDERAL. 3143.72
Carla Zambelli LOCAÇÃO OU FRETAMENTO DE VEÍCULOS AUTOMOTORES 5250.00
Carla Zambelli MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR 30432.50
Carla Zambelli PASSAGEM AÉREA - SIGEPA 18135.42
Carla Zambelli SERVIÇO DE TÁXI, PEDÁGIO E ESTACIONAMENTO 537.50
Carla Zambelli SERVIÇOS POSTAIS 652.02
Carla Zambelli TELEFONIA 4586.44
ggplot(gastoParlamentar2022) +
  aes(x = txtDescricao, 
      fill = txtDescricao, 
      weight = Gastos) +
  geom_bar() +
  scale_fill_viridis_d(option = "viridis", direction = 1) +
  labs(
    x = "",
    y = "Valor Gasto em 2022 (R$)",
    title = parlamentar,
    subtitle = " ",
    caption = "Fonte: Dados Abertos Câmara dos Deputados (Maio, 2022)",
    fill = " "
  ) +
  coord_flip() +
  theme_minimal() +
  theme(legend.position = "none") +
  geom_text(aes(y = Gastos, 
                label = Gastos),
            hjust = -1)