1. Introdução

O Consumidor.gov.br é uma plataforma pública que permite a comunicação direta entre consumidores e empresas para a tentativa de solução de conflitos de consumo pela internet. A plataforma reúne registros de reclamações realizadas por consumidores contra empresas cadastradas, oferecendo uma base útil para compreender padrões de conflitos de consumo no Brasil.

Este projeto tem como objetivo analisar as reclamações registradas no Consumidor.gov.br entre os anos de 2024 e 2025. A análise busca identificar padrões relacionados à localização dos consumidores, segmentos de mercado, empresas reclamadas, tipos de problema, tempo de resposta, avaliação do consumidor e resolução das reclamações.

Nesta primeira etapa, o foco será a preparação dos dados. Serão realizadas as etapas de importação, organização, limpeza, padronização e criação de variáveis derivadas. A análise exploratória completa será desenvolvida em etapas posteriores do projeto.

2. Pacotes requeridos

Os pacotes abaixo serão utilizados para importar, limpar, transformar e resumir os dados.

library(tidyverse)
library(readr)
library(lubridate)
library(janitor)
library(stringr)
library(knitr)
library(DT)
library(jsonlite)
library(scales)

O pacote tidyverse reúne ferramentas para manipulação e organização de dados. O pacote readr é utilizado para importar arquivos CSV. O pacote lubridate permite trabalhar com datas. O pacote janitor facilita a padronização dos nomes das colunas. O pacote stringr é usado para manipulação de textos. Os pacotes knitr e DT permitem exibir tabelas no relatório. O pacote jsonlite será utilizado para acessar metadados da base no portal de dados abertos. Por fim, o pacote scales será usado para formatar percentuais.

3. Preparação dos dados

3.1 Fonte dos dados

Os dados foram obtidos no portal de dados abertos do Ministério da Justiça e Segurança Pública, no conjunto de dados “Reclamações do Consumidor.gov.br”:

https://dados.mj.gov.br/dataset/reclamacoes-do-consumidor-gov-br

O conjunto contém reclamações registradas por consumidores na plataforma Consumidor.gov.br. Cada linha representa uma reclamação e as colunas descrevem informações como localização do consumidor, empresa reclamada, segmento de mercado, assunto, problema, data de abertura, tempo de resposta, situação da reclamação e avaliação do consumidor.

3.2 Importação dos dados

O código abaixo acessa a API do portal de dados, identifica os arquivos CSV de 2024 e 2025 e importa automaticamente esses dados.

Caso a API não funcione no momento da execução, também é possível baixar manualmente os arquivos CSV do portal e colocá-los em uma pasta chamada dados. O código tentará primeiro buscar arquivos locais nessa pasta. Se não encontrar, buscará os arquivos diretamente no portal.

url_api <- "https://dados.mj.gov.br/api/3/action/package_show?id=reclamacoes-do-consumidor-gov-br"

ler_csv_consumidor <- function(caminho_ou_url) {
  read_delim(
    file = caminho_ou_url,
    delim = ";",
    locale = locale(encoding = "UTF-8"),
    col_types = cols(.default = col_character()),
    na = c("", "NA", "N/A", "NULL", "null")
  )
}

# Opção 1: buscar arquivos CSV salvos localmente em uma pasta chamada "dados"
arquivos_locais <- list.files(
  path = "dados",
  pattern = "\\.csv$",
  full.names = TRUE
)

arquivos_locais_2024_2025 <- arquivos_locais[
  str_detect(arquivos_locais, "2024|2025")
]

