Análise Exploratória de Preços de Combustíveis em Pernambuco (2023-2025)

Introdução

O Problema: A Volatilidade no Preço dos Combustíveis

O custo dos combustíveis é um dos componentes mais críticos no orçamento das famílias brasileiras e na logística das empresas. Em um cenário econômico marcado por flutuações frequentes nas políticas de preços internacionais e tributação interna, o consumidor final muitas vezes se vê refém da incerteza. A disparidade de preços entre diferentes municípios, e até mesmo entre bairros vizinhos, pode representar uma variação significativa no custo de vida. Por que devemos nos interessar? Porque entender a dinâmica desses preços não é apenas uma curiosidade macroeconômica, mas uma ferramenta importante para a tomada de decisão financeira eficiente no dia a dia do consumidor.

Fonte de Dados e Metodologia

Para descobrir esses padrões, este projeto utiliza dados oficiais da Série Histórica de Preços de Combustíveis, disponibilizada pela Agência Nacional do Petróleo, Gás Natural e Biocombustíveis (ANP) no Portal de Dados Abertos do Governo Federal. O recorte selecionado abrange o estado de Pernambuco, cobrindo o período de janeiro de 2023 a junho de 2025.

A metodologia empregada baseia-se no ciclo de Ciência de Dados utilizando a linguagem R:

  1. Coleta: Unificação de múltiplos arquivos semestrais brutos.
  2. Pré-processamento: Tratamento de dados faltantes e inconsistentes e filtragem dos dados pra manter apenas os referentes ao estado de Pernambuco.
  3. Análise Exploratória: Uso de estatística descritiva e visualização de dados para inferir padrões e retirar insights das informações analisadas.

A Técnica: Tratamento de Dados como Diferencial

A principal barreira para uma análise geográfica precisa neste dataset é a baixa qualidade dos dados de localização (nomes de bairros digitados incorretamente, abreviações e erros de encoding). A abordagem técnica central deste trabalho foca no Data Wrangling avançado: foi implementado um algoritmo de limpeza para padronizar nomes de bairros (ex: unificando “B. Viagem” e “Boa Viagem”), corrigir caracteres corrompidos e categorizar localidades vagas (como “Zona Rural”). Isso permite, diferentemente de análises superficiais, uma comparação granular e fidedigna entre as microrregiões do estado.

Valor para o Cliente

As análises apresentadas nesse documento, entregam valor direto para três principais perfis distintos de pernambucanos:

  1. O Motorista Urbano e Famílias: Para quem utiliza o veículo para deslocamento diário ou lazer, a análise responde se vale a pena se deslocar para um bairro vizinho para abastecer. A economia de alguns centavos por litro, acumulada ao longo do ano, justifica a mudança de rota?
  2. Motoristas Profissionais (Aplicativos e Taxistas): Para esse grupo, onde o combustível representa o principal custo operacional, identificar padrões de preço entre Etanol, Gasolinam GNV (e o momento exato de migrar de um para o outro) impacta diretamente na margem de lucro mensal.
  3. Gestores de Pequenas Frotas: Empresas locais que não possuem contratos de abastecimento em massa podem usar os dados de bandeiras para decidir se priorizam postos de “Bandeira Branca” (menor custo) ou de grandes distribuidoras (suposta qualidade/confiabilidade).

Ou seja, as análises irão responder perguntas como:

  • Onde abastecer? Identificando quais bairros e municípios praticam os menores preços.
  • Qual combustível escolher? Avaliando a competitividade do Etanol frente à Gasolina ou outros tipos de combustíveis.
  • A marca importa? Verificando se postos de grandes bandeiras são estatisticamente mais caros que os de bandeira branca.

O resultado final é um documento transforma milhares de linhas de dados brutos em uma bússola de preços, permitindo que o consumidor pernambucano deixe de basear suas escolhas apenas na intuição ou no posto da esquina, passando a tomar decisões de abastecimento fundamentadas em dados históricos e geográficos, permitindo, inclusive, uma maior economia nos gastos financeiros mensais.

Pacotes necessários

Pacotes Utilizados

Os seguintes pacotes são necessários para rodar este script:


Lista de bibliotecas utilizadas neste projeto
Nome do Pacote Propósito
tidyverse Manipulação de dados (dplyr) e visualização (ggplot2)
tidytext Processamento e análise de texto
janitor Limpeza automática de nomes de colunas
lubridate Tratamento e conversão de datas
DT Criação de tabelas interativas e pesquisáveis
rmdformats Temas visuais profissionais para o RMarkdown
knitr Geração de tabelas estáticas e relatórios dinâmicos
kableExtra Estilização avançada de tabelas no RMarkdown
naniar Visualização e tratamento de dados faltantes
# Carregamento das bibliotecas necessárias
library(tidyverse)
library(tidytext)
library(janitor)
library(lubridate)
library(DT)
library(rmdformats)
library(knitr)
library(kableExtra)
library(naniar)

Obs: Caso as bibliotecas não tenham sido instaladas, utilize o comando abaixo para instalar:

# Instalação dos pacotes necessários
install.packages(c("tidyverse", "tidytext", "janitor", "lubridate", "DT", "rmdformats", "knitr", "kableExtra", "naniar"))

Preparação dos dados

Carregamento dos Dados

Os dados utilizados nesta análise foram extraídos da Série Histórica de Preços de Combustíveis, disponibilizada oficialmente pela Agência Nacional do Petróleo, Gás Natural e Biocombustíveis (ANP) no Portal de Dados Abertos do Governo Federal. O conjunto de dados original contém registros brutos de coletas semanais, que foram compilados e tratados para este estudo, abrangendo o período do primeiro semestre de 2023 até o primeiro semestre de 2025. Os dados incluem informações dos preços de combustíveis em vários estados e municípios do país. A etapa inicial, após o carregamento dos dados, é verificar se os nomes das colunas estão corretas, retirar os dados nulos, e filtrar os dados nacionais pra deixar somente os dados relacionados ao estado de Pernambuco.

# Lista de arquivos CSV a serem carregados
arquivos_csv <- c(
  "Preços semestrais - AUTOMOTIVOS_2023.01.csv",
  "Preços semestrais - AUTOMOTIVOS_2023.02.csv",
  "Preços semestrais - AUTOMOTIVOS_2024.01.csv",
  "Preços semestrais - AUTOMOTIVOS_2024.02.csv",
  "Preços semestrais - AUTOMOTIVOS_2025.01.csv"
)

# Forçar a leitura das colunas numéricas como double
colunas_numericas <- cols(
  `Valor de Venda` = col_double(),
  `Valor de Compra` = col_double()
)

