Curso
Não importa quão sofisticadas sejam nossas análises ou algoritmos preditivos, a qualidade do resultado depende da qualidade dos dados de entrada. Em outras palavras: garbage in, garbage out.
Como os dados são a base de todos esses processos, é essencial dedicar tempo para garantir que estejam devidamente refinados.
A limpeza de dados é um processo fundamental no ciclo de vida da ciência de dados, e seu papel não pode ser subestimado quando buscamos descobrir insights e gerar respostas confiáveis. Na prática, os dados quase sempre chegam sujos, e a limpeza não pode ser evitada.
Neste artigo, vamos abordar ideias importantes, como lidar com valores ausentes, duplicatas e outliers. Para um passo a passo mais completo, confira nossos cursos Cleaning Data in Python ou Cleaning Data in R.
O que causa dados sujos?
Em termos simples, limpeza (ou saneamento) de dados é o processo necessário para preparar os dados para análise. Isso pode envolver encontrar e remover duplicatas e registros incompletos, além de modificar dados para corrigir informações imprecisas.
Dados sujos sempre foram um problema, e a explosão na geração de dados na última década só agravou isso. Só em 2020, o mundo gerou mais de 64 zettabytes de dados, o equivalente a 6,4 trilhões de gigabytes. Embora menos de 2% de tudo isso seja retido, esse volume sem dúvida amplia o problema já existente de “dados sujos”. Antes de limparmos os dados, é importante entender como eles ficaram sujos. As causas mais comuns incluem:
- Erro humano durante digitação, registro ou codificação
- Dispositivo sensor com defeito, como em aplicações de internet das coisas (IoT)
- Corrupção causada por falhas de hardware ou software
Entender a raiz do problema cria a base para definir critérios de qualidade que nos ajudam a classificar os diferentes tipos de problemas do nosso dataset.
Por que a limpeza de dados é tão importante?
O processo de limpeza ajuda a criar um padrão para tratar os dados de uma organização. Como já mencionamos, em qualquer processo de analytics ou ciência de dados vale a regra: garbage in, garbage out. Quando negligenciada, a limpeza resulta em análises caras e equivocadas — em tempo, dinheiro e outros recursos.
O que é qualidade de dados?
Qualidade de dados é a medida qualitativa e/ou quantitativa de quão bem os dados atendem ao propósito a que se destinam. Esses critérios funcionam como modelos práticos para avaliar se os dados disponíveis são adequados para nossos objetivos. Pense neles como testes métricos que os dados precisam passar para serem considerados aptos a processos de ciência de dados.
Critérios de qualidade de dados
- Acurácia: A informação contida nos dados está correta em todos os detalhes? Em dados, buscamos aproximar padrões do mundo real; a acurácia indica quão fiéis são essas aproximações.
- Relevância: Esta informação impacta nosso objetivo final?
- Consistência: A fonte dos dados é verificada e confiável? Exemplo: um cliente com 15 anos e estado civil “casado”.
- Completude: Os dados são suficientes e abrangentes para o objetivo desejado? Esse é um problema comum ligado a valores ausentes; investigar a fonte pode ser um caminho.
- Uniformidade: Suponha uma coluna de vendas em que nem todas as transações estão na mesma moeda. É essencial converter tudo para uma moeda única. Uniformidade é isso: garantir o uso das mesmas unidades de medida em todos os sistemas.
Limpeza de dados vs. transformação de dados
É importante diferenciar limpeza de dados de transformação de dados. Transformação é um conjunto de processos que nos ajudam a extrair mais insights dos dados. Geralmente, isso muda o formato bruto para outro formato. Alguns exemplos:
- Codificação (encoding): Processo de converter valores categóricos em valores binários para uso em cálculos de machine learning. A figura mostra como ficaria a coluna de gênero após codificação. A informação é a mesma, mas em outro formato.

- Data binning: Também chamado de “bucketização”, reduz o efeito/tamanho de observações menores agrupando valores contínuos em faixas (ou categorias).

- Escalonamento (scaling): Técnica comum em machine learning para padronizar valores de escalas diferentes em uma faixa fixa.