if (length(arquivos_locais_2024_2025) > 0) {
  
  dados_brutos <- arquivos_locais_2024_2025 %>%
    map_dfr(
      ~ ler_csv_consumidor(.x) %>%
        mutate(arquivo_origem = basename(.x))
    )
  
} else {
  
  # Opção 2: importar os arquivos diretamente do portal de dados
  metadados <- fromJSON(url_api)
  
  recursos <- metadados$result$resources %>%
    as_tibble()
  
  recursos_2024_2025 <- recursos %>%
    filter(
      str_detect(name, "2024|2025") |
        str_detect(url, "2024|2025")
    ) %>%
    filter(str_detect(tolower(format), "csv") | str_detect(tolower(url), "\\.csv"))
  
  urls_2024_2025 <- recursos_2024_2025$url
  
  dados_brutos <- map_dfr(
    urls_2024_2025,
    ~ ler_csv_consumidor(.x) %>%
      mutate(arquivo_origem = .x)
  )
}

dim(dados_brutos)
## [1] 4064095      33

Após a importação, o objeto dados_brutos contém a junção dos arquivos disponíveis para os anos de 2024 e 2025.

names(dados_brutos)
##  [1] "Gestor"                        "Canal de Origem"              
##  [3] "Região"                        "UF"                           
##  [5] "Cidade"                        "Sexo"                         
##  [7] "Faixa Etária"                  "Ano Abertura"                 
##  [9] "Mês Abertura"                  "Data Abertura"                
## [11] "Data Resposta"                 "Data Análise"                 
## [13] "Data Recusa"                   "Data Finalização"             
## [15] "Prazo Resposta"                "Prazo Analise Gestor"         
## [17] "Tempo Resposta"                "Nome Fantasia"                
## [19] "Segmento de Mercado"           "Área"                         
## [21] "Assunto"                       "Grupo Problema"               
## [23] "Problema"                      "Como Comprou Contratou"       
## [25] "Procurou Empresa"              "Respondida"                   
## [27] "Situação"                      "Avaliação Reclamação"         
## [29] "Nota do Consumidor"            "Análise da Recusa"            
## [31] "arquivo_origem"                "Interação com Judiciario"     
## [33] "Último Complemento Consumidor"

3.3 Padronização dos nomes das variáveis

Os nomes originais das colunas possuem acentos, espaços e letras maiúsculas. Para facilitar a manipulação dos dados, os nomes foram padronizados com a função clean_names().

dados <- dados_brutos %>%
  clean_names()

names(dados)
##  [1] "gestor"                        "canal_de_origem"              
##  [3] "regiao"                        "uf"                           
##  [5] "cidade"                        "sexo"                         
##  [7] "faixa_etaria"                  "ano_abertura"                 
##  [9] "mes_abertura"                  "data_abertura"                
## [11] "data_resposta"                 "data_analise"                 
## [13] "data_recusa"                   "data_finalizacao"             
## [15] "prazo_resposta"                "prazo_analise_gestor"         
## [17] "tempo_resposta"                "nome_fantasia"                
## [19] "segmento_de_mercado"           "area"                         
## [21] "assunto"                       "grupo_problema"               
## [23] "problema"                      "como_comprou_contratou"       
## [25] "procurou_empresa"              "respondida"                   
## [27] "situacao"                      "avaliacao_reclamacao"         
## [29] "nota_do_consumidor"            "analise_da_recusa"            
## [31] "arquivo_origem"                "interacao_com_judiciario"     
## [33] "ultimo_complemento_consumidor"

Essa etapa transforma, por exemplo, Data Abertura em data_abertura, Nome Fantasia em nome_fantasia e Nota do Consumidor em nota_do_consumidor.

3.4 Seleção das variáveis de interesse

Nem todas as variáveis disponíveis serão utilizadas nesta análise. Foram selecionadas as variáveis mais relevantes para compreender o perfil das reclamações, sua distribuição geográfica, os segmentos de mercado, os problemas relatados e os indicadores de resposta e avaliação.