# A função 'map_dfr()' vai ler os dados e corrigir a leitura das colunas numéricas
# O encoding Latin1 é usado para lidar com caracteres especiais
dados_brutos_completos <- map_dfr(
  arquivos_csv,
  ~ read_csv2(
    .,
    locale = locale(encoding = "Latin1"),
    col_types = colunas_numericas
  )
)

Após carregar os dados, é importante verificar a estrutura dos dados lidos para entender sua composição inicial.

# Verifica a estrutura dos dados lidos
glimpse(dados_brutos_completos)
## Rows: 2,232,059
## Columns: 16
## $ `Regiao - Sigla`    <chr> "SE", "SE", "SE", "NE", "NE", "NE", "NE", "NE", "N…
## $ `Estado - Sigla`    <chr> "SP", "SP", "SP", "AL", "AL", "AL", "AL", "AL", "A…
## $ Municipio           <chr> "SOROCABA", "SOROCABA", "SOROCABA", "ARAPIRACA", "…
## $ Revenda             <chr> "COMPETRO COMERCIO E DISTRIBUICAO DE DERIVADOS DE …
## $ `CNPJ da Revenda`   <chr> "00.003.188/0001-21", "00.003.188/0001-21", "00.00…
## $ `Nome da Rua`       <chr> "RUA HUMBERTO DE CAMPOS", "RUA HUMBERTO DE CAMPOS"…
## $ `Numero Rua`        <chr> "306", "306", "306", "S/N", "S/N", "S/N", "S/N", "…
## $ Complemento         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "KM    70", "K…
## $ Bairro              <chr> "JARDIM ZULMIRA", "JARDIM ZULMIRA", "JARDIM ZULMIR…
## $ Cep                 <chr> "18061-000", "18061-000", "18061-000", "57308-000"…
## $ Produto             <chr> "ETANOL", "DIESEL S10", "GASOLINA", "ETANOL", "DIE…
## $ `Data da Coleta`    <chr> "03/01/2023", "03/01/2023", "03/01/2023", "02/01/2…
## $ `Valor de Venda`    <dbl> 3.39, 6.21, 4.39, 3.89, 6.49, 5.14, 5.14, 3.79, 5.…
## $ `Valor de Compra`   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ `Unidade de Medida` <chr> "R$ / litro", "R$ / litro", "R$ / litro", "R$ / li…
## $ Bandeira            <chr> "BRANCA", "BRANCA", "BRANCA", "VIBRA ENERGIA", "VI…

Os dados originais são compostos por 2232059 linhas e 16 colunas, estas contendo informações que vão desde a sigla da região, do estado e o nome do município onde o dado foi coletado, até a data da coleta, o tipo de combustível vendido (ETANOL, DIESEL S10, GASOLINA, DIESEL, GASOLINA ADITIVADA, e GNV), o valor de venda, a bandeira do posto o qual vendeu o produto e outras informações coletadas.

Limpeza dos Dados

Nos dados carregados, é possível perceber que existem dados nulos em algumas colunas, como na coluna Complemento, e que os dados da coluna Valor de Compra são todos nulos. Isso pode ser evidenciado com o código abaixo:

# Primeira verificação dos dados nulos
# Verifica quais valores da coluna 'valor_de_compra' não são nulos
check_geral <- dados_brutos_completos %>%
  clean_names() %>% # Padroniza nomes de colunas
  filter(!is.na(valor_de_compra)) # Filtra linhas onde 'valor_de_compra' NÃO é nulo
print(paste("Linhas com a coluna valor_de_compra NÃO NULA em todo o dataset:", nrow(check_geral)))
## [1] "Linhas com a coluna valor_de_compra NÃO NULA em todo o dataset: 0"
# Segunda verificação
# Visualiza a quantidade de dados nulos por coluna
gg_miss_var(dados_brutos_completos, show_pct = TRUE) +
  labs(title = "Porcentagem de Dados Faltantes por Coluna",
       y = "% de Nulos",
       x = "Variáveis")

Como todas as linhas da coluna Valor de Compra estão nulas (100% das linhas), essa coluna será descartada. Além disso, nem todas as colunas do dataset são relevantes para as análises que serão feitas, como a coluna, Regiao - Sigla, visto serão analisados apenas os dados do estado de Pernambuco, CNPJ da Revenda, Cep, Nome da Rua, Numero Rua e Complemento também não serão consideradas, assim como a coluna Unidade de Medida, já que se refere somente à unidade de medida do preço do combustível analisado (real por litro ou real por metro cúbico, no caso do GNV). Tendo isso em vista, as colunas mais relevantes dos dados originais são:

  • Estado - Sigla
  • Municipio
  • Bairro
  • Revenda
  • Produto
  • Data da Coleta
  • Valor de Venda
  • Bandeira

Portanto, os dados serão filtrados para manter apenas as colunas mais relevantes e utilizar somente os dados referentes ao estado de Pernambuco.

dados_pe <- dados_brutos_completos %>%
  
  # Padroniza nomes de colunas
  clean_names() %>%
  
  # Mantém apenas as linhas onde 'estado_sigla' é "PE"
  filter(estado_sigla == "PE") %>%
  
  # Converte a data e muda o tipo da coluna 'produto' pra fator
  mutate(
    data_da_coleta = dmy(data_da_coleta), # Converte a coluna de data para o formato Date
    
    # Transforma produto em fator ordenado
    produto = factor(produto, levels = c(
      "GASOLINA", 
      "GASOLINA ADITIVADA", 
      "ETANOL", 
      "DIESEL S10", 
      "DIESEL", 
      "GNV"
    ))) %>%
  
  # Seleciona as colunas mais relevantes para a análise
  select(
    estado_sigla,
    municipio,
    bairro,
    revenda,
    produto,
    data_da_coleta,
    valor_de_venda,
    bandeira
  )

# Verificar os dados filtrados para PE
datatable(head(dados_pe, 5000), # Mostra as primeiras 5000 linhas
          options = list(
            pageLength = 10,
            autoWidth = TRUE  
          ),
          caption = "Verificação dos dados (primeiras 5000 linhas)")

Após a filtragem e limpeza inicial dos dados, percebe-se que ainda é necessária correção em alguns dados, principalmente na coluna bairro, visto que ela apresenta valores mal formatados, ou bairros iguais com nomeclaturas distintas. É possível contabilizar 187 bairros registrados. Uma análise visual mostra que muitos desses são, na verdade, o mesmo bairro com grafias diferentes.

Um exemplo disso é mostrado pelo código abaixo, que mostra as diferentes grafias dadas ao bairro de “NOSSA SENHORA APARECIDA”, no município de Gravatá.