Perceba que, na maior parte das transformações, a representação original é alterada. Embora os dados sejam os mesmos, técnicas os transformam em um formato mais apropriado para machine learning ou outros fins.
Como a limpeza de dados é feita
É importante ter diretrizes para alcançar dados de alta qualidade. Um workflow de limpeza de dados ajuda a contemplar todas as etapas necessárias. Normalmente inclui:
- Exploração de dados
- Limpeza de dados
- Verificação de dados
- Relatório de limpeza de dados Algumas dessas etapas também serão demonstradas em Python
Exploração de dados
Explorar dados é entender a base por meio de uma análise aprofundada das variáveis presentes. Envolve técnicas visuais e de agregação para revelar problemas subjacentes. Para explorar bem, considere:
Contexto dos dados
Antes de limpar qualquer dado, é preciso entender seu contexto: a origem das entidades contidas no dataset. O contexto captura as circunstâncias de coleta — e isso orienta como usar e para que usar os dados.
Ele serve como bússola do que é aceitável na limpeza (e na análise) para que possamos tirar os insights certos. Com o contexto claro, partimos para a exploração.
Análise exploratória de dados
Análise exploratória de dados é o processo crítico de realizar investigações iniciais para descobrir padrões, identificar anomalias, testar hipóteses e checar premissas usando estatísticas descritivas e visualizações. Não há descoberta sem exploração. Sem explorar, fica difícil identificar os diversos problemas existentes.
Por exemplo, temos um dataset disponibilizado aqui. Os arquivos Rolling Sales do Department of Finance listam propriedades vendidas nos últimos doze meses na cidade de Nova York para as classes fiscais 1, 2 e 4. Vamos baixar e ler os dados do Bronx fornecidos.
#pandas
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#read excel file
df = pd.read_excel("rollingsales_bronx.xls")
#preview data
df.head()

Problemas notáveis neste dataframe incluem:
- colunas sem nome
- valores ausentes nas três primeiras linhas
Ao explorar o arquivo no Excel, vemos que a tabela só começa na 4ª linha. Portanto, reler os dados configurando alguns parâmetros nos permite indicar quais linhas pular e qual linha usar como cabeçalho:
#we read the data in again but skill 3 rows this time
df = pd.read_excel("rollingsales_bronx.xls", skiprows = 4, header = [0])
df.head()

A forma de exibição mudou bastante. Embora pudéssemos limpar após a primeira importação, a exploração economizou muito tempo com poucos ajustes na função de leitura em Python.
Explorar dados é como chegar a uma cena de crime como investigador: primeiro observamos passivamente o que está fora do lugar; a limpeza é o processo ativo de solucionar o caso.
Limpeza de dados
A exploração normalmente anda junto com a limpeza. Depois de descobrir problemas por meios visuais, de agregação ou estatísticos, é hora de corrigir. Nesta fase, dados podem ser removidos, corrigidos ou imputados.
Registros inconsistentes
Um exemplo típico é um formulário em que pessoas informam o gênero: podemos ter formatos diferentes para a mesma coisa, como “M”, “m”, “Male” ou “MALE”; e vendemos “aples”, “apples” ou “APPLES” neste mês? Para detectar, use um gráfico de frequência ou liste os valores distintos da coluna. Operações comuns incluem:
- Converter strings para minúsculas ou para formato título
- Remover espaços em branco
- Renomear colunas
Exemplo em Python: Usando o dataset importado na exploração, repare que os nomes das colunas estão inconsistentes:

Pode não parecer grave, mas é importante tornar os nomes de colunas consistentes. Por exemplo, EASE-MENT tem hífen (-) entre as palavras, enquanto as demais usam espaços.
Parte da limpeza é garantir consistência. Vamos ajustar em duas etapas:
- Substituir espaços entre palavras por underline
- Converter para formato título
# Extract columns
cols = df.columns
# Create empty list for new column names
new_cols = []
# Iterate over each column name to fix issues
for column in cols:
# Convert column name to title case
proper_cols = column.title()
# Replace spaces and hyphens with underscores
proper_cols_hyphen = proper_cols.replace(" ", "_")
clean_col = proper_cols_hyphen.replace("-", "_")
# Append the cleaned column name to the list
new_cols.append(clean_col)
# Display the transformed column names
new_cols
# Replace existing columns in the dataframe with the cleaned list
df.columns = new_cols
# Preview the updated dataframe
df.head()

Tipos de dados e conversão
O tipo de dado é como a informação é representada — e informa ao compilador como usá-la. A representação define quais operações são possíveis. Vamos ver os tipos de dados em cada coluna do dataframe do Bronx.
#data types
df.dtypes

Obs.: Note como agora conseguimos acessar nomes de colunas facilmente com o ponto (df.Year_Built).
Tudo parece em ordem, exceto Year_Built, que deveria ser categórica. Embora não seja crítico, ao agregarmos colunas, Year_Built provavelmente entrará na conta.
#Fix Year_Built column
df.Year_Built = df.Year_Built.astype("str")
#Check
df.dtypes

Dados ausentes
Às vezes há linhas com valores ausentes; em outras, colunas inteiras podem estar vazias. O que fazer? Ignorar não é opção — é como um telhado com goteira: quando chove, vai vazar.
Valores ausentes têm diferentes representações nas ferramentas: NULL, strings vazias, NaN, NA, #NA etc. O contexto é crucial para lidar com dados ausentes e entender por que faltam. Existem duas abordagens principais:
- Remoção de dados
- Imputação de dados
Antes de decidir, avalie os padrões de ausência entre as colunas. Vamos usar técnicas visuais e descritivas:
#extract the column names
cols = df.columns
#plot a heatmap of missing values with seaborn
plt.figure(figsize = (10,5))
sns.heatmap(df[cols].isnull())

