O Tribunal de Contas do Estado de Pernambuco (TCE-PE) disponibiliza, em seu portal de dados abertos, bases completas sobre as licitações realizadas pelos órgãos estaduais e municipais, permitindo o acompanhamento detalhado dos processos licitatórios e dos contratos deles decorrentes. Entre essas bases, destacam-se os dados de licitações do ano de 2021, que reúnem informações sobre o município responsável, a unidade gestora, a modalidade da licitação, o estágio e a situação do processo, bem como valores estimados e outras características relevantes do objeto contratado. Esses dados são coletados e estruturados pelo módulo de Licitações e Contratos (LICON), com o objetivo de viabilizar fiscalização, transparência e controle social das compras públicas em todo o estado.
No contexto de Pernambuco, o volume de recursos movimentados pelas licitações municipais em 2021 é significativo e impacta diretamente políticas públicas nas áreas de saúde, educação, infraestrutura, assistência social e outras funções de governo. Entretanto, para a maior parte dos cidadãos e mesmo para muitos gestores, esses dados permanecem em formatos pouco acessíveis, exigindo conhecimentos técnicos para serem importados, limpos e analisados de forma sistemática. Assim, surge o problema central deste projeto: transformar a base bruta de licitações municipais de 2021, disponibilizada pelo TCE-PE, em um conjunto de informações organizadas e visualmente compreensíveis, que permitam entender melhor como os recursos licitados se distribuem entre modalidades, municípios e estágios dos processos.
Este trabalho utiliza a base “Licitações TCE 2021”, disponível no Portal de Dados Abertos de Pernambuco, que consolida os processos licitatórios registrados junto ao TCE-PE ao longo daquele ano, em formato adequado para análise automatizada. A metodologia proposta envolve importar o arquivo de 2021 para o ambiente R, padronizar nomes de variáveis, tratar campos de datas e valores monetários, selecionar as variáveis de interesse e criar indicadores derivados, como total licitado por município e por modalidade. Em seguida, são aplicadas técnicas de análise exploratória de dados para construir tabelas-resumo e visualizações que destaquem padrões de concentração de valores, perfil das modalidades mais utilizadas e possíveis desigualdades entre municípios.
Ao descrever de forma estruturada os dados oficiais de licitações de 2021 do TCE-PE e ao organizar essas informações em gráficos e tabelas interpretáveis, a análise pretende auxiliar diferentes públicos: gestores municipais que desejam comparar seu município com outros, órgãos de controle interessados em identificar concentrações atípicas de valores, pesquisadores que estudam gasto público e cidadãos que buscam acompanhar de maneira mais informada o uso dos recursos coletivos. Dessa forma, o relatório contribui tanto para o aprendizado em ciência de dados quanto para o fortalecimento da cultura de transparência e de uso efetivo dos dados abertos de licitações em Pernambuco.
Nesta análise serão utilizados alguns pacotes do ecossistema R que facilitam a importação, transformação e visualização dos dados de licitações. O pacote readr (dentro do tidyverse) é utilizado para importar arquivos em formato CSV de forma rápida e confiável. O pacote dplyr oferece um conjunto de funções para seleção, filtragem, agregação e criação de novas variáveis de maneira clara e legível. O pacote ggplot2 é responsável pela criação de gráficos, permitindo construir visualizações personalizadas a partir da gramática dos gráficos. Além disso, o pacote janitor auxilia na limpeza e padronização dos nomes das variáveis, enquanto lubridate simplifica o tratamento de datas presentes no conjunto de dados.
Carregar esses pacotes antecipadamente garante que o leitor saiba exatamente quais dependências são necessárias para replicar a análise em outro ambiente. Assim, qualquer pessoa que possua o R instalado poderá reproduzir o fluxo completo do projeto apenas garantindo a instalação prévia desses pacotes.
Os dados deste projeto foram obtidos a partir do portal de dados abertos do Tribunal de Contas do Estado de Pernambuco (TCE-PE), na seção “Bases de dados completas” e no conjunto referente às licitações municipais de 2021. A extração utilizada corresponde a um arquivo consolidado em formato CSV (2021.csv), gerado a partir dos registros oficiais do módulo de Licitações e Contratos, que reúne informações sobre os processos licitatórios realizados pelos municípios pernambucanos ao longo do ano de 2021.
O propósito original desses dados é permitir o acompanhamento dos estágios das licitações e contratos pelos órgãos de controle, gestores e pela sociedade em geral, registrando para cada processo variáveis como identificação da licitação, município, unidade gestora, modalidade, situação, datas importantes e valores estimados. O arquivo de 2021 contém diversas colunas, incluindo variáveis categóricas (por exemplo, município, modalidade, situação), variáveis numéricas (como valores monetários e códigos) e campos de data. Alguns campos apresentam valores ausentes ou formatos distintos, como números com vírgula decimal ou datas armazenadas como texto, o que torna necessária uma etapa de tratamento prévio antes da análise.
No presente trabalho, a preparação dos dados envolve três etapas principais. Primeiro, o arquivo CSV é importado para o R e os nomes das colunas são padronizados para um formato mais simples, em letras minúsculas e sem espaços, facilitando a manipulação posterior. Em seguida, os campos de valor estimado e de datas são convertidos para os tipos adequados, transformando textos em números e objetos de data, de modo que possam ser agregados, filtrados e visualizados corretamente. Por fim, são selecionadas apenas as variáveis mais relevantes para o objetivo da análise, descartando colunas redundantes ou pouco informativas.
Após essas etapas de limpeza, obtém-se um conjunto de dados mais enxuto e coerente com o problema proposto, contendo, entre outras, as variáveis município, modalidade, situação, data de abertura e valor estimado. Em vez de trabalhar diretamente com o arquivo bruto, que é mais extenso e heterogêneo, a análise passa a utilizar essa versão organizada, o que reduz o risco de erros de interpretação e facilita a construção de tabelas-resumo e gráficos. As variáveis escolhidas permitem, de forma integrada, investigar como as licitações municipais de 2021 se distribuem entre municípios, modalidades e faixas de valor, atendendo aos objetivos exploratórios do projeto.
O conjunto de dados utilizado neste projeto é formado por uma tabela com aproximadamente 106 mil linhas e 37 colunas, o que indica um volume expressivo de registros de licitações municipais ao longo de 2021. As 37 variáveis disponíveis abrangem tanto informações de identificação e contexto do processo licitatório (por exemplo, NumeroDocumentoAjustado, RazaoSocial, codigoPL, codigoUG, UG, CODIGOMUNICIPIO, NumeroProcesso, AnoProcesso) quanto características descritivas e de classificação, como NomeNatureza, NomeModalidade, NumeroModalidade, AnoModalidade, DescricaoObjeto, EspecificacaoObjeto, SituacaoLicitacao, EstagioLicitacao, CaracteristicaObjeto, ObjetoConformeEdital, CodigoNatureza, CodigoDescricaoObjeto, CodigoSituacaoLicitacao, CodigoEstagioLicitacao e CodigoObjeto.
Além disso, o conjunto inclui variáveis de data (DataPublicacaoHomologacao, DataEmissaoEdital, DataPublicacaoHabilitacao, DataSessaoAbertura) e de valor monetário ou orçamentário (TotalAdjudicadoLicitacao, TotalAdjudicadoLicitante, ValorOrcamentoEstimativo, DotacaoOrcamentaria), bem como variáveis relacionadas ao resultado do certame, como ResultadoHabilitacao, Adjudicada e QtdeLicitantes, e ainda o campo LinkArquivo, que referencia documentos associados à licitação. Essa combinação de variáveis permite explorar, de forma bastante detalhada, o comportamento das licitações municipais de Pernambuco em 2021, tanto sob a perspectiva de valores e quantidades quanto em relação às modalidades, estágios e características dos objetos licitados.
library(readr)
library(ggplot2)
## Warning: pacote 'ggplot2' foi compilado no R versão 4.5.2
library(dplyr)
##
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
##
## filter, lag
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, setequal, union
library(scales)
##
## Anexando pacote: 'scales'
## O seguinte objeto é mascarado por 'package:readr':
##
## col_factor
# importar o CSV
dados <- read.csv2("C:/Users/julio/OneDrive/Área de Trabalho/Licitacoes/2021.csv",
header = TRUE,
sep = ";",
dec = ",",
stringsAsFactors = FALSE)
# confira os nomes das colunas
names(dados)
## [1] "NumeroDocumentoAjustado" "RazaoSocial"
## [3] "codigoPL" "codigoUG"
## [5] "UG" "NomeNatureza"
## [7] "NomeModalidade" "NumeroModalidade"
## [9] "AnoModalidade" "DescricaoObjeto"
## [11] "EspecificacaoObjeto" "SituacaoLicitacao"
## [13] "EstagioLicitacao" "DataPublicacaoHomologacao"
## [15] "TotalAdjudicadoLicitacao" "TotalAdjudicadoLicitante"
## [17] "ResultadoHabilitacao" "Adjudicada"
## [19] "QtdeLicitantes" "CodigoModalidade"
## [21] "NumeroProcesso" "AnoProcesso"
## [23] "DataEmissaoEdital" "DataPublicacaoHabilitacao"
## [25] "CaracteristicaObjeto" "ObjetoConformeEdital"
## [27] "LinkArquivo" "ValorOrcamentoEstimativo"
## [29] "CodigoNatureza" "CodigoDescricaoObjeto"
## [31] "CodigoSituacaoLicitacao" "CodigoEstagioLicitacao"
## [33] "CodigoObjeto" "CODIGOMUNICIPIO"
## [35] "DataSessaoAbertura" "DotacaoOrcamentaria"
## [37] "FundamentoLegal"
dados <- read.csv2("C:/Users/julio/OneDrive/Área de Trabalho/Licitacoes/2021.csv",
header = TRUE,
sep = ";",
dec = ",",
stringsAsFactors = FALSE)
knitr::opts_chunk$set(
echo = TRUE,
root.dir = "C:/Users/julio/OneDrive/Área de Trabalho/Licitacoes"
)
dados <- read.csv2("C:/Users/julio/OneDrive/Área de Trabalho/Licitacoes/2021.csv",
header = TRUE,
sep = ";",
dec = ",",
stringsAsFactors = FALSE)
library(readr)
library(dplyr)
library(ggplot2)
dados <- read.csv2("C:/Users/julio/OneDrive/Área de Trabalho/Licitacoes/2021.csv",
header = TRUE,
sep = ";",
dec = ",",
stringsAsFactors = FALSE)
graf_modalidade <- dados |>
count(NomeModalidade, name = "qtde_licitacoes") |>
arrange(desc(qtde_licitacoes))
ggplot(graf_modalidade,
aes(x = reorder(NomeModalidade, qtde_licitacoes),
y = qtde_licitacoes)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
x = "Modalidade",
y = "Quantidade de licitações",
title = "Quantidade de licitações por modalidade - 2021"
)
library(dplyr)
library(ggplot2)
library(scales)
dados$ValorOrcamentoEstimativo <- as.numeric(gsub(",", ".", dados$ValorOrcamentoEstimativo))
media_modalidade <- dados |>
group_by(NomeModalidade) |>
summarise(
media_valor_orcado = mean(ValorOrcamentoEstimativo, na.rm = TRUE),
n = n()
) |>
arrange(desc(media_valor_orcado))
ggplot(media_modalidade,
aes(x = reorder(NomeModalidade, media_valor_orcado),
y = media_valor_orcado)) +
geom_col(fill = "steelblue") +
coord_flip() +
scale_y_continuous(labels = label_currency(prefix = "R$ ",
big.mark = ".",
decimal.mark = ",")) +
labs(
x = "Modalidade",
y = "Valor orcado medio",
title = "Valor orcado medio por modalidade de licitacao - 2021"
) +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 6),
axis.text.y = element_text(size = 8)
)
## Warning: Removed 8 rows containing missing values or values outside the scale range
## (`geom_col()`).
library(dplyr)
library(ggplot2)
library(scales)
dados$ValorOrcamentoEstimativo <- as.numeric(gsub(",", ".", dados$ValorOrcamentoEstimativo))
ug_valor <- dados |>
group_by(UG) |>
summarise(
valor_total_orcado = sum(ValorOrcamentoEstimativo, na.rm = TRUE)
) |>
arrange(desc(valor_total_orcado)) |>
slice_head(n = 10)
ggplot(ug_valor,
aes(x = reorder(UG, valor_total_orcado),
y = valor_total_orcado)) +
geom_col(fill = "darkblue", width = 0.6) +
coord_flip() +
scale_y_continuous(
labels = label_currency(prefix = "R$ ",
big.mark = ".",
decimal.mark = ","),
expand = expansion(mult = c(0, 0.05))
) +
labs(
x = "Unidade Gestora (UG)",
y = "Valor orcado total",
title = "Top 10 UGs por valor orcado total das licitacoes - 2021"
) +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 6),
axis.text.y = element_text(size = 8)
)
library(dplyr)
library(ggplot2)
library(scales)
# garantir valor numérico
dados$ValorOrcamentoEstimativo <- as.numeric(gsub(",", ".", dados$ValorOrcamentoEstimativo))
carpina_ug <- dados |>
filter(UG == "Prefeitura Municipal de Carpina")
carpina_modalidade <- carpina_ug |>
group_by(NomeModalidade) |>
summarise(
valor_total_orcado = sum(ValorOrcamentoEstimativo, na.rm = TRUE),
n = n()
) |>
arrange(desc(valor_total_orcado))
ggplot(carpina_modalidade,
aes(x = reorder(NomeModalidade, valor_total_orcado),
y = valor_total_orcado)) +
geom_col(fill = "darkgreen") +
coord_flip() +
scale_y_continuous(labels = label_currency(prefix = "R$ ",
big.mark = ".",
decimal.mark = ",")) +
labs(
x = "Modalidade",
y = "Valor orcado total",
title = "Prefeitura Municipal de Carpina - valor orcado por modalidade - 2021"
) +
theme(
plot.title = element_text(hjust = 0.9, size = 14),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 10)
)
library(dplyr)
library(ggplot2)
library(scales)
dados$ValorOrcamentoEstimativo <- as.numeric(gsub(",", ".", dados$ValorOrcamentoEstimativo))
carpina_ug <- dados |>
filter(UG == "Prefeitura Municipal de Carpina")
carpina_objeto_valor <- carpina_ug |>
group_by(DescricaoObjeto) |>
summarise(
valor_total_orcado = sum(ValorOrcamentoEstimativo, na.rm = TRUE),
n = n()
) |>
arrange(desc(valor_total_orcado)) |>
slice_head(n = 25)
ggplot(carpina_objeto_valor,
aes(x = reorder(DescricaoObjeto, valor_total_orcado),
y = valor_total_orcado)) +
geom_col(fill = "darkgreen") +
coord_flip() +
scale_y_continuous(labels = label_currency(prefix = "R$ ",
big.mark = ".",
decimal.mark = ",")) +
labs(
x = "Descricao do objeto",
y = "Valor orcado total",
title = "Prefeitura de Carpina - objetos com maior valor orcado (top 10) - 2021"
) +
theme(
plot.title = element_text(hjust = 0.9, size = 12),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 8)
)
library(dplyr)
library(ggplot2)
library(scales)
# garantir valor numerico
dados$ValorOrcamentoEstimativo <- as.numeric(gsub(",", ".", dados$ValorOrcamentoEstimativo))
# filtrar apenas a UG de Carpina
carpina_ug <- dados |>
filter(UG == "Prefeitura Municipal de Carpina")
# valor total por natureza (top 10)
carpina_natureza <- carpina_ug |>
group_by(NomeNatureza) |>
summarise(
valor_total_orcado = sum(ValorOrcamentoEstimativo, na.rm = TRUE),
n = n()
) |>
arrange(desc(valor_total_orcado)) |>
slice_head(n = 10)
ggplot(carpina_natureza,
aes(x = reorder(NomeNatureza, valor_total_orcado),
y = valor_total_orcado)) +
geom_col(fill = "steelblue") +
coord_flip() +
scale_y_continuous(labels = label_currency(prefix = "R$ ",
big.mark = ".",
decimal.mark = ",")) +
labs(
x = "NomeNatureza",
y = "Valor orcado total",
title = "Prefeitura de Carpina - valor orcado por natureza de despesa (top 10) - 2021"
)
Os gráficos elaborados indicaram quais modalidades concentram maior número de processos e maiores montantes financeiros, quais UGs aparecem entre as que mais licitam, como se comportam os valores orçados em termos de distribuição e quais tipos de objeto e naturezas de despesa se destacam em casos específicos, como o da Prefeitura Municipal de Carpina. Ao focar em Carpina, município onde o autor reside, a exploração permitiu conectar os resultados quantitativos com a realidade local, destacando áreas de maior demanda de gasto e tipos de contratação mais frequentes. Em conjunto, o projeto atendeu ao objetivo de usar dados abertos reais para demonstrar um fluxo completo de ciência de dados em R — da importação e preparação à análise gráfica e textual — reforçando o potencial dessas bases para apoiar transparência, controle social e estudos sobre contratações públicas em Pernambuco
Os dados utilizados neste projeto foram obtidos na seção de “Bases de dados completas” do portal de dados abertos do Tribunal de Contas do Estado de Pernambuco (TCE-PE), disponível em: https://www.tce.pe.gov.br/internet/index.php/dados-abertos/bases-de-dados-completas. Nessa página, o TCE-PE disponibiliza extrações diretas de suas bases internas em arquivos de grande porte, permitindo que pesquisadores e cidadãos trabalhem com conjuntos de dados completos relacionados à execução orçamentária, financeira, licitações e contratos.
Entre as bases disponibilizadas, foi selecionado o conjunto referente a “Licitações e licitantes municipais”, no formato XML, para o ano de 2021. Esses arquivos contêm, de forma estruturada, informações detalhadas sobre os processos licitatórios realizados pelos municípios pernambucanos, incluindo dados sobre a licitação em si (como modalidade, situação, datas e valores estimados) e sobre os licitantes participantes. Os arquivos XML de 2021 serão importados e convertidos para um formato tabular no R, servindo como base principal para as etapas de limpeza, organização e análise exploratória realizadas ao longo do projeto.