# Inclusão de pacotes
library(tidyverse)
library(fs)
# Checa tamanho dos arquivos
dir_info("data") %>%
select(path,size,modification_time)
#> # A tibble: 4 x 3
#> path size modification_time
#> <fs::path> <fs::bytes> <dttm>
#> 1 data/despesa.zip 125.32M 2019-03-29 07:40:36
#> 2 data/despesa2018.zip 17.98M 2019-03-29 16:40:21
#> 3 data/despesa2018_squished.zip 9.08M 2019-04-06 12:14:07
#> 4 data/df_all.rds 24.37M 2019-03-30 12:05:39
#Colocar num data frame ("tibble"). Nota: arquivo agora 'e UTF-8
fname_2018_squished_zip <- "data/despesa2018_squished.zip"
df_orcamento <- read_delim(fname_2018_squished_zip,delim=";",
quote="'") # evita erro com "
# Quantas linhas, colunas, ou dimensões?
# nrow(df_orcamento)
# ncol(df_orcamento)
dim(df_orcamento)
#> [1] 99362 32
# Seleciona e renomeia colunas a serem utilizadas
df_orcamento_clean <- df_orcamento %>%
transmute(func_cod=`Função`,
func=`Nome Função`,
empenhado=`Valor Empenhado`,
liquidado=`Valor Liquidado`,
pago=`Valor Pago`)
knitr::kable(df_orcamento_clean%>%head(4))%>%
kableExtra::kable_styling("striped")
#> Warning in kableExtra::kable_styling(., "striped"): Please specify format
#> in kable. kableExtra can customize either HTML or LaTeX outputs. See
#> https://haozhu233.github.io/kableExtra/ for details.
func_cod | func | empenhado | liquidado | pago |
---|---|---|---|---|
06 | Segurança Pública | 0 | 0 | 0 |
22 | Indústria | 0 | 0 | 0 |
10 | Saúde | 0 | 0 | 0 |
04 | Administração | 0 | 0 | 0 |
# Quantas linhas não preenchidas (com 'NA')?
df_orcamento_clean$empenhado %>% is.na %>% sum
#> [1] 0
summary(df_orcamento_clean%>%select(empenhado:pago)) %>%
knitr::kable() %>%
kableExtra::kable_styling("striped",full_width = T)
empenhado | liquidado | pago | |
---|---|---|---|
Min. :0.000e+00 | Min. :0.000e+00 | Min. :0.000e+00 | |
1st Qu.:0.000e+00 | 1st Qu.:0.000e+00 | 1st Qu.:0.000e+00 | |
Median :2.588e+03 | Median :1.254e+03 | Median :2.750e+02 | |
Mean :3.747e+07 | Mean :3.768e+07 | Mean :3.315e+07 | |
3rd Qu.:9.188e+04 | 3rd Qu.:7.438e+04 | 3rd Qu.:4.694e+04 | |
Max. :1.930e+11 | Max. :1.930e+11 | Max. :1.930e+11 |
df_orcamento_clean %>%
transmute_at(vars(empenhado,liquidado,pago),~.+1) %>% # for log
mutate(row=row_number()) %>%
gather("key","value",-row) %>%
mutate(key=factor(key,levels=c("empenhado","liquidado","pago"))) %>%
ggplot(aes(key,value,fill=key)) +
geom_violin(draw_quantiles = c(.5)) +
scale_y_log10(breaks=10^(0:11),labels=c(1,10,100,
"1k","10k" ,"100k" ,
"1M","10M","100M",
"1B","10B","100B"))+
labs(title="Histograma de Valores",
subtitle="Ano 2018",
x="Valor (R$)") +
theme(legend.position = "none")
# Nomes das funções são únicas por código?
df_orcamento_clean %>%
count(func_cod,func) %>%
count(func_cod,name="nn") %>%
count(nn)
#> # A tibble: 1 x 2
#> nn n
#> <int> <int>
#> 1 1 25
df_orcamento_clean %>%
count(func_cod,func,sort=T) %>%
head(5) %>%
knitr::kable() %>%
kableExtra::kable_styling("striped")
func_cod | func | n |
---|---|---|
12 | Educação | 30588 |
06 | Segurança Pública | 12812 |
10 | Saúde | 11441 |
26 | Transporte | 5684 |
03 | Essencial à Justiça | 5428 |
df_orcamento_clean %>%
group_by(func) %>% {
ns <- summarize(.,n=n())
ss <- summarize_at(.,vars(empenhado,liquidado,pago),
list(sum=~sum(.),
mean=~mean(.),
median=~median(.),
sd=~sd(.),
mad=~mad(.)))
ns %>% inner_join(ss,by="func")
} %>%
mutate_at(vars(-func),~(./10^3)%>%as.integer) %>%
arrange(-n) %>%
rename_all(~str_replace(.,fixed("_"),"\n")) %>%
head(5) %>%
knitr::kable() %>%
kableExtra::kable_styling("striped") #%>%
func | n | empenhado sum | liquidado sum | pago sum | empenhado mean | liquidado mean | pago mean | empenhado median | liquidado median | pago median | empenhado sd | liquidado sd | pago sd | empenhado mad | liquidado mad | pago mad |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Educação | 30 | 401164009 | 378952112 | 322584024 | 13115 | 12388 | 10546 | 8 | 7 | 2 | 236587 | 229497 | 211258 | 12 | 10 | 4 |
Segurança Pública | 12 | 665571698 | 655641842 | 532828763 | 51949 | 51174 | 41588 | 0 | 0 | 0 | 1050315 | 1050935 | 860183 | 0 | 0 | 0 |
Saúde | 11 | 230771890 | 199187734 | 146430920 | 20170 | 17409 | 12798 | 0 | 0 | 0 | 269881 | 258990 | 186038 | 0 | 0 | 0 |
Essencial à Justiça | 5 | 88609648 | 166434811 | 161649118 | 16324 | 30662 | 29780 | 6 | 5 | 3 | 243451 | 577796 | 571660 | 9 | 8 | 5 |
Transporte | 5 | 91109975 | 58852547 | 56240952 | 16029 | 10354 | 9894 | 1 | 1 | 1 | 549802 | 338344 | 337974 | 2 | 1 | 1 |
#kableExtra::row_spec(0, angle = -45)
df_orcamento_clean %>%
mutate(func=func%>%fct_reorder(-empenhado,sum)) %>%
filter(as.integer(func)<6) %>%
mutate(func=func%>%fct_rev) %>% # for coord_flip
group_by(func) %>%
# milhoes
summarize_at(vars(empenhado,liquidado,pago),
list(~(sum(.)/10^9))) %>%
gather("key","value",-func) %>%
mutate(key=factor(key,levels=c("pago","liquidado","empenhado"))) %>%
ggplot(aes(func,value,group=key,fill=key)) +
geom_col(position="dodge") +
coord_flip() +
labs(title="Valores Totais por Função",
subtitle="Ano 2018, Top 5",
y="Valor (R$ bilhões)") +
theme(legend.position = "top",
legend.title = element_blank(),
axis.title.y=element_blank())
ggsave("pics/valores_por_funcao.png")
#> Saving 7 x 5 in image
df_orcamento_clean %>%
mutate(func=func%>%fct_reorder(empenhado+1,.fun=median,.desc=T)) %>%
filter(as.integer(func)<6) %>%
mutate(func=func%>%fct_rev) %>% # for coord_flip
ggplot(aes(func,empenhado+1)) +
geom_boxplot(aes(fill=func),notch=T) +
scale_y_log10(breaks=10^c(0,3,6,9),labels=c("1","1k","1M","1B"))+
coord_flip() +
labs(title="Distribuição dos Valores por Função",
subtitle="Ano 2018, Top 5 medianas",
y="Valor (R$)") +
theme(legend.position = "none",
axis.title.y=element_blank())