O gráfico mostra visualmente que:
- Todos os valores em Ease_ment e quase todos em Apartment_Number estão ausentes
- As colunas relacionadas a Units e Square_Feet têm ausências espalhadas. Em datasets muito grandes, esse gráfico pode não ser ideal. Outra forma é medir a relevância das ausências em relação ao tamanho do conjunto.
#Get the percentage of missing values in each column missing_pct = round(df.isnull().sum()/len(df) * 100, 1) print(missing_pct)

Vamos remover as colunas Ease_Ment e Apartment_Number e depois substituir os valores ausentes nas demais.
#columns with more than 30% missing values
drop_cols = missing_pct[missing_pct > 30].index
#We can drop these columns with greater than 30 percent missing values
df_new = df.drop(columns = drop_cols)
#Extract columns with mising values between 1 and 30%
replace_cols = missing_pct[(missing_pct > 0) & (missing_pct < 30)].index
#Iterate to replace missing values
for col in replace_cols:
#if column is year built we replace with median otherwise the mean
if col == "Year_Built":
df_new.fillna(df_new[col].median(), inplace = True)
else:
mean_value = df_new[col].mean()
df_new.fillna(mean_value, inplace = True)
df_new.isnull().sum() #preview for missing values

Claro, há muito mais sobre valores ausentes — como no curso da Datacamp Dealing with Missing Values in Python. Datasets diferentes, com tipos e estruturas distintas, exigem abordagens próprias; não existe um caminho único. A imagem abaixo mostra cenários para aplicar exclusão ou imputação.

Duplicatas
Precisamos garantir uma única fonte da verdade para cada observação. Às vezes há múltiplos registros do mesmo cliente, seja por envio duplo de formulário ou erro de digitação. Independentemente da causa, é preciso consolidar uma versão única e completa da verdade. Isso ajuda o negócio a:
- Não desperdiçar tempo e dinheiro segmentando o mesmo cliente duas vezes
- Construir uma versão confiável e completa da verdade, permitindo decisões embasadas na análise
Outliers
Outliers são pontos extremos — valores muito baixos ou muito altos que não seguem o padrão do restante, por exemplo:
- Um cliente com 200 anos de idade
- Leitura de sensor de 40° Celsius na Antártica
Identificação de outliers Há diferentes técnicas, visuais e estatísticas:
-
Ordenação do conjunto: ao ordenar dados, é possível identificar outliers rapidamente. Em datasets grandes, essa técnica perde eficiência.
-
Visualização: boxplots, histogramas e dispersões facilitam a detecção.
-
Usar z-scores: técnica estatística que quantifica o quão incomum é um valor, assumindo distribuição normal. É o número de desvios-padrão acima/abaixo da média.
Tratamento de outliers Pode envolver remover ou substituir os valores extremos:
- Remover outliers: Remover valores abaixo/acima de determinado percentil. Casos típicos:
- Quando o dado foi claramente medido de forma incorreta. Por exemplo, um cliente ativo com 200 anos deve ser removido.
-
Se o outlier não altera o resultado da análise, você pode descartá-lo. Isso também vale quando há poucos outliers em relação ao total.
-
Substituir outliers: Trocar por média, mediana ou moda. Se a quantidade de outliers é grande, remover pode distorcer o dataset. Nota: a média é sensível a outliers; prefira mediana ou moda.
Verificação de dados
Concluída a limpeza, reavalie a qualidade via exploração. É a validação de que o processo foi correto e completo — garantindo que nada ficou de fora e que seguimos o contexto do dado.
Relatório e automação da limpeza de dados
Relatar é documentar a saúde dos dados após a limpeza e os passos executados. Isso cria um guia para necessidades futuras (reprodutibilidade) e permite automatizar quando necessário.
Automatizar é garantir que a limpeza seja reprodutível. Grande parte da limpeza são scripts reutilizáveis que podem ser reaproveitados com poucos ajustes.
Conclusão
Exploramos a limpeza de dados em profundidade e tudo o que você precisa considerar para um projeto bem-sucedido. É uma fase demorada — profissionais de dados passam cerca de 60% do projeto nela — e é a base que, sozinha, pode determinar o resultado. Dados de fontes diferentes têm necessidades distintas; adapte os processos ao seu caso de uso.
Recursos:
- As imagens de transformação de dados foram recortadas de uma planilha do Excel disponível aqui
- O notebook em Python está no DataCamp workspace


