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)