# Filtra apenas os bairros que contêm "APARECIDA" 
exemplo_sujeira <- dados_pe %>%
  filter(str_detect(bairro, "APARECIDA|APAREC")) %>%
  count(bairro, sort = TRUE)

# Exibir tabela simples
kable(exemplo_sujeira, 
      col.names = c("Grafia", "Qtd. Registros"),
      caption = "Exemplo de inconsistência: Variações de grafia para o mesmo bairro") %>%
  kable_styling(full_width = TRUE, position = "left")
Exemplo de inconsistência: Variações de grafia para o mesmo bairro
Grafia Qtd. Registros
NOSSA SENHORA APARECIDA 614
N S APARECIDA 252
NS APARECIDA 246
NOSSA SENHORA APAREC 243
N SRA APARECIDA 89

Isso se repete para vários outros bairros e essas inconsistências dificultam análises precisas por bairro, já que o mesmo local pode estar registrado de formas diferentes.

Limpeza da coluna bairro

Para corrigir essas inconsistências, é necessário um algoritmo de limpeza que padroniza os nomes dos bairros, corrigindo erros de digitação, abreviações e caracteres especiais.

# Padronização básica e correção utilizando case_when para padronizar nomes de bairros
dados_pe <- dados_pe %>%
  mutate(
    # Padronização inicial
    bairro = str_to_upper(bairro), # Converte para maiúsculas
    bairro = str_squish(bairro), # Remove espaços extras em qualquer lugar
    
    # Correção principal
    bairro = case_when(
      bairro %in% c("N S APARECIDA", "NS APARECIDA", "NOSSA SENHORA APAREC", "N SRA APARECIDA") ~ "NOSSA SENHORA APARECIDA",
      bairro == "IMBIRIRBEIRA" ~ "IMBIRIBEIRA",
      bairro == "PEIXINHOS." ~ "PEIXINHOS",
      bairro %in% c("SANTO ANTÃ\u0094NIO", "SANTO ANTÂNIO") ~ "SANTO ANTONIO",
      str_detect(bairro, "DISTRITO INDUSTRIAL") ~ "DISTRITO INDUSTRIAL",
      str_detect(bairro, "D. I. ") ~ "DISTRITO INDUSTRIAL",
      str_detect(bairro, "DIST IND") ~ "DISTRITO INDUSTRIAL",
      is.na(bairro) ~ "DESCONHECIDO",
      bairro == "HELIÃ\u0093POLIS" ~ "HELIOPOLIS",
      bairro == "UNIVERSITÃ\u0081RIO" ~ "UNIVERSITARIO",
      bairro == "JOSÃ\u0089 E MARIA" ~ "JOSE E MARIA",
      bairro == "SÃ\u0083O JOSÃ\u0089" ~ "SAO JOSE",
      bairro == "SÃ\u0083O CRISTOVÃ\u0083O" ~ "SAO CRISTOVAO",
      bairro == "TORRES GALVÃ\u0083O" ~ "TORRES GALVAO",
      bairro == "N S DA PENHA" ~ "NOSSA SENHORA DA PENHA",
      bairro %in% c("N S DAS GRACAS", "N. S. DAS GRACAS") ~ "NOSSA SENHORA DAS GRACAS",
      bairro == "N. SRª DA CONCEIÃ\u0087Ã\u0083O" ~ "NOSSA SENHORA DA CONCEICAO",
      bairro == "NOSSA SENHORA DA DORES" ~ "NOSSA SENHORA DAS DORES",
      bairro == "BOA VISTA I" ~ "BOA VISTA",
      bairro == "SANTA TEREZA - 1" ~ "SANTA TEREZA",
      bairro %in% c("T TORITAMA/CARUARU", "KM 02", "LADO DIREITO", "CABO", "RECIFE") ~ "NAO INFORMADO",
      bairro == "NOVO" ~ "BAIRRO NOVO",
      bairro == "BOMBA" ~ "BOMBA DO HEMETERIO",
      # Se o nome não se encaixa em nenhuma regra acima, mantém o original
      TRUE ~ bairro
    )
  )

Após a limpeza total dos dados, é necessário fazer uma última verificação, pra saber se os dados foram limpos corretamente e verificar se ainda falta algo a ser corrigido. Pra isso, abaixo estão exibidas as primeiras 200 linhas do conjunto de dados final.

# A função head(dados_pe, 200) pega apenas as 200 primeiras linhas
datatable(head(dados_pe, 200),
          options = list(
            pageLength = 10,
            autoWidth = TRUE  
          ),
          caption = "Visualização dos Dados Limpos")

Descrição dos dados limpos

Após a limpeza e padronização dos dados, o dataset final contém informações mais confiáveis sobre os preços dos combustíveis em Pernambuco. Abaixo estão algumas descrições relevantes sobre esse novo conjunto de dados.

O conjunto de dados contém um total de 78539 observações distribuídas em 8 variáveis. A dimensão temporal da análise abrange o período de 02/01/2023 até 30/06/2025.

Geograficamente, os dados cobrem 18 municípios pernambucanos. Uma das variáveis de maior interesse é valor_de_venda (numérica), que será analisada principalmente em função da categoria produto (tipo de combustível), o campo bandeira (distribuidora) também será relevante pra as análises.

# Resumo das variáveis de interesse
resumo_variaveis <- data.frame(
  Variavel = c("estado_sigla", "municipio", "bairro", 
               "revenda", "produto", "data_da_coleta", "valor_de_venda", "bandeira"),
  
  Tipo_Dado = c("Texto", "Texto", "Texto", 
                "Texto", "Categórico (Fator)", "Data", "Numérico", "Texto"),
  
  Descricao = c(
    "Sigla da unidade federativa (Filtrado apenas para 'PE').",
    "Nome oficial do município onde o posto está localizado.",
    "Nome do bairro onde o posto está localizado.",
    "Razão social ou nome fantasia do posto de combustível onde houve a coleta do dado.",
    "Tipo de combustível analisado (6 níveis, tipos de combustível, definidos).",
    "Data em que o preço foi verificado pela ANP.",
    "Preço de venda ao consumidor final (R$).",
    "Marca da distribuidora (ex: Vibra (postos BR/Petrobras), Raízen (postos Shell), Branca)."
  )
)

# Gerar a tabela formatada
kable(resumo_variaveis, 
      col.names = c("Variável", "Tipo", "Descrição"),
      caption = "Resumo das Variáveis de Interesse") %>%
  kable_styling(full_width = TRUE, 
                bootstrap_options = c("striped", "hover", "condensed"))
