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.
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.
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.
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"
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.
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
)
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.
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)
)
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))
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"
)
| 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")
)
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.
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"
)
| 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"
)
| 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 | 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 |
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")
)
)
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"
)
| 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 |
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"
)
| 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 |
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"
)
| ano | total_reclamacoes | percentual |
|---|---|---|
| 2024 | 1495226 | 37.5% |
| 2025 | 2487647 | 62.5% |
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"
)
| regiao | total_reclamacoes | percentual |
|---|---|---|
| SE | 1959793 | 49.2% |
| NE | 743706 | 18.7% |
| S | 657055 | 16.5% |
| CO | 411939 | 10.3% |
| N | 210380 | 5.3% |
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.