"Primeiro eu queria cumprimentar os internautas: oi internautas!"
- Roussef, DILMA. 2010
Tudo bem, seres humanos? Este é meu primeiro post aqui no blog e, comovido pelos protestos que tomaram as ruas do país e pelo recente afastamento-e-retorno do presidente do Senado, escolhi falar sobre o seguinte tema: cota parlamentar.
Antes de analisar qualquer coisa, é bom entender um pouco sobre o tema, não é mesmo?
No site da Câmara dos Deputados[1] lemos o seguinte:
"O Ato da Mesa nº 43 de 2009, que detalha as regras para o uso da CEAP, determina que só podem ser indenizadas despesas com passagens aéreas; telefonia; serviços postais; manutenção de escritórios de apoio à atividade parlamentar; assinatura de publicações; fornecimento de alimentação ao parlamentar; hospedagem; outras despesas com locomoção, contemplando locação ou fretamento de aeronaves, veículos automotores e embarcações, serviços de táxi, pedágio e estacionamento e passagens terrestres, marítimas ou fluviais; combustíveis e lubrificantes; serviços de segurança; contratação de consultorias e trabalhos técnicos; divulgação da atividade parlamentar, exceto nos 120 dias anteriores às eleições; participação do parlamentar em cursos, palestras, seminários, simpósios, congressos ou eventos congêneres; e a complementação do auxílio-moradia."
Ok, digamos que você queira conferir se seu deputado só utilizou sua cota nestas categorias, ou que você queira fazer alguma análise mais geral. Como fazer isso com R?
Felizmente 80% do trabalho já está feito, devido ao genial @dfalbel. Neste repositório no GitHub[2] já existe código R para transformar o XML "feio" do site da Câmara em arquivos CSV. Aliás, no repositório encontramos 3 coisas importantíssimas:
1. Descrição dos dados
2. Exemplo (dados 2016)
3. Código para reproduzir os resultados
Com o código encontrado no repositório, criei dois dataframes - dados_2015 e dados_2016. Os seus CSVs respectivos estão aqui[3]. Vamos olhar?
library(tidyverse)
library(lubridate)
options(scipen=999) ## Nada de notação científica
dados_2015 <- read_rds("data/processed/cota-parlamentar-2015.rds")
dados_2016 <- read_rds("data/processed/cota-parlamentar-2016.rds")
## Juntando e selecionando apenas as colunas mais importantes
dados <- rbind(
dados_2015 %>%
select(
datEmissao,
nuCarteiraParlamentar,
nuDeputadoId,
sgPartido,
sgUF,
txtCNPJCPF,
txtDescricao,
txtFornecedor,
txNomeParlamentar,
vlrLiquido
),
dados_2016 %>%
select(
datEmissao,
nuCarteiraParlamentar,
nuDeputadoId,
sgPartido,
sgUF,
txtCNPJCPF,
txtDescricao,
txtFornecedor,
txNomeParlamentar,
vlrLiquido
)
)
## Ajustando tipos das colunas
dados <- dados %>%
mutate(
vlrLiquido = as.numeric(vlrLiquido),
datEmissao = as_date(datEmissao)
)
head(dados) # Vamos ver!
#
# datEmissao nuCarteiraParlamentar nuDeputadoId sgPartido sgUF txtCNPJCPF
# 1 2015-11-14 1 3074 DEM RR 05939467000115
# 2 2015-12-10 1 3074 DEM RR 05939467000115
# txtDescricao
# 1 MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR
# 2 MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR
# txtFornecedor txNomeParlamentar vlrLiquido
# 1 COMPANHIA DE AGUAS E ESGOTOS DE RORAIMA ABEL MESQUITA JR. 165.65
# 2 COMPANHIA DE AGUAS E ESGOTOS DE RORAIMA ABEL MESQUITA JR. 59.48
Bacana! Agora vamos desenhar os top 10 fornecedores:
## Top Fornecedores
top_fornecedores <- dados %>%
group_by(txtCNPJCPF, txtFornecedor) %>%
summarise(
totalRecebido = sum(vlrLiquido)
) %>%
ungroup() %>%
arrange(desc(totalRecebido)) %>%
filter(!(
stringr::str_detect(txtFornecedor, "Cia Aérea"))) %>%
head(10) %>%
mutate(order = as.factor(row_number()))
top_fornecedores.plot <-
ggplot(top_fornecedores) +
aes(x = order,
y = totalRecebido/1000000) +
geom_bar(stat = "identity") +
scale_x_discrete(labels = top_fornecedores$txtFornecedor, breaks = order) +
labs(title = "Top Fornecedores 2015/16",
x = "Fornecedor",
y= "Valor recebido (R$1m)")+
theme(
axis.text.x=element_text(size = 8)
) +
coord_flip()
O código acima gerou o seguinte gráfico:
Repare no uso da função filter: tiramos os gastos com cias aéreas. Você consegue explicar o motivo?
Podemos alterar só um pouco o código e fazer o mesmo para ter o top 10 parlamentares e as top 10 atividades:
## Top 10 parlamentares
top_parlamentares <- dados %>%
group_by(nuDeputadoId, txNomeParlamentar, nuCarteiraParlamentar, sgPartido) %>%
summarise(
totalUtilizado = sum(vlrLiquido)
) %>%
ungroup() %>%
arrange(desc(totalUtilizado)) %>%
head(10) %>%
mutate(order = as.factor(row_number()))
top_parlamentares.plot <-
ggplot(top_parlamentares) +
aes(x = order,
y = totalUtilizado/(10^5),
fill = sgPartido) +
geom_bar(stat = "identity") +
scale_x_discrete(labels = top_parlamentares$txNomeParlamentar, breaks = order) +
labs(title = "Top Parlamentares 2015-16",
x = "Parlamentar",
y= "Valor utilizado (R$100k)") +
guides(fill = guide_legend(title = "Partido"))+
theme(
axis.text.x=element_text(size = 6)
) +
coord_flip()
## Top Atividades
top_atividades <- dados %>%
group_by(txtDescricao) %>%
summarise(
totalUtilizado = sum(vlrLiquido)
) %>%
ungroup() %>%
arrange(desc(totalUtilizado)) %>%
head(10) %>%
mutate(order = as.factor(row_number()))
top_atividades.plot <-
ggplot(top_atividades) +
aes(x = order,
y = totalUtilizado/1000000) +
geom_bar(stat = "identity") +
scale_x_discrete(labels = top_atividades$txtDescricao, breaks = order) +
labs(title = "Top Atividades 2015/16",
x = "Atividade",
y= "Valor utilizado (R$1m)") +
theme(
axis.text.y=element_text(size = 6)
) +
coord_flip()
Que acha de desenharmos a série? Também é fácil:
## Gastos ao longo do tempo
serie_gastos <- dados %>%
filter(
!is.na(datEmissao)
) %>%
mutate(
Ano = year(datEmissao),
Mes = month(datEmissao),
Data = as_date(paste(Ano,Mes,"01",sep = "-"))
) %>%
group_by(Data) %>%
summarise(
totalMensal = sum(vlrLiquido)
) %>%
mutate(
totalAcumulado = cumsum(totalMensal)
)
serie_gastos.plot <-
ggplot(serie_gastos) +
aes(x = Data,
y = totalMensal/1000000) +
geom_jitter() +
geom_smooth(span = 0.3, method = "loess") +
labs(title = "Utilização mensal - Cota Parlamentar",
x = "Ano-Mês",
y= "Valor utilizado (R$1m)")
Essa série eu deixo pro mestre Wilher interpretar! 🙂
Na série, não vimos todos os valores porque muitos não tem data (NA no nosso dataset) e filtramos eles logo no início. Vamos entender quanto ficou de fora, e qual a descrição desses gastos?
## Entendendo o valor que ficou fora da análise
datas_na <- dados %>%
filter(
is.na(datEmissao)
) %>%
group_by(txDescricao) %>%
summarise(
total = sum(vlrLiquido)
)
head(datas_na)
#
# # A tibble: 1 x 2
# txtDescricao total
# <chr> <dbl>
# 1 TELEFONIA 3923815
# 3m de gastos com telefonia sem data! Pode isso, Arnaldo?
Resumindo
Vimos como analisar rapidamente alguns dados públicos em R.
E agora é com vocês: que acharam? Devo aprofundar a análise destes dados públicos?
Até a próxima!
Referências:
[1] http://www2.camara.leg.br/participe/fale-conosco/perguntas-frequentes/cota-para-o-exercicio-da-atividade-parlamentar
[2] https://github.com/dfalbel/cota-parlamentar
[3] Download dos dados