Resumo das Variáveis de Interesse
Variável Tipo Descrição
estado_sigla Texto Sigla da unidade federativa (Filtrado apenas para ‘PE’).
municipio Texto Nome oficial do município onde o posto está localizado.
bairro Texto Nome do bairro onde o posto está localizado.
revenda Texto Razão social ou nome fantasia do posto de combustível onde houve a coleta do dado.
produto Categórico (Fator) Tipo de combustível analisado (6 níveis, tipos de combustível, definidos).
data_da_coleta Data Data em que o preço foi verificado pela ANP.
valor_de_venda Numérico Preço de venda ao consumidor final (R$).
bandeira Texto Marca da distribuidora (ex: Vibra (postos BR/Petrobras), Raízen (postos Shell), Branca).

Análise exploratória dos Dados

Evolução Temporal

Nesta subseção, é analisada a evolução e variação dos preços dos combustíveis ao longo do tempo observado (2023 - 2025), identificando tendências e sazonalidades.

Nota: Todos os gráficos exibidos consideram o Valor de Venda (preço na bomba) em Reais (R$).

# Preparar os dados (Agrupamento diário)
dados_temporal <- dados_pe %>%
  group_by(data_da_coleta, produto) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop")

# Gerar o Gráfico de Linhas
ggplot(dados_temporal, aes(x = data_da_coleta, y = preco_medio, color = produto)) +
  geom_line(linewidth = 1) + 
  geom_point(alpha = 0.3, size = 1) +
  
  # Cores personalizadas para facilitar a distinção
  scale_color_manual(values = c("GASOLINA" = "#8a2c22",       # Vermelho 
                                "GASOLINA ADITIVADA" = "#27ae60", # Vede
                                "ETANOL" = "#af3ef0",         # Lilás
                                "DIESEL S10" = "#222585",     # Azul
                                "DIESEL" = "#f39c12",         # Amarelo
                                "GNV" = "#4b5152")) +         # Cinza
  
  labs(title = "Evolução do Preço dos Combustíveis (2023-2025)",
       subtitle = "Preço médio diário em Pernambuco",
       x = "Data", y = "Preço Médio (R$)", color = "Combustível") +
  theme_minimal() +
  theme(legend.position = "bottom")

Percebe-se que o combustível que se manteve com a menor média de preço foi o Gás Natural Veicular (GNV). A Gasolina e o Etanol apresentam correlação visual: quando um sobe, o outro tende a acompanhar, porém, o Etanol se mantem em uma média de preço menor que a da Gasolina e do Diesel.

Comparativo Geográfico por Município

Ranking de Preços por Município

Para fazer um comparativo de preço dos combustíveis mais comuns entre os municípios do estado, abaixo são exibidos informações referentes às médias de preços da Gasolina, do Diesel e do Etanol, nos 15 municípios com os maiores preços de cada um desses combustíveis. Isso ajuda a identificar se há concentração de preços altos em regiões específicas.

Gasolina

# Filtrar Gasolina e calcular média por município
ranking_cidades <- dados_pe %>%
  filter(produto == "GASOLINA") %>%
  group_by(municipio) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE)) %>%
  arrange(desc(preco_medio)) %>%
  slice(1:15) # Pega apenas os 15 primeiros (mais caros)

# Gráfico de Barras (Invertido para ler os nomes)
ggplot(ranking_cidades, aes(x = reorder(municipio, preco_medio), y = preco_medio)) +
  geom_col(fill = "#34495e", width = 0.7) + # Barras azuis sóbrias
  
  # Adiciona o rótulo de preço na ponta da barra
  geom_text(aes(label = round(preco_medio, 2)), hjust = -0.1, size = 3.5) +
  
  coord_flip() + # Inverte para ficar horizontal
  labs(title = "Ranking: Onde a Gasolina é mais cara?",
       subtitle = "Top 15 Municípios com maior preço médio (Jan/23 - Jun/25)",
       x = "Município", y = "Preço Médio (R$)") +
  theme_minimal()


Diesel

# Filtrar Diesel e calcular média por município
ranking_cidades <- dados_pe %>%
  filter(produto == "DIESEL") %>%
  group_by(municipio) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE)) %>%
  arrange(desc(preco_medio)) %>%
  slice(1:15) # Pega apenas os 15 primeiros (mais caros)

# Gráfico de Barras (Invertido para ler os nomes)
ggplot(ranking_cidades, aes(x = reorder(municipio, preco_medio), y = preco_medio)) +
  geom_col(fill = "#34495e", width = 0.7) + # Barras azuis sóbrias
  
  # Adiciona o rótulo de preço na ponta da barra
  geom_text(aes(label = round(preco_medio, 2)), hjust = -0.1, size = 3.5) +
  
  coord_flip() + # Inverte para ficar horizontal
  labs(title = "Ranking: Onde o Diesel é mais caro?",
       subtitle = "Top 15 Municípios com maior preço médio (Jan/23 - Jun/25)",
       x = "Município", y = "Preço Médio (R$)") +
  theme_minimal()


Etanol

# Filtrar Diesel e calcular média por município
ranking_cidades <- dados_pe %>%
  filter(produto == "ETANOL") %>%
  group_by(municipio) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE)) %>%
  arrange(desc(preco_medio)) %>%
  slice(1:15) # Pega apenas os 15 primeiros (mais caros)

# Gráfico de Barras (Invertido para ler os nomes)
ggplot(ranking_cidades, aes(x = reorder(municipio, preco_medio), y = preco_medio)) +
  geom_col(fill = "#34495e", width = 0.7) + # Barras azuis sóbrias
  
  # Adiciona o rótulo de preço na ponta da barra
  geom_text(aes(label = round(preco_medio, 2)), hjust = -0.1, size = 3.5) +
  
  coord_flip() + # Inverte para ficar horizontal
  labs(title = "Ranking: Onde o Etanol é mais caro?",
       subtitle = "Top 15 Municípios com maior preço médio (Jan/23 - Jun/25)",
       x = "Município", y = "Preço Médio (R$)") +
  theme_minimal()


É possível observar que, em todos os três tipos de combustíveis analisados nos gráficos acima, o município de Petrolina aparece consistentemente entre os 5 municípios com os preços mais altos, assim como outras cidades do interior de Pernambuco. Outros municípios que também se destacam com preços elevados incluem Araripina, Serra Talhada e Salgueiro, todos localizados na região do Sertão Pernambucano.

Comparativo Geral entre Municípios

Além disso, para uma visão mais abrangente, é importante comparar os 5 municípios com os combustíveis mais caros para cada tipo de combustível em um único gráfico facetado. O gráfico abaixo exibe essas informações:

# Preparar os dados: Média por Cidade e Produto
ranking_geral <- dados_pe %>%
  group_by(produto, municipio) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop") %>%
  
  # Pegar apenas os 5 mais caros de cada combustível
  group_by(produto) %>%
  slice_max(order_by = preco_medio, n = 5) %>% 
  ungroup()

