Limpeza de dados
Ciência de Dados com Python • Módulo 1: Manipulação • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Limpeza de dados com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Limpeza de dados com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Limpeza de dados
Machine learning aprende padrões de exemplos em vez de seguir regras escritas à mão. Sem dados representativos e limpos, nenhum modelo salva o projeto.
Checkpoint: Overfitting é quando o modelo: — Resposta: Acerta muito no treino e mal em dados novos
2. Como pensar antes de fazer
O ciclo é: coletar → limpar → explorar → separar treino/teste → treinar → avaliar. Avaliar no mesmo dado do treino é enganar a si mesmo: o modelo decorou em vez de aprender.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Limpeza de dados” resolve.
3. Exemplo completo, do início ao resultado
Overfitting é acertar muito no treino e mal no teste (modelo complexo demais); underfitting é errar nos dois (simples demais). Validação cruzada e um conjunto de teste intocado revelam qual dos dois está acontecendo.
# Sem bibliotecas externas: a lógica que importa
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y)
n = len(dados)
mx = sum(x for x, _ in dados) / n
my = sum(y for _, y in dados) / n
num = sum((x - mx) * (y - my) for x, y in dados)
den = sum((x - mx) ** 2 for x, _ in dados)
a = num / den # coeficiente angular
b = my - a * mx # intercepto
print(round(a, 2), round(b, 2))
print("previsao x=5:", round(a * 5 + b, 2))| Trecho | O que faz |
|---|
# Sem bibliotecas externas: a lógica que importa | Comentário de orientação: documenta a intenção sem executar uma ação. |
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y) | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
n = len(dados) | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
mx = sum(x for x, _ in dados) / n | Percorre ou transforma uma sequência de valores. |
my = sum(y for _, y in dados) / n | Percorre ou transforma uma sequência de valores. |
num = sum((x - mx) * (y - my) for x, y in dados) | Percorre ou transforma uma sequência de valores. |
den = sum((x - mx) ** 2 for x, _ in dados) | Percorre ou transforma uma sequência de valores. |
a = num / den # coeficiente angular | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
Dica: Isso é uma regressão linear na unha: o modelo é só um par de números que minimiza o erro. Bibliotecas fazem o mesmo em escala.
Checkpoint: Por que separar treino e teste? — Resposta: Para medir o desempenho em dados que o modelo nunca viu
4. Do detalhe para o todo
Acurácia engana em dados desbalanceados: com 99% de casos negativos, um modelo que responde sempre 'não' acerta 99%. Olhe precisão, recall e matriz de confusão conforme o custo do erro.
5. Erros comuns e como corrigi-los
1. Avaliar o modelo com os dados de treino.
2. Confiar só na acurácia em problemas desbalanceados.
3. Ignorar valores faltantes e outliers na limpeza.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Faça funcionar
Laboratório de Limpeza de dados: execute o exemplo, identifique entrada, processamento e saída e altere pelo menos um valor para observar como o resultado muda.
# Sem bibliotecas externas: a lógica que importa
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y)
n = len(dados)
mx = sum(x for x, _ in dados) / n
my = sum(y for _, y in dados) / n
num = sum((x - mx) * (y - my) for x, y in dados)
den = sum((x - mx) ** 2 for x, _ in dados)
a = num / den # coeficiente angular
b = my - a * mx # intercepto
print(round(a, 2), round(b, 2))
print("previsao x=5:", round(a * 5 + b, 2))Dica: Volte ao exemplo resolvido e compare a estrutura. Avaliar o modelo com os dados de treino.
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Limpeza de dados deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Limpeza de dados, identifique um risco citado na aula e registre ou implemente a correção.
# Sem bibliotecas externas: a lógica que importa
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y)
n = len(dados)
mx = sum(x for x, _ in dados) / n
my = sum(y for _, y in dados) / n
num = sum((x - mx) * (y - my) for x, y in dados)
den = sum((x - mx) ** 2 for x, _ in dados)
a = num / den # coeficiente angular
b = my - a * mx # intercepto
print(round(a, 2), round(b, 2))
print("previsao x=5:", round(a * 5 + b, 2))Dica: Avaliar o modelo com os dados de treino.
4. 4. Aplique em um caso novo
Crie uma variação própria usando Limpeza de dados. Mude os dados ou o cenário e demonstre que o resultado continua correto.
# Sem bibliotecas externas: a lógica que importa
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y)
n = len(dados)
mx = sum(x for x, _ in dados) / n
my = sum(y for _, y in dados) / n
num = sum((x - mx) * (y - my) for x, y in dados)
den = sum((x - mx) ** 2 for x, _ in dados)
a = num / den # coeficiente angular
b = my - a * mx # intercepto
print(round(a, 2), round(b, 2))
print("previsao x=5:", round(a * 5 + b, 2))Dica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Machine learning aprende padrões de exemplos em vez de seguir regras escritas à mão. Sem dados representativos e limpos, nenhum modelo salva o projeto.
- Isso é uma regressão linear na unha: o modelo é só um par de números que minimiza o erro. Bibliotecas fazem o mesmo em escala.
- Evite: Avaliar o modelo com os dados de treino.
- Evite: Confiar só na acurácia em problemas desbalanceados.
Exemplo comentado
# Sem bibliotecas externas: a lógica que importa
dados = [(1, 2.1), (2, 4.2), (3, 5.9), (4, 8.1)] # (x, y)
n = len(dados)
mx = sum(x for x, _ in dados) / n
my = sum(y for _, y in dados) / n
num = sum((x - mx) * (y - my) for x, y in dados)
den = sum((x - mx) ** 2 for x, _ in dados)
a = num / den # coeficiente angular
b = my - a * mx # intercepto
print(round(a, 2), round(b, 2))
print("previsao x=5:", round(a * 5 + b, 2))Isso é uma regressão linear na unha: o modelo é só um par de números que minimiza o erro. Bibliotecas fazem o mesmo em escala.
Erros comuns
- Avaliar o modelo com os dados de treino.
- Confiar só na acurácia em problemas desbalanceados.
- Ignorar valores faltantes e outliers na limpeza.
Quiz e gabarito completo
1. Overfitting é quando o modelo:
- a) Erra no treino e no teste
- b) Acerta muito no treino e mal em dados novos
- c) Treina devagar
- d) Tem poucos dados
Gabarito: b) Acerta muito no treino e mal em dados novos — Ele decorou ruído em vez de aprender o padrão.
2. Por que separar treino e teste?
- a) Para economizar memória
- b) Para medir o desempenho em dados que o modelo nunca viu
- c) Exigência das bibliotecas
- d) Para treinar mais rápido
Gabarito: b) Para medir o desempenho em dados que o modelo nunca viu — É a única medida honesta de generalização.
Codding • Ciência de Dados com Python • Limpeza de dados • Prova final e certificado em codding.lovable.app/cursos/ciencia-de-dados/prova