Limpeza e Purificação de Dados com Python

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como limpar e purificar dados CSV removendo dados incompletos, incorretos e inválidos. O objetivo é criar um conjunto de dados limpo a partir dos dados brutos, que pode ser usado para análise ou processamento posterior.

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como configurar o ambiente do projeto e preparar os arquivos necessários
  • Como importar as bibliotecas necessárias para a limpeza de dados
  • Como ler e processar os dados brutos, verificando vários tipos de dados sujos (dirty data)
  • Como escrever os dados limpos em um novo arquivo CSV

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Usar Python e sua biblioteca padrão para trabalhar com dados CSV
  • Aplicar técnicas para validar e limpar dados, como verificar valores ausentes, formatos inválidos e dados irrealistas
  • Implementar um processo de limpeza de dados para criar um conjunto de dados de alta qualidade
  • Gerar um novo arquivo CSV com os dados limpos

Entendendo o Formato dos Dados

Nesta etapa, você entenderá os dados antes do processo de limpeza de dados.

  1. Navegue até o diretório /home/labex/project.
  2. Dentro do diretório do projeto, você deve encontrar um arquivo raw_data.csv. Este arquivo contém os dados brutos que precisam ser limpos.
  3. Abra o arquivo raw_data.csv. Você pode ver todas as colunas, e seu formato correto deve ser:
    • Coluna Nome (Name Column): Com mais de 1 palavra.
    • Coluna Gênero (Gender Column): Espera-se 'F' ou 'M'.
    • Coluna Data de Nascimento (Birth Date Column): Formatada como %Y-%m-%d.
    • Coluna Email (Email Column): Conforme username@domain.com.
✨ Verificar Solução e Praticar

Importar as Bibliotecas Necessárias

Nesta etapa, você importará as bibliotecas necessárias para o processo de limpeza de dados.

  1. Abra o arquivo data_clean.py em um editor de texto.

  2. Adicione o seguinte código no início do arquivo:

import csv
import re
from datetime import datetime

Essas bibliotecas serão usadas para trabalhar com arquivos CSV, expressões regulares e operações de data/hora.

✨ Verificar Solução e Praticar

Inicializar a Lista de Dados Limpos

Nesta etapa, você criará uma lista vazia para armazenar os dados limpos.

  1. No arquivo data_clean.py, adicione o seguinte código abaixo das importações:
## Initialize an empty list to store cleaned data
clean_data = []

Esta lista será usada para armazenar as linhas de dados limpos.

✨ Verificar Solução e Praticar

Ler e Processar os Dados Brutos

Nesta etapa, você lerá os dados brutos do arquivo raw_data.csv, processará cada linha e adicionará as linhas válidas à lista clean_data.

  1. No arquivo data_clean.py, adicione o seguinte código abaixo da inicialização da lista clean_data:
## Open and read the raw data CSV file
with open("raw_data.csv", "r") as f:
    reader = csv.DictReader(f)  ## Use DictReader for easy access to columns by name
    for row in reader:
        ## Extract relevant fields from each row
        name = row["name"]
        sex = row["gender"]
        date = row["birth date"]
        mail = row["mail"]

        ## Check if the name field is empty and skip the row if it is
        if len(name) < 1:
            continue

        ## Check if the gender field is valid (either 'M' or 'F') and skip the row if not
        if sex not in ["M", "F"]:
            continue

        ## Attempt to parse the birth date and calculate age; skip the row if parsing fails
        try:
            date = datetime.strptime(date, "%Y-%m-%d")
        except ValueError:
            continue
        age = datetime.now().year - date.year
        ## Skip the row if the calculated age is unrealistic (less than 0 or more than 200)
        if age < 0 or age > 200:
            continue

        ## Define a regex pattern for validating email addresses
        r = r"^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$"
        ## Check if the email field matches the regex pattern and skip the row if it doesn't
        if not re.match(r, mail):
            continue

        ## If all checks pass, append the row to the cleaned data list
        clean_data.append(row)

Este código lê os dados brutos do arquivo raw_data.csv, processa cada linha e adiciona as linhas válidas à lista clean_data.

✨ Verificar Solução e Praticar

Escrever os Dados Limpos para um Novo Arquivo CSV

Nesta etapa, você escreverá os dados limpos da lista clean_data em um novo arquivo CSV chamado clean_data.csv.

  1. No arquivo data_clean.py, adicione o seguinte código abaixo da seção de processamento de dados:
## Write the cleaned data to a new CSV file
with open("clean_data.csv", "w", newline="") as f:
    writer = csv.DictWriter(
        f, fieldnames=row.keys()
    )  ## DictWriter to write using column names
    writer.writeheader()  ## Write the header row
    writer.writerows(clean_data)  ## Write all the cleaned rows

Este código cria um novo arquivo CSV chamado clean_data.csv e escreve os dados limpos da lista clean_data nele.

✨ Verificar Solução e Praticar

Executar o Script de Limpeza de Dados

Nesta etapa final, você executará o script data_clean.py para gerar o arquivo clean_data.csv.

  1. Salve o arquivo data_clean.py.

  2. No terminal, navegue até o diretório /home/labex/project, caso ainda não esteja lá.

  3. Execute o seguinte comando para executar o script de limpeza de dados:

python data_clean.py

Após executar o script, você deverá encontrar um novo arquivo clean_data.csv no diretório /home/labex/project, contendo os dados limpos.

Parabéns! Você concluiu com sucesso o projeto de purificação de dados CSV.

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.