# Gerar o Gráfico Facetado
ggplot(ranking_geral, aes(x = reorder_within(municipio, preco_medio, produto), 
                          y = preco_medio, 
                          fill = produto)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = round(preco_medio, 2)), hjust = 1.1, color = "white", size = 3) +
  
  # Um gráfico separado para cada produto
  facet_wrap(~produto, scales = "free", ncol = 2) +
  coord_flip() +
  
  # Ajuste para o reorder_within funcionar com facetas
  scale_x_reordered() +
  
  # Cores diferentes para cada combustível
  scale_fill_manual(values = c("GASOLINA" = "#8a2c22",       # Vermelho 
                                "GASOLINA ADITIVADA" = "#27ae60", # Vede
                                "ETANOL" = "#af3ef0",         # Lilás
                                "DIESEL S10" = "#222585",     # Azul
                                "DIESEL" = "#f39c12",         # Amarelo
                                "GNV" = "#4b5152")) +         # Cinza
  
  labs(title = "Top 5 Municípios Mais Caros por Tipo de Combustível",
       subtitle = "Comparativo de preço médio (Jan/23 - Jun/25)",
       x = NULL, y = "Preço Médio (R$)") +
  theme_minimal()

Percebe-se que o município de Petrolina aparece com os maiores preços em quase todos os tipos de combustíveis, só não ficando em primeiro lugar no preço do GNV. Isso se deve, principalmente, à localização geográfica da cidade, sendo umas das últimas cidades da fronteira de Pernambuco, o que dificulta a logística de distribuição e aumenta os custos de transporte dos combustíveis, encarecendo os preços. É perceptível também que as cidadades com os maiores preços tendem a ser cidades mais localizadas no interior do estado, revelando uma média de preço mais elevado nessa região, justificado, muito provavelmente, pelos mesmos motivos citados no caso de Petrolina.


Região Metropolitana vs Interior

Outro ponto interssante a se analisar é a diferença de preço da Gasolina entre os municípios da região metropolitana do estado e do interior. Abaixo está o gráfico que compara os preços médios da Gasolina entre os municípios da Região Metropolitana do Recife (RMR) e os municípios do interior de Pernambuco.

# Lista simplificada da Região Metropolitana do Recife (RMR)
municipios_rmr <- c("RECIFE", "JABOATAO DOS GUARARAPES", "OLINDA", "PAULISTA", 
                    "CABO DE SANTO AGOSTINHO", "CAMARAGIBE", "IGARASSU", 
                    "SAO LOURENCO DA MATA", "ABREU E LIMA", "IPOJUCA", "MORENO", 
                    "ITAPISSUMA", "ILHA DE ITAMARACA", "ARACOIABA")

# Classificar e Calcular Média
dados_regionais <- dados_pe %>%
  filter(produto == "GASOLINA") %>%
  mutate(regiao = if_else(municipio %in% municipios_rmr, "Grande Recife (RMR)", "Interior do Estado")) %>%
  group_by(regiao) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE))

# Gráfico Comparativo
ggplot(dados_regionais, aes(x = regiao, y = preco_medio, fill = regiao)) +
  geom_col(width = 0.5, show.legend = FALSE) +
  
  # Rótulo com valor
  geom_text(aes(label = paste("R$", round(preco_medio, 2))), vjust = -0.5, fontface = "bold") +
  
  scale_y_continuous(limits = c(0, max(dados_regionais$preco_medio) * 1.1)) + # Dá espaço para o texto
  scale_fill_manual(values = c("Grande Recife (RMR)" = "#2980b9", "Interior do Estado" = "#e67e22")) +
  
  labs(title = "Custo Geográfico: Capital vs. Interior",
       subtitle = "Preço médio histórico da Gasolina Comum (2023-2025)",
       x = NULL, y = "Preço Médio (R$)") +
  theme_minimal()

Os dados confirmam a hipótese de que a localização geográfica influencia o preço final, evidenciando o chamado “Custo Logístico”. O preço médio da gasolina no Interior (5,86 reais) apresentou-se superior ao da Grande Recife (5,79 reais).

Essa diferença de aproximadamente 1,2% (ou 0,07 reais por litro) pode ser atribuída a dois fatores principais:

  • Frete: A necessidade de transportar o combustível do porto de Suape (litoral) para o interior encarece o produto final.

  • Competitividade: A maior concentração de postos na região metropolitana tende a estimular uma concorrência mais agressiva, pressionando os preços para baixo.

Comparativo de Combustíveis

Uma dúvida comum entre os consumidores é qual combustível escolher. Muitos motoristas buscam diminuir o custo mensal do abastecimento de seus veículos, e pra saber quais os combustíveis se mantém em preços mais baixos ao longo do tempo, é preciso comparar as médias de preços deles.

Gasolina vs Etanol

O gráfico abaixo compara os preços médios da Gasolina e da Gasolina Aditivada com o Etanol ao longo do tempo observado.

# Filtrar apenas os combustíveis de interesse
comparativo_combustiveis <- dados_pe %>%
  filter(produto %in% c("GASOLINA", "GASOLINA ADITIVADA", "ETANOL")) %>%
  group_by(data_da_coleta, produto) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop")

# Gerar o gráfico de linhas
ggplot(comparativo_combustiveis, aes(x = data_da_coleta, y = preco_medio, color = produto)) +
  geom_line(linewidth = 1) +
  
  # Cores personalizadas
  scale_color_manual(values = c("GASOLINA" = "#8a2c22",       # Vermelho
                                "GASOLINA ADITIVADA" = "#e74c3c", # Vermelho Claro
                                "ETANOL" = "#27ae60")) +      # Verde
  
  labs(title = "Disputa de Preços: Gasolina vs. Etanol",
       subtitle = "Comparação da média diária em Pernambuco (2023-2025)",
       x = "Data", 
       y = "Preço Médio (R$)", 
       color = NULL) +
  theme_minimal() +
  theme(legend.position = "top")

Percebe-se, que, apesar de os preços dos três combustíveis variarem de forma diretamente proporcional, o preço do Etanol se mantem em uma média menor que o da Gasolina e da Gasolina Aditivada. Porém, para se ter certeza se o Etanol, de fato, vale mais a pena do que a Gasolina, é importante verificar uma regra popular muito usada por vários motoristas, a “regra dos 70%”, usada principalmente por motoristas de carros flex (veículos que podem ser abastecidos com etanol ou com gasolina) pra verificar a viabilidade financeira do Etanol. O gráfico abaixo exibe a razão entre o preço do Etanol e o da Gasolina, no período observado.

# Preparar os dados: Pivotar para ter colunas lado a lado
dados_razao <- dados_pe %>%
  filter(produto %in% c("GASOLINA", "ETANOL")) %>%
  group_by(data_da_coleta, produto) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = produto, values_from = preco_medio) %>%
  
  # Calcular a Razão
  mutate(razao = ETANOL / GASOLINA) %>%
  drop_na() # Remove dias sem dados de um dos dois

# Gerar Gráfico
ggplot(dados_razao, aes(x = data_da_coleta, y = razao)) +
  # Linha da Razão
  geom_line(color = "#2c3e50", linewidth = 1) +
  
  # Linha de Referência (0.7) - O "Ponto de Virada"
  geom_hline(yintercept = 0.7, linetype = "dashed", color = "#e74c3c", linewidth = 0.8) +
  
  # Preencher áreas para facilitar leitura visual
  # (Se estiver abaixo da linha vermelha, compensa Etanol)
  annotate("text", x = min(dados_razao$data_da_coleta), y = 0.65, 
           label = "Compensa Etanol", color = "#27ae60", hjust = 0, fontface = "bold") +
  annotate("text", x = min(dados_razao$data_da_coleta), y = 0.75, 
           label = "Compensa Gasolina", color = "#c0392b", hjust = 0, fontface = "bold") +
  
  labs(title = "Vale a pena o Etanol?",
       subtitle = "Razão de Preço (Etanol / Gasolina). Abaixo da linha tracejada (0.70), o Etanol é vantajoso.",
       x = "Data", y = "Razão (Preço Etanol / Preço Gasolina)") +
  theme_minimal()

O gráfico acima mostra que, durante o período analisado, a razão entre o preço do Etanol e o preço da Gasolina se manteve, na maior parte do tempo, acima de 0.7 (70%), indicando que, financeiramente, a Gasolina é a opção mais vantajosa para os motoristas de veículos flex no estado de Pernambuco, apesar da média do preço do Etanol ser menor que o da Gasolina.

Gasolina vs Diesel

Outro comparativo interessante é entre a Gasolina e o Diesel, visto que ambos são combustíveis muito utilizados em veículos leves e pesados, respectivamente. O gráfico abaixo exibe a comparação dos preços médios desses dois combustíveis ao longo do tempo observado.

# Filtrar apenas os combustíveis de interesse
comparativo_combustiveis <- dados_pe %>%
  filter(produto %in% c("GASOLINA", "DIESEL")) %>%
  group_by(data_da_coleta, produto) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop")

# Gerar o gráfico de linhas
ggplot(comparativo_combustiveis, aes(x = data_da_coleta, y = preco_medio, color = produto)) +
  geom_line(linewidth = 1) +
  
  # Cores personalizadas
  scale_color_manual(values = c("GASOLINA" = "#8a2c22",       # Vermelho
                                "DIESEL" = "#f39c12")) +      # Amarelo
  
  labs(title = "Disputa de Preços: Gasolina vs. Diesel",
       subtitle = "Comparação da média diária em Pernambuco (2023-2025)",
       x = "Data", 
       y = "Preço Médio (R$)", 
       color = NULL) +
  theme_minimal() +
  theme(legend.position = "top")

A análise da série histórica (2023-2025) evidencia um cenário de inversão de valor consolidado no mercado:

  1. Diesel S10 como o Combustível Mais Caro: Historicamente conhecido por ser mais barato, o Diesel (linha amarela) manteve-se durante vários momentos em um patamar de preço superior ao da Gasolina Comum (linha vermelha) durante todo o período analisado, apesar de em 2024 o preço desses dois combustíveis se equiparar .
  2. Impacto Econômico: Essa sustentação do preço do Diesel em níveis elevados indica uma pressão contínua sobre o custo logístico e de fretes no estado, o que tende a gerar impacto inflacionário em outros setores da economia.
  3. Volatilidade: Também é possível perceber que a Gasolina apresenta oscilações mais frequentes e agudas, enquanto o Diesel demonstra uma tendência de preços mais rígida e menos elástica a reduções de curto prazo.
Gasolina vs GNV

Por fim, um comparativo interessante é entre a Gasolina e o GNV, visto que muitos motoristas optam pelo GNV, como uma forma de reduzir os custos com combustíveis, apesar da diminuição da potência do motor do carro e da perda de espaço na mala, já que muitas vezes é onde o tanque do gás é instalado.

# Filtrar apenas os combustíveis de interesse
comparativo_combustiveis <- dados_pe %>%
  filter(produto %in% c("GASOLINA", "GNV")) %>%
  group_by(data_da_coleta, produto) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop")

# Gerar o gráfico de linhas
ggplot(comparativo_combustiveis, aes(x = data_da_coleta, y = preco_medio, color = produto)) +
  geom_line(linewidth = 1) +
  
  # Cores personalizadas
  scale_color_manual(values = c("GASOLINA" = "#8a2c22",       # Vermelho
                                "GNV" = "#4b5152")) +      # Cinza
  
  labs(title = "Disputa de Preços: Gasolina vs. GNV",
       subtitle = "Comparação da média diária em Pernambuco (2023-2025)",
       x = "Data", 
       y = "Preço Médio (R$)", 
       color = NULL) +
  theme_minimal() +
  theme(legend.position = "top")

Nota-se que, de fato, o GNV se mantém com um preço médio significativamente menor que o da Gasolina ao longo de todo o período analisado, reforçando a ideia de que o GNV é uma alternativa econômica para muitos motoristas, mesmo com as desvantagens de perda de potência e de espaço na mala.

Onde É mais caro no Recife?

Pra saber, dentro da cidade do Recife, onde a gasolina é mais cara e onde é mais barata, é necessário fazer uma análise por bairro e por bandeira dos postos.

Comparativo por Bairro

Dentro do Recife, quais os bairros que possuem a gasolina mais cara e os que possuem a gasolina mais barata? No gráfico abaixo são exibidos os 10 bairros do Recife onde se encontra a gasolina mais cara e os 10 onde esse combustível é mais barato.

# Preparar os dados: Filtrar Recife e Gasolina
bairros_recife <- dados_pe %>%
  filter(municipio == "RECIFE", produto == "GASOLINA") %>%
  group_by(bairro) %>%
  summarise(
    preco_medio = mean(valor_de_venda, na.rm = TRUE),
    qtd_postos = n() # Contagem de quantos postos tem pra não pegar bairro com 1 só posto
  ) %>%
  filter(qtd_postos > 5) %>% # Seleciona somente bairros com dados consistentes
  arrange(desc(preco_medio))

# Selecionar os Extremos (Top 10 Caros e Top 10 Baratos)
top_caros <- head(bairros_recife, 10) %>% mutate(tipo = "Mais Caros")
top_baratos <- tail(bairros_recife, 10) %>% mutate(tipo = "Mais Baratos")

# Juntar os dois grupos para o gráfico
extremos_recife <- bind_rows(top_caros, top_baratos)

# Gerar o Gráfico de Barras
ggplot(extremos_recife, aes(x = reorder(bairro, preco_medio), y = preco_medio, fill = tipo)) +
  geom_col() +
  coord_flip() + # Deita o gráfico para ler os nomes
  
  # Rótulo de preço na ponta
  geom_text(aes(label = round(preco_medio, 2)), hjust = -0.1, size = 3) +
  
  scale_fill_manual(values = c("Mais Caros" = "#c0392b", "Mais Baratos" = "#27ae60")) +
  
  labs(title = "Disparidade no Recife: Bairros Mais Caros vs. Baratos",
       subtitle = "Preço médio da Gasolina Comum (Apenas bairros com +5 coletas)",
       x = NULL, 
       y = "Preço Médio (R$)", 
       fill = NULL) +
  theme_minimal()

O gráfico acima revela uma disparidade significativa nos preços da gasolina entre os bairros do Recife. Enquanto bairros como Boa Viagem, Apipucos e Rosarinho estão entre os bairros com o preço médio da gasolina mais elevados, bairros como Ipsep, Tejipio e Bairro do Recife oferecem preços consideravelmente mais baixos. Porém, o gráfico também revela alguns dados que contrariam o senso comum, já que que alguns bairros que possuem custo de vida mais elevado, como o bairro de Casa Forte e o bairro do Espinheiro estão entre os bairros com a gasolina mais barata, enquanto que bairros de menor custo de vida como Torrões e Cordeiro estão entre os bairros com o maior preço da gasolina.

Comparativo por Bandeira

Bandeira Branca vs. Grandes Distribuidoras

Uma das decisões mais frequentes que o motorista enfrenta ao abastecer é o trade-off entre preço e confiança na marca. Existe uma percepção generalizada de que postos “Bandeira Branca” (sem vínculo exclusivo com grandes distribuidoras) praticam preços significativamente inferiores aos das grandes redes.

Para testar essa hipótese estatisticamente, os dados foram agrupados em duas categorias principais:

  1. Top 3 Marcas: Postos vinculados às líderes de mercado (Vibra(Petrobras), Raizen(Shell) e Ipiranga).
  2. Bandeira Branca: Postos independentes.

O gráfico abaixo permite visualizar não apenas a mediana de preços (a linha central), mas também a dispersão (o tamanho da caixa), revelando se o preço é consistente ou se varia muito de posto para posto.

# Categorizar Bandeiras
dados_marcas <- dados_pe %>%
  filter(produto == "GASOLINA") %>%
  mutate(categoria_marca = case_when(
    bandeira == "BRANCA" ~ "Bandeira Branca",
    
    # Principais marcas do mercado brasileiro
    bandeira %in% c("VIBRA", "VIBRA ENERGIA", "IPIRANGA", "RAIZEN") ~ "Top 3 Marcas (Vibra(Petrobras)/Raizen(Shell)/Ipiranga)",
    
    TRUE ~ "Outras Bandeiras"
  )) %>%
  filter(categoria_marca != "Outras Bandeiras")

# Boxplot Lado a Lado
ggplot(dados_marcas, aes(x = categoria_marca, y = valor_de_venda, fill = categoria_marca)) +
  geom_boxplot(alpha = 0.8, show.legend = FALSE, outlier.shape = NA) +
  
  # Adiciona a média (ponto branco) para comparar com a mediana (linha preta)
  stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "white") +
  
  scale_fill_manual(values = c("Bandeira Branca" = "#95a5a6", 
                               "Top 3 Marcas (Vibra(Petrobras)/Raizen(Shell)/Ipiranga)" = "#e74c3c")) +
  
  labs(title = "O Custo da Marca: Gasolina Comum",
       subtitle = "Comparação de preços: Postos Independentes vs. Grandes Redes",
       x = NULL, 
       y = "Preço de Venda (R$)",
       caption = "Legenda Visual: A linha preta central representa a MEDIANA.\nO losango branco representa a MÉDIA.") +
  theme_minimal() + 
  coord_cartesian(ylim = quantile(dados_marcas$valor_de_venda, c(0.01, 0.99))) # Zoom para evitar outliers

O gráfico confirma que o mercado de combustíveis opera com lógicas distintas dependendo da bandeira:

  • O Custo da Marca: Postos vinculados às grandes distribuidoras (Vibra, Raízen e Ipiranga) apresentam consistentemente medianas e médias de preço superiores.
  • Vantagem dos Independentes: Postos de bandeira branca mostram uma pequena vantagem em termos de preço, com medianas e médias inferiores.

Comparativo de preços médio

Uma informação importante de se saber também, é qual a diferença de preço médio de combustivel entre as diferentes bandeiras de postos. Isso permite ao consumidor escolher de forma mais precisa onde abastecer o veículo e diminuir os custos mensais.

# Preparar os dados
dados_matriz <- dados_pe %>%
  mutate(
    # Agrupar as bandeiras nas categorias principais
    grupo_bandeira = case_when(
      bandeira %in% c("VIBRA", "VIBRA ENERGIA") ~ "Vibra (Petrobras)",
      bandeira == "RAIZEN" ~ "Raízen (Shell)",
      bandeira == "IPIRANGA" ~ "Ipiranga",
      bandeira == "BRANCA" ~ "Bandeira Branca",
      TRUE ~ "Outras Menores"
    ),
    # Definição de uma ordem lógica para o gráfico (Grandes -> Branca -> Outras)
    grupo_bandeira = factor(grupo_bandeira, levels = c("Vibra (Petrobras)", "Raízen (Shell)", "Ipiranga", "Bandeira Branca", "Outras Menores"))
  ) %>%
  group_by(produto, grupo_bandeira) %>%
  summarise(preco_medio = mean(valor_de_venda, na.rm = TRUE), .groups = "drop")

# Gerar o gráfico heatmap 
ggplot(dados_matriz, aes(x = grupo_bandeira, y = produto, fill = preco_medio)) +
  geom_tile(color = "white") +
  
  geom_text(aes(label = sprintf("R$ %.2f", preco_medio)), color = "black", fontface = "bold", size = 3.5) +
  
  # Cores do gradiente (Red-Yellow-Green)
  # direction = -1 inverte para ficar Green-Yellow-Red (Baixo=Verde, Alto=Vermelho)
  scale_fill_distiller(palette = "RdYlGn", direction = -1) +
  
  labs(title = "Matriz de Preços: Combustível x Bandeira",
       subtitle = "Preço médio praticado por cada grupo distribuidor",
       x = NULL, y = NULL, 
       caption = "LEGENDA DE CORES:\nVerde = Menor Preço (Mais Barato)\nAmarelo = Preço Intermediário\nVermelho = Maior Preço (Mais Caro)") +
  
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 0, face = "bold"),
    axis.text.y = element_text(face = "bold"),
    legend.position = "none", # Remove a barra lateral 
    panel.grid = element_blank(), # Remove as linhas de fundo
    plot.caption = element_text(hjust = 0, face = "italic", size = 10, color = "#555555") # Legenda
  )

O gráfico acima revela três dinâmicas distintas de mercado em Pernambuco:

  1. Paridade entre as Líderes: As distribuidoras Vibra, Raízen e Ipiranga apresentam um alinhamento de preços parecido, com variações de 0,01 a 0,10 reais entre si para a Gasolina e o Etanol. Elas estabelecem o “teto” de preço do estado.
  2. O Desconto da Bandeira Branca: A maior discrepância encontra-se no Etanol e na Gasolina. Abastecer em postos independentes (Bandeira Branca) representa uma economia média de 0,17 a 0,20 reais por litro em comparação às grandes marcas.
  3. A Rigidez do Diesel: Diferentemente dos combustíveis leves, o Diesel S10 e o Diesel comum apresentam baixas variações de preço entre bandeiras. Isso indica que, no setor logístico/transporte, a sensibilidade ao preço pressiona até mesmo as grandes marcas a reduzirem suas margens para se manterem competitivas.

Conclusão

Retomada do Problema e Metodologia

Este projeto buscou mitigar a assimetria de informações no mercado de combustíveis de Pernambuco, onde a volatilidade de preços impacta diretamente o orçamento familiar e empresarial. Para isso, aplicou-se um pipeline completo de Ciência de Dados sobre registros da Série Histórica da ANP (Jan/2023 - Jun/2025). A abordagem técnica destacou-se pelo tratamento rigoroso dos dados (Data Wrangling), onde algoritmos de padronização textual foram empregados para corrigir inconsistências em milhares de registros de bairros e municípios, transformando dados brutos e “sujos” em dados “limpos” e úteis para análises.

Principais Insights

A Análise Exploratória de Dados (EDA) refutou alguns sensos comuns e confirmou dinâmicas de mercado importantes:

  1. A Geografia do Preço no Recife: Identificou-se uma clara correlação socioeconômica na capital. Bairros de alto IDH (Boa Viagem, Rosarinho, Apipucos) praticam os maiores preços, explorando a conveniência do consumidor. Em contrapartida, a Zona Oeste (Várzea, Iputinga) consolidou-se como o “cinturão da economia”, impulsionada pela alta concorrência em corredores viários. Porém, ao mesmo tempo observou-se que alguns bairros não seguiram a lógica do senso comum em relaão aos preços dos combustíveis.
  2. O Custo da Marca: Estatisticamente, postos das distribuidoras “Top 3” (Vibra/Petrobras, Raízen/Shell, Ipiranga) cobram um prêmio pela marca, ou seja, tendem a cobrar mais caro nos combustíveis por, teoricamente, oferecerem um controle de qualidade mais rigoroso. Já os postos de Bandeira Branca apresentaram não apenas medianas menores, mas uma alta dispersão de preços, indicando um mercado heterogêneo: é lá que estão as maiores possibilidades de economia pra o cidadão comum, mas também preços que rivalizam com as grandes redes, a depender da localidade.
  3. Logística Estadual: O “Custo Interior” existe, mas é moderado. A diferença média de cerca de R$ 0,07 entre a Região Metropolitana e o Sertão de Pernambuco reflete a eficiência logística, sugerindo que o frete não inviabiliza o consumo no interior, apesar de encarecer o preço final, principalmente em cidades na borda do estado como Petrolina.

Implicações para os Clientes

Com base nesses achados, recomenda-se:

  • Para Famílias: Evitar o abastecimento rotineiro em bairros nobres. Desviar a rota para grandes avenidas de trânsito rápido (como a Av. Caxangá) pode gerar economia significativa no final do mês.
  • Para Motoristas de App: Monitorar a razão Gasolina/Etanol é vital, mas a escolha do posto é ainda mais crítica. A aposta em postos de “Bandeira Branca” é válida estatisticamente, desde que o motorista filtre os estabelecimentos caros que se misturam nessa categoria.
  • Para Gestores de Frotas: A fidelidade a grandes bandeiras garante padronização, mas cobra um preço por isso. Para frotas que rodam na Região Metropolitana do Recife, contratos com redes independentes (Bandeira Branca) podem reduzir os custos mensais com abastecimento de veículos.

Limitações e Trabalhos Futuros

A principal limitação desta análise foi a ausência completa de dados na coluna Valor de Compra (100% nula nos dados originais da ANP), o que impossibilitou o cálculo das margens de lucro dos postos. Além disso, a análise geográfica limitou-se aos rótulos de texto (“Bairro”), sem coordenadas precisas de latitude/longitude para mapas de calor mais finos, além de não estar presente nas análises a quantidade de combustível abastecido diariamente nos postos, o que permitiria análises de quais os combustíveis mais escolhidos e quais são mais utilizados em cada localidade do estado de Pernambuco ou da cidade do Recife.

Para trabalhos futuros, sugere-se:

  1. Enriquecimento de Dados: Cruzar este dataset com indicadores macroeconômicos (Dólar, Preço do Barril de Petróleo) para modelar a previsão de preços futuros.
  2. Aplicação Interativa: Desenvolver um Dashboard Shiny onde o usuário possa filtrar seu próprio bairro em tempo real.
  3. Análise Espacial: Geocodificar os endereços dos postos para identificar se a proximidade física entre concorrentes (clusters) causa “guerras de preço” localizadas.

Referências

Fontes de Dados

Referencial Teórico

  • Wickham, Çetinkaya-Rundel, and Grolemund (2023)
  • Wickham et al. (2019)
  • Xie, Allaire, and Grolemund (2018)
  • Hadley (2016)
  • Team et al. (2016)

Artigos Relacionados

Hadley, Wickham. 2016. Ggplot2: Elegrant Graphics for Data Analysis. Springer.
Team, R Core et al. 2016. “R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria.” Http://Www. R-Project. Org/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. “Welcome to the Tidyverse.” Journal of Open Source Software 4 (43): 1686.
Wickham, Hadley, Mine Çetinkaya-Rundel, and Garrett Grolemund. 2023. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. " O’Reilly Media, Inc.".
Xie, Yihui, Joseph J Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Chapman; Hall/CRC.