library(dplyr)
library(tidyr)
library(stringr)
library(lubridate)
library(here)
library(ggplot2)
library(readr)
library(DT)
library(hrbrthemes)
options(scipen = 999)
theme_set(theme_minimal())
contratos <- read_csv(here::here("data/transporte_escolar_2016/contratos.csv"))
empenhos <- read_csv(here::here("data/transporte_escolar_2016/empenhos.csv"))
licitacoes <- read_csv(here::here("data/transporte_escolar_2016/licitacoes.csv"))
fornecedores <- read_csv(here::here("data/transporte_escolar_2016/fornecedores.csv"))
unidades_gestoras <- read_csv(here::here("data/transporte_escolar_2016/unidades_gestoras.csv"))
pagamentos <- read_csv(here::here("data/transporte_escolar_2016/pagamentos.csv"))
educacao.municipios <- read_csv(here::here("data/transporte_escolar_2016/dados_educacao_municipios.csv"))
licitacoes <- licitacoes %>%
mutate(
grupo_licitacao = case_when(
str_starts(de_Obs, "LOCACAO|LOCACOES|FRETAMENTO DE VEICULO TIPO VAN PARA O TRANSPORTE DE ALUNOS") ~ "Locação",
str_starts(de_Obs, "CONTRATACAO|CONTRATACOES|A CONTRATACAO|PRESTACAO|EXECUCAO") ~ "Contratação",
str_starts(de_Obs, "AQUISICAO") ~ "Aquisição",
TRUE ~ "Não atribuído"
),
dt_MesAno = str_sub(dt_MesAno, end = 2)
)
total.licitacoes <- licitacoes %>% nrow()
Existem, ao todo, 103 licitações relacionada ao transporte escolar no ano de 2016. Mas, do que se tratam essas licitações?
Analisando a descrição das licitações, é possível dividi-las em 4 grupos: Locação, Contratação, Aquisição e Prestação/Execução.
licitacoes %>%
count(grupo_licitacao) %>%
mutate(porcentagem = n / sum(n)) %>%
select(-n) %>%
datatable(
rownames = FALSE,
class = "cell-border stripe",
colnames = c("Título", "Porcentagem")
) %>%
formatPercentage("porcentagem", 2)
licitacoes %>%
count(tp_Licitacao, de_TipoLicitacao) %>%
ggplot(aes(
x = reorder(de_TipoLicitacao, n),
y = n
)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Quantidade de licitações de cada modalidade",
x = NULL,
y = "Licitações"
) +
coord_flip() +
theme_ipsum()
A modalidade mais comum de licitação é o Pregão Presencial.
licitacoes %>%
ggplot(aes(x = nu_Propostas)) +
geom_bar(
stat = "count",
fill = "dodgerblue4"
) +
labs(
title = "Quantidade de licitações que receberam o mesmo número \nde propostas.",
x = "Propostas",
y = "Licitações"
) +
guides(color = guide_legend("Tipo de licitação")) +
scale_x_continuous(breaks = seq(0, 30, 1)) +
theme_ipsum()
Pelo gráfico é possível perceber que a maioria das licitações selecionadas costumam receber apenas 1 proposta.
licitacoes %>%
group_by(de_TipoLicitacao) %>%
summarise(total_propostas = sum(nu_Propostas)) %>%
ggplot(aes(x = reorder(de_TipoLicitacao, total_propostas), y = total_propostas)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Total de propostas por modalidade de licitação",
x = "",
y = "Propostas"
) +
coord_flip() +
theme_ipsum()
A modalidade Pregão Presencial é a que mais recebe propostas.### Existe relação entre o número de propostas e o valor de uma licitação?
licitacoes %>%
ggplot(aes(
x = nu_Propostas,
y = vl_Licitacao / 1000
)) +
geom_jitter(colour = "dodgerblue4") +
scale_y_log10() +
labs(
title = "Relação entre a quantidade de propostas e o valor de \numa licitação",
x = "Propostas",
y = "Valor (em milhares)"
) +
theme_ipsum()
Observa-se que, para o ano de 2016, o quantidade de propostas aumenta de acordo com o valor da licitação. Esta associação pode ser medida também pela correlação linear entre as duas variáveis.
cor <- cor(licitacoes %>% pull(nu_Propostas), licitacoes %>% pull(vl_Licitacao))
A correlação entre as duas variáveis é de 0.46, o que indica uma associação linear não muito forte porém significativa.
A média e mediana serão utilizadas para representar o valor geral de um conjunto de licitações pois ambas são medidas de tendência central. A principal diferença entre a média e a mediana é que, ao contrário da média, a mediana não é afetada por valores extremos, pois representa o valor que separa a metade menor e maior de um conjunto de dados.
licitacoes %>%
group_by(tp_Licitacao, de_TipoLicitacao) %>%
mutate(
media = mean(vl_Licitacao),
mediana = median(vl_Licitacao)
) %>%
ungroup() %>%
gather(
key = "medida", value = "valor",
media, mediana
) %>%
ggplot(aes(
x = reorder(de_TipoLicitacao, valor),
y = valor / 1000,
fill = medida
)) +
geom_col(
width = .5,
color = "white",
position = position_dodge()
) +
scale_fill_manual(values = c("royalblue3", "royalblue4")) +
labs(
title = "Média e Mediana dos valores de licitações.",
x = "",
y = "Valor (em milhares)"
) +
coord_flip() +
theme_ipsum()
Para as modalidades Convite e Concorrência não há diferença entre a média e a mediana. Em outras modalidades observamos que há uma diferença entre esses valores, inclusive na modalidade mais comum, que é o Pregão Presencial. Detectadas estas diferenças, é interessante observar a distruibuição dos valores de licitações para cada modalidade.
licitacoes %>%
group_by(as.factor(tp_Licitacao)) %>%
mutate(
media = mean(vl_Licitacao) / 1000,
mediana = median(vl_Licitacao) / 1000
) %>%
ggplot(aes(
x = de_TipoLicitacao,
y = vl_Licitacao / 1000,
colour = as.factor(tp_Licitacao)
)) +
geom_count() +
geom_point(aes(y = mediana), size = 3.5, color = "black", shape = 124) +
labs(
title = "Distribuição dos valores de licitações.",
x = "Modalidade",
y = "Valor (em milhares)"
) +
guides(
color = FALSE,
size = FALSE
) +
scale_y_log10() +
coord_flip() +
scale_color_ipsum() +
theme_ipsum()
No gráfico acima, a linha preta representa a mediana, e o tamanho do ponto a quantidade de licitações com aquele valor. A partir deste gráfico, podemos ver que não existe diferença entre a média e mediana das licitações das modalidades de Concorrência e Convite, pois só há uma observação de cada. Para as outras, podemos ver que esta diferença se dá ao fato dos valores das licitações serem distruibuídos em um grande intervalo, não se concentrando em uma mesma faixa. Dessa forma, é interessante verificar à que se referem essas licitações que causam esta diferença. Vejamos mais detalhes sobre as de valor mais alto.
licitacoes.caras <- licitacoes %>%
top_n(10, wt = vl_Licitacao)
licitacoes.caras %>%
ggplot(aes(
x = reorder(nu_Licitacao, vl_Licitacao),
y = vl_Licitacao / 1000
)) +
geom_col(
width = .5,
position = "dodge",
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Licitações de valores mais altos.",
x = "",
y = "Valor (em milhares)"
) +
coord_flip() +
theme_ipsum()
licitacoes.caras %>%
select(
nu_Licitacao,
vl_Licitacao,
grupo_licitacao
) %>%
datatable(
rownames = FALSE,
class = "cell-border stripe",
colnames = c("Licitação", "Valor", "Descrição")
) %>%
formatCurrency("vl_Licitacao",
currency = "R$ ",
digits = 2,
interval = 0
)
As 10 licitações com maior valor são sobre licitações de Locação, Contratação e Aquisição.
fornecedores %>%
count(nu_CPFCNPJ, no_Fornecedor) %>%
top_n(10, wt = n) %>%
ggplot(aes(x = reorder(str_to_upper(no_Fornecedor), n), y = n)) +
geom_col(
width = .5,
color = "white",
fill = "royalblue4"
) +
labs(
title = "Fornedores de serviço relacionados à \nTransporte Escolar",
x = "",
y = "Total de ocorrências"
) +
coord_flip() +
theme_ipsum()
O fornecedor com maior ocorrências na distribuição de transporte escolar é ALUYLSON PESSOA DOS SANTOS-ME. Apesar disso, vemos que a diferença entre ele e os outros é muito pequena para considerar que ele domine a distribuição.
medidas <- fornecedores %>%
count(nu_CPFCNPJ, no_Fornecedor, nu_Licitacao) %>%
summarise(media = round(mean(n), 2), mediana = round(median(n), 2))
media.fornecedores <- medidas %>% pull(media)
mediana.fornecedores <- medidas %>% pull(mediana)
A média de fornecedores por licitação de transporte escolar é de 1.04, e a mediana é 1. Vemos que, no geral, a concorrência das licitações é baixa.
fornecedores %>%
inner_join(empenhos %>% select(cd_UGestora, nu_Licitacao, vl_Empenho),
by = c("cd_UGestora", "nu_Licitacao")
) %>%
group_by(nu_CPFCNPJ, no_Fornecedor) %>%
summarise(total = sum(vl_Empenho)) %>%
ungroup() %>%
top_n(10, wt = total) %>%
ggplot(aes(
x = reorder(no_Fornecedor, total),
y = total / 1000
)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Valor dos empenhos de transporte \n escolar recebido por fornecedor.",
x = "Fornecedor",
y = "Valor recebido (em milhares)"
) +
theme(axis.text.y = element_text(size = 7.5)) +
scale_y_log10() +
coord_flip() +
theme_ipsum()
ALUYLSON PESSOA DOS SANTOS - ME foi o fornecedor com maior valor recebido, dentre os empenhos de transporte escolar em 2016, com total aproximado de R$1.84 mi.
fornecedores_municipios <- fornecedores %>%
inner_join(unidades_gestoras %>% select(cd_UGestora, cd_Municipio, de_Municipio),
by = "cd_UGestora"
)
fornecedores_municipios %>%
group_by(de_Municipio) %>%
summarise(total = n_distinct(nu_CPFCNPJ)) %>%
top_n(10, wt = total) %>%
ggplot(aes(
x = reorder(de_Municipio, total),
y = total
)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Quantidades de fornecedores por municípios em 2016",
x = "Município",
y = "Quantidade de fornecedores"
) +
scale_y_continuous(breaks = seq(0, 30, 2)) +
coord_flip() +
theme_ipsum()
Dos municípios contidos na base, o município de Salgado de São Félix possui a maior quantidade de fornecedores. A quantidade de fornecedores varia de 1 a 30.
municipios.fornecedores <- fornecedores_municipios %>%
select(de_Municipio) %>%
n_distinct(.)
porc.municipios <- round((municipios.fornecedores / 223) * 100, 2)
A quantidade de municípios que possui algum fornecedor de transporte escolar é 57, representando 25.56% dos 223 municípios da Paraíba.
licitacoes_municipios <- licitacoes %>%
inner_join(unidades_gestoras %>% select(cd_UGestora, cd_Municipio, de_Municipio),
by = "cd_UGestora"
)
licitacoes_municipios %>%
count(de_Municipio) %>%
top_n(5, wt = n) %>%
ggplot(aes(
x = reorder(de_Municipio, n),
y = n
)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Municípios que mais realizaram licitações de transporte \nescolar em 2016",
x = "Município",
y = "Quantidade de licitações"
) +
scale_y_continuous(breaks = seq(0, 9, 1)) +
coord_flip() +
theme_ipsum()
Dentre os municípios que mais realizaram licitações, o que mais se destacou foi Água Branca, com uma grande diferença em relação aos demais.
licitacoes.municipio <- licitacoes_municipios %>%
select(de_Municipio) %>%
n_distinct(.)
porc.licitacoes <- round((licitacoes.municipio / 100) * 100, 2)
A quantidade de municípios que fizeram alguma licitação de transporte escolar em 2016 é 74, representando aproximadamente 74% dos 223 municípios da Paraíba. O que significa que 149 municípios não fizeram nenhuma licitação ou não possuem dados.
licitacoes %>%
count(dt_MesAno) %>%
ggplot(aes(
x = dt_MesAno,
y = n
)) +
geom_bar(
stat = "identity",
width = .5,
color = "white",
fill = "dodgerblue4"
) +
labs(
title = "Número de licitações de transporte escolar por mês em 2016",
x = "Mês",
y = "Licitações"
) +
theme_ipsum()
O mês de maio foi o que teve maior número de licitações de transporte escolar, seguido de junho e julho, respectivamente. Vemos que em janeiro não houve nenhuma licitação.
licitacoes_municipios %>%
filter(dt_MesAno %in% c("05", "06", "07")) %>%
count(de_Municipio) %>%
top_n(10, wt = n) %>%
ggplot(aes(
x = reorder(de_Municipio, n),
y = n
)) +
geom_bar(
stat = "identity",
width = .5,
fill = "dodgerblue4"
) +
labs(
title = "Municípios que mais realizaram licitações de \ntransporte escolar",
subtitle = "Dados referentes aos meses de maio, junho e julho de 2016",
x = "Municípios",
y = "Quantidade de licitações"
) +
scale_y_continuous(breaks = seq(0, 7, 1)) +
coord_flip() +
theme_ipsum()
Água Branca continua sendo como o município com maior número de licitações de transporte escolar, seguido por Monteiro.
empenhos %>%
left_join(unidades_gestoras %>% select(cd_UGestora, cd_Municipio, de_Municipio),
by = "cd_UGestora"
) %>%
group_by(cd_Municipio, de_Municipio) %>%
summarise(total = sum(vl_Empenho)) %>%
ungroup() %>%
top_n(10, wt = total) %>%
ggplot(aes(
x = reorder(de_Municipio, total),
y = total / 1000
)) +
geom_bar(
stat = "identity",
width = .5,
fill = "dodgerblue4"
) +
labs(
title = "Municípios que empenharam mais dinheiro em 2016",
x = "Municípios",
y = "Total empenhado (em milhares)"
) +
scale_y_log10() +
coord_flip() +
theme_ipsum()
media.empenhos <- round(empenhos %>% pull(vl_Empenho) %>% mean(.), 2)
mediana.empenhos <- round(empenhos %>% pull(vl_Empenho) %>% median(.), 2)
A média geral do valor empenhado para contratos, em 2016, foi de R$ 4646.93 e a mediana foi de R$ 2091.43. Não há uma distribuição igualitária entre os valores empenhados pelos municípios do estado, alguns municípios gastam muito mais que os outros. Monteiro e Sousa foram os municípios que empenharam mais dinheiro em comparação aos demais.
pagamentos.municipio <- pagamentos %>%
left_join(unidades_gestoras %>% select(cd_UGestora, de_Municipio),
by = c("cd_UGestora")
) %>%
na.omit() %>%
group_by(de_Municipio) %>%
summarise(total = sum(vl_Pagamento)) %>%
ungroup()
pagamentos.municipio %>%
top_n(10, wt = total) %>%
ggplot(aes(
x = reorder(de_Municipio, total),
y = total / 1000
)) +
geom_bar(
stat = "identity",
width = .5,
fill = "dodgerblue4"
) +
labs(
title = "Municípios que gastaram mais com pagamentos",
subtitle = "Dados referentes à pagamentos realizados em 2016",
x = "Municípios",
y = "Total pago (em milhares)"
) +
scale_y_log10() +
coord_flip() +
theme_ipsum()
O município de Sousa é um dos municípios que mais gastaram com pagamentos relacionados à licitações em 2016, o que faz sentido considerando que este município também está entre os que mais empenharam e mais licitaram em 2016.
gasto_municipio_aluno <- pagamentos.municipio %>%
left_join(educacao.municipios,
by = "de_Municipio"
) %>%
mutate(
total_matriculados = vl_Matriculas_Fundamental + vl_Matriculas_Medio + vl_Matriculas_Pre_Escolar,
gasto_por_aluno = total / total_matriculados
)
gasto_municipio_aluno %>%
select(de_Municipio, gasto_por_aluno) %>%
top_n(10, wt = gasto_por_aluno) %>%
ggplot(aes(
x = de_Municipio,
y = gasto_por_aluno
)) +
geom_segment(aes(
x = reorder(de_Municipio, gasto_por_aluno),
xend = reorder(de_Municipio, gasto_por_aluno),
y = 0,
yend = gasto_por_aluno
),
colour = "dodgerblue4"
) +
geom_point(
size = 2,
colour = "dodgerblue4"
) +
labs(
title = "Municípios que mais gastaram com transporte \nescolar por aluno.",
caption = "Estimativa realizada com base em dados sobre alunos matriculados em 2015",
x = "Municípios",
y = "Total gasto"
) +
coord_flip() +
theme_ipsum()
O total gasto por aluno por município varia de aproximadamente R$ 150.00 à R$ 300,00.