dados <- dados %>%
  select(
    arquivo_origem,
    gestor,
    canal_de_origem,
    regiao,
    uf,
    cidade,
    sexo,
    faixa_etaria,
    ano_abertura,
    mes_abertura,
    data_abertura,
    data_resposta,
    data_analise,
    data_recusa,
    data_finalizacao,
    prazo_resposta,
    prazo_analise_gestor,
    tempo_resposta,
    nome_fantasia,
    segmento_de_mercado,
    area,
    assunto,
    grupo_problema,
    problema,
    como_comprou_contratou,
    procurou_empresa,
    respondida,
    situacao,
    avaliacao_reclamacao,
    nota_do_consumidor,
    analise_da_recusa
  )

3.5 Conversão de tipos de dados

Na base original, algumas variáveis numéricas e de data podem ser importadas como texto. Por isso, foram realizadas conversões para os tipos adequados.

dados <- dados %>%
  mutate(
    ano_abertura = as.integer(ano_abertura),
    mes_abertura = as.integer(mes_abertura),
    
    data_abertura = dmy(data_abertura),
    data_resposta = dmy(data_resposta),
    data_analise = dmy(data_analise),
    data_recusa = dmy(data_recusa),
    data_finalizacao = ymd(data_finalizacao),
    
    prazo_analise_gestor = as.numeric(prazo_analise_gestor),
    tempo_resposta = as.numeric(tempo_resposta),
    nota_do_consumidor = as.numeric(nota_do_consumidor)
  )

As datas foram convertidas para permitir análises temporais posteriores. As variáveis tempo_resposta, prazo_analise_gestor e nota_do_consumidor foram convertidas para formato numérico para permitir cálculos estatísticos.

3.6 Padronização das variáveis textuais

As variáveis categóricas foram padronizadas para reduzir inconsistências causadas por espaços extras e diferenças de capitalização.

dados <- dados %>%
  mutate(
    across(
      where(is.character),
      ~ str_squish(.x)
    ),
    across(
      c(
        regiao,
        uf,
        cidade,
        sexo,
        faixa_etaria,
        canal_de_origem,
        nome_fantasia,
        segmento_de_mercado,
        area,
        assunto,
        grupo_problema,
        problema,
        como_comprou_contratou,
        procurou_empresa,
        respondida,
        situacao,
        avaliacao_reclamacao,
        analise_da_recusa
      ),
      ~ str_to_sentence(.x)
    ),
    uf = str_to_upper(uf),
    regiao = str_to_upper(regiao),
    respondida = str_to_upper(respondida),
    procurou_empresa = str_to_upper(procurou_empresa)
  )

3.7 Filtragem dos anos de interesse

Como o objetivo do projeto é analisar as reclamações entre 2024 e 2025, foram mantidos apenas os registros cuja data de abertura pertence a esse período.

dados <- dados %>%
  mutate(
    ano = year(data_abertura),
    mes = month(data_abertura),
    mes_nome = month(data_abertura, label = TRUE, abbr = FALSE)
  ) %>%
  filter(ano %in% c(2024, 2025))

3.8 Tratamento de valores ausentes

Antes de remover ou substituir valores ausentes, é importante verificar em quais variáveis eles aparecem com maior frequência.

resumo_ausentes <- dados %>%
  summarise(across(everything(), ~ sum(is.na(.)))) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variavel",
    values_to = "valores_ausentes"
  ) %>%
  mutate(
    percentual_ausente = valores_ausentes / nrow(dados)
  ) %>%
  arrange(desc(valores_ausentes))

resumo_ausentes %>%
  slice_head(n = 15) %>%
  mutate(percentual_ausente = percent(percentual_ausente, accuracy = 0.1)) %>%
  kable(
    caption = "Variáveis com maior quantidade de valores ausentes"
  )
Variáveis com maior quantidade de valores ausentes
variavel valores_ausentes percentual_ausente
prazo_analise_gestor 3509998 88.1%
data_analise 3509945 88.1%
analise_da_recusa 3460132 86.9%
data_recusa 3459655 86.9%
nota_do_consumidor 2682184 67.3%
data_resposta 505518 12.7%
tempo_resposta 505518 12.7%
avaliacao_reclamacao 413585 10.4%
sexo 89 0.0%
arquivo_origem 0 0.0%
gestor 0 0.0%
canal_de_origem 0 0.0%
regiao 0 0.0%
uf 0 0.0%
cidade 0 0.0%

Algumas ausências são esperadas. Por exemplo, a ausência de nota_do_consumidor pode indicar que a reclamação ainda não foi avaliada pelo consumidor ou foi finalizada sem avaliação. Por isso, essas observações serão mantidas na base.

dados <- dados %>%
  mutate(
    avaliacao_reclamacao = replace_na(avaliacao_reclamacao, "Não avaliada"),
    situacao = replace_na(situacao, "Sem informação"),
    analise_da_recusa = replace_na(analise_da_recusa, "Sem recusa"),
    cidade = replace_na(cidade, "Não informada"),
    sexo = replace_na(sexo, "Não informado"),
    faixa_etaria = replace_na(faixa_etaria, "Não informada")
  )

3.9 Criação de novas variáveis

Foram criadas variáveis derivadas para facilitar a análise exploratória posterior.

dados_limpos <- dados %>%
  mutate(
    resposta_binaria = case_when(
      respondida == "S" ~ "Respondida",
      respondida == "N" ~ "Não respondida",
      TRUE ~ "Sem informação"
    ),
    
    procurou_empresa_binaria = case_when(
      procurou_empresa == "S" ~ "Procurou a empresa antes",
      procurou_empresa == "N" ~ "Não procurou a empresa antes",
      TRUE ~ "Sem informação"
    ),
    
    reclamacao_avaliada = case_when(
      is.na(nota_do_consumidor) ~ "Não avaliada",
      TRUE ~ "Avaliada"
    ),
    
    resolvida = case_when(
      str_detect(str_to_lower(avaliacao_reclamacao), "resolvida") &
        !str_detect(str_to_lower(avaliacao_reclamacao), "não") ~ "Resolvida",
      
      str_detect(str_to_lower(avaliacao_reclamacao), "não resolvida") ~ "Não resolvida",
      
      TRUE ~ "Não avaliada"
    ),
    
    tempo_resposta_categoria = case_when(
      is.na(tempo_resposta) ~ "Sem resposta",
      tempo_resposta <= 5 ~ "Até 5 dias",
      tempo_resposta <= 10 ~ "6 a 10 dias",
      tempo_resposta > 10 ~ "Mais de 10 dias"
    ),
    
    nota_categoria = case_when(
      is.na(nota_do_consumidor) ~ "Sem nota",
      nota_do_consumidor <= 2 ~ "Baixa",
      nota_do_consumidor <= 4 ~ "Média",
      nota_do_consumidor == 5 ~ "Alta"
    )
  )

A variável resposta_binaria indica se a reclamação foi respondida pela empresa. A variável procurou_empresa_binaria indica se o consumidor tentou contato prévio com a empresa antes de registrar a reclamação. A variável resolvida resume o resultado da avaliação da reclamação. A variável tempo_resposta_categoria agrupa o tempo de resposta em faixas interpretáveis. A variável nota_categoria classifica a nota do consumidor em baixa, média, alta ou sem nota.

3.10 Base final após o pré-processamento

Após as etapas de limpeza e transformação, a base final contém 3982873 reclamações e 40 variáveis.

dimensoes <- tibble(
  indicador = c("Número de linhas", "Número de colunas"),
  valor = c(nrow(dados_limpos), ncol(dados_limpos))
)

kable(
  dimensoes,
  caption = "Dimensões da base após o pré-processamento"
)
Dimensões da base após o pré-processamento
indicador valor
Número de linhas 3982873
Número de colunas 40

Abaixo, é apresentada uma amostra da base final. Para evitar uma tabela excessivamente longa, são exibidas apenas algumas linhas.

dados_limpos %>%
  select(
    ano,
    mes_nome,
    regiao,
    uf,
    cidade,
    sexo,
    faixa_etaria,
    nome_fantasia,
    segmento_de_mercado,
    area,
    grupo_problema,
    problema,
    resposta_binaria,
    resolvida,
    nota_do_consumidor,
    tempo_resposta
  ) %>%
  slice_head(n = 20) %>%
  kable(
    caption = "Amostra da base final após limpeza e pré-processamento"
  )
Amostra da base final após limpeza e pré-processamento
ano mes_nome regiao uf cidade sexo faixa_etaria nome_fantasia segmento_de_mercado area grupo_problema problema resposta_binaria resolvida nota_do_consumidor tempo_resposta
2024 janeiro SE RJ Rio de janeiro M Entre 31 a 40 anos Facebook / instagram Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Dificuldade para alterar/ ativar serviços Respondida Não avaliada NA 3
2024 janeiro SE SP São paulo M Entre 61 a 70 anos Latam airlines (tam) Transporte aéreo Transportes Vício de qualidade Inadequação das instalações/ acomodações Respondida Resolvida 5 2
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Tim Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Telecomunicações Contrato / oferta Ligações indesejadas de telemarketing (0303) Respondida Não avaliada NA 4
2024 janeiro SE SP Sumaré M Entre 41 a 50 anos Brisanet telecom Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Produtos de telefonia e informática Cobrança / contestação Negativação indevida (spc, serasa, scpc etc) Respondida Não avaliada NA 9
2024 janeiro NE BA Salvador F Entre 21 a 30 anos Ifood Empresas de intermediação de serviços / negócios Demais serviços Cobrança / contestação Dificuldade / atraso na devolução de valores pagos / reembolso / retenção de valores Respondida Não avaliada NA 9
2024 janeiro SE SP Campinas M Entre 21 a 30 anos Banco santander Bancos, financeiras e administradoras de cartão Serviços financeiros Atendimento / sac Dificuldade de contato / acesso a outros canais (exceto sac) Respondida Não avaliada NA 9
2024 janeiro SE RJ Duque de caxias M Entre 21 a 30 anos Paypal do brasil Empresas de pagamento eletrônico Serviços financeiros Atendimento / sac Má qualidade no atendimento (descortesia / despreparo/ constrangimento) Respondida Resolvida 5 7
2024 janeiro NE MA São luís F Entre 31 a 40 anos Tudo azul Programas de fidelidade Demais serviços Contrato / oferta Dificuldade para alterar ou cancelar o contrato /serviço Respondida Não avaliada NA 7
2024 janeiro S PR Palmas M Entre 21 a 30 anos Banco bv (antigo banco votorantim) Bancos, financeiras e administradoras de cartão Serviços financeiros Atendimento / sac Sac - dificuldade de contato / acesso Respondida Não avaliada NA 7
2024 janeiro SE MG São gonçalo do rio das pedras M Entre 61 a 70 anos Hoteis.com Viagens, turismo e hospedagem Turismo/viagens Cobrança / contestação Cobrança por serviço não fornecido/ em desacordo com a utilização / fora do prazo Respondida Não avaliada NA 4
2024 janeiro SE SP Guarulhos M Entre 31 a 40 anos Cartões itaú Bancos, financeiras e administradoras de cartão Serviços financeiros Dados pessoais e privacidade Dados pessoais ou financeiros incorretos / desatualizados ? Dificuldade de retificação Respondida Não avaliada NA 8
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Nubank Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Negativação indevida (não cumprimento de acordo de parcelamento) Respondida Não avaliada NA 3
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Banco bv (antigo banco votorantim) Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Negativação indevida referente a cobrança não reconhecida Respondida Não avaliada NA 9
2024 janeiro SE ES Cariacica M Entre 41 a 50 anos Caixa econômica federal Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Cobrança em duplicidade / cobrança referente a pagamento já efetuado Respondida Não avaliada NA 2
2024 janeiro SE SP São josé do rio preto M Entre 41 a 50 anos Latam airlines (tam) Transporte aéreo Transportes Vício de qualidade Negativa de embarque de passageiro (preterição / overbooking) Respondida Resolvida 5 2
2024 janeiro NE CE Fortaleza M Entre 41 a 50 anos Assurant seguradora Seguros, capitalização e previdência Serviços financeiros Cobrança / contestação Dificuldade / atraso na devolução de valores pagos / reembolso / retenção de valores Respondida Não avaliada NA 9
2024 janeiro SE SP Santos M Entre 21 a 30 anos Casasbahia.com Comércio eletrônico Demais produtos Entrega do produto Não entrega / demora na entrega do produto Respondida Resolvida 5 7
2024 janeiro SE SP São paulo F Entre 31 a 40 anos Globoplay Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Funcionamento inadequado do serviço Respondida Não avaliada NA 8
2024 janeiro SE SP São paulo F Entre 31 a 40 anos Vivo - telefônica Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Telecomunicações Contrato / oferta Oferta não cumprida / serviço não fornecido/ venda enganosa / publicidade enganosa Respondida Resolvida 5 8
2024 janeiro SE MG Juiz de fora M Entre 51 a 60 anos Google Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Dificuldade para alterar/ ativar serviços Respondida Resolvida 5 10

3.11 Tabela interativa da base limpa

dados_limpos %>%
  select(
    ano,
    mes_nome,
    regiao,
    uf,
    cidade,
    nome_fantasia,
    segmento_de_mercado,
    problema,
    resposta_binaria,
    resolvida,
    nota_do_consumidor,
    tempo_resposta
  ) %>%
  slice_head(n = 200) %>%
  datatable(
    caption = "Tabela interativa com até 200 registros da base limpa",
    options = list(
      pageLength = 10,
      scrollX = TRUE,
      language = list(url = "//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese-Brasil.json")
    )
  )

3.12 Resumo das variáveis de interesse

resumo_variaveis <- tibble(
  variavel = c(
    "ano",
    "mes_nome",
    "regiao",
    "uf",
    "cidade",
    "sexo",
    "faixa_etaria",
    "nome_fantasia",
    "segmento_de_mercado",
    "area",
    "assunto",
    "grupo_problema",
    "problema",
    "resposta_binaria",
    "resolvida",
    "nota_do_consumidor",
    "tempo_resposta"
  ),
  descricao = c(
    "Ano de abertura da reclamação",
    "Mês de abertura da reclamação",
    "Região do consumidor",
    "Unidade federativa do consumidor",
    "Cidade do consumidor",
    "Sexo informado pelo consumidor",
    "Faixa etária do consumidor",
    "Nome fantasia da empresa reclamada",
    "Segmento de mercado da empresa",
    "Área geral da reclamação",
    "Assunto da reclamação",
    "Grupo geral do problema relatado",
    "Descrição específica do problema",
    "Indica se a reclamação foi respondida pela empresa",
    "Indica se a reclamação foi resolvida, não resolvida ou não avaliada",
    "Nota atribuída pelo consumidor",
    "Tempo de resposta da empresa em dias"
  ),
  tipo = c(
    "Numérica",
    "Categórica ordinal",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica ordinal",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Numérica",
    "Numérica"
  )
)

kable(
  resumo_variaveis,
  caption = "Descrição das variáveis de interesse"
)
Descrição das variáveis de interesse
variavel descricao tipo
ano Ano de abertura da reclamação Numérica
mes_nome Mês de abertura da reclamação Categórica ordinal
regiao Região do consumidor Categórica
uf Unidade federativa do consumidor Categórica
cidade Cidade do consumidor Categórica
sexo Sexo informado pelo consumidor Categórica
faixa_etaria Faixa etária do consumidor Categórica ordinal
nome_fantasia Nome fantasia da empresa reclamada Categórica
segmento_de_mercado Segmento de mercado da empresa Categórica
area Área geral da reclamação Categórica
assunto Assunto da reclamação Categórica
grupo_problema Grupo geral do problema relatado Categórica
problema Descrição específica do problema Categórica
resposta_binaria Indica se a reclamação foi respondida pela empresa Categórica
resolvida Indica se a reclamação foi resolvida, não resolvida ou não avaliada Categórica
nota_do_consumidor Nota atribuída pelo consumidor Numérica
tempo_resposta Tempo de resposta da empresa em dias Numérica

3.13 Estatísticas descritivas iniciais

Embora a análise exploratória completa seja realizada posteriormente, algumas estatísticas iniciais ajudam a compreender a base limpa.

estatisticas_iniciais <- tibble(
  indicador = c(
    "Total de reclamações",
    "Número de empresas",
    "Número de segmentos de mercado",
    "Número de UFs",
    "Número de cidades",
    "Percentual de reclamações respondidas",
    "Percentual de reclamações avaliadas",
    "Nota média do consumidor",
    "Tempo médio de resposta"
  ),
  valor = c(
    nrow(dados_limpos),
    n_distinct(dados_limpos$nome_fantasia, na.rm = TRUE),
    n_distinct(dados_limpos$segmento_de_mercado, na.rm = TRUE),
    n_distinct(dados_limpos$uf, na.rm = TRUE),
    n_distinct(dados_limpos$cidade, na.rm = TRUE),
    percent(mean(dados_limpos$resposta_binaria == "Respondida", na.rm = TRUE), accuracy = 0.1),
    percent(mean(dados_limpos$reclamacao_avaliada == "Avaliada", na.rm = TRUE), accuracy = 0.1),
    round(mean(dados_limpos$nota_do_consumidor, na.rm = TRUE), 2),
    round(mean(dados_limpos$tempo_resposta, na.rm = TRUE), 2)
  )
)

kable(
  estatisticas_iniciais,
  caption = "Resumo inicial da base limpa"
)
Resumo inicial da base limpa
indicador valor
Total de reclamações 3982873
Número de empresas 1812
Número de segmentos de mercado 45
Número de UFs 27
Número de cidades 6795
Percentual de reclamações respondidas 87.3%
Percentual de reclamações avaliadas 32.7%
Nota média do consumidor 2.72
Tempo médio de resposta 6.67

3.14 Distribuição inicial por ano

distribuicao_ano <- dados_limpos %>%
  count(ano, name = "total_reclamacoes") %>%
  mutate(percentual = total_reclamacoes / sum(total_reclamacoes))

distribuicao_ano %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(
    caption = "Distribuição das reclamações por ano"
  )
Distribuição das reclamações por ano
ano total_reclamacoes percentual
2024 1495226 37.5%
2025 2487647 62.5%

3.15 Distribuição inicial por região

distribuicao_regiao <- dados_limpos %>%
  count(regiao, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  mutate(percentual = total_reclamacoes / sum(total_reclamacoes))

distribuicao_regiao %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(
    caption = "Distribuição das reclamações por região"
  )
Distribuição das reclamações por região
regiao total_reclamacoes percentual
SE 1959793 49.2%
NE 743706 18.7%
S 657055 16.5%
CO 411939 10.3%
N 210380 5.3%

4. Considerações parciais

Nesta etapa, os dados de reclamações do Consumidor.gov.br referentes aos anos de 2024 e 2025 foram importados, organizados e limpos. O pré-processamento incluiu a padronização dos nomes das variáveis, conversão de datas e variáveis numéricas, tratamento de valores ausentes, filtragem dos anos de interesse e criação de variáveis derivadas.

Essas transformações tornam a base adequada para a próxima etapa do projeto, que será dedicada à análise exploratória dos dados. A partir da base limpa, será possível investigar quais segmentos de mercado concentram mais reclamações, quais empresas aparecem com maior frequência, quais problemas são mais comuns, como as reclamações se distribuem geograficamente e como variáveis como tempo de resposta e nota do consumidor se relacionam com a resolução das reclamações.