Limpieza y Purificación de Datos con Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a limpiar y purificar datos CSV eliminando datos incompletos, incorrectos e inválidos. El objetivo es crear un conjunto de datos limpio a partir de los datos brutos, que se puede utilizar para análisis o procesamiento posteriores.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo configurar el entorno del proyecto y preparar los archivos necesarios
  • Cómo importar las bibliotecas necesarias para la limpieza de datos
  • Cómo leer y procesar los datos brutos, comprobando diferentes tipos de datos sucios
  • Cómo escribir los datos limpios en un nuevo archivo CSV

🏆 Logros

Después de completar este proyecto, podrás:

  • Utilizar Python y su biblioteca estándar para trabajar con datos CSV
  • Aplicar técnicas para validar y limpiar datos, como comprobar valores faltantes, formatos inválidos y datos poco realistas
  • Implementar un proceso de limpieza de datos para crear un conjunto de datos de alta calidad
  • Generar un nuevo archivo CSV con los datos limpios

Comprendiendo el Formato de los Datos

En este paso, entenderás los datos antes del proceso de limpieza de datos.

  1. Navega hasta el directorio /home/labex/project.
  2. Dentro del directorio del proyecto, deberías encontrar un archivo raw_data.csv. Este archivo contiene los datos brutos que necesitan ser limpiados.
  3. Abre el archivo raw_data.csv, puedes ver todas las columnas, y su formato correcto debería ser:
    • Columna de Nombre: Con más de una palabra.
    • Columna de Género: Espera 'F' o 'M'.
    • Columna de Fecha de Nacimiento: Formateada como %Y-%m-%d.
    • Columna de Email: Conforme a username@domain.com.
✨ Revisar Solución y Practicar

Importar las Bibliotecas Necesarias

En este paso, importarás las bibliotecas necesarias para el proceso de limpieza de datos.

  1. Abre el archivo data_clean.py en un editor de texto.

  2. Agrega el siguiente código al principio del archivo:

import csv
import re
from datetime import datetime

Estas bibliotecas se utilizarán para trabajar con archivos CSV, expresiones regulares y operaciones de fecha/hora.

✨ Revisar Solución y Practicar

Inicializar la Lista de Datos Limpios

En este paso, crearás una lista vacía para almacenar los datos limpios.

  1. En el archivo data_clean.py, agrega el siguiente código debajo de las importaciones:
## Initialize an empty list to store cleaned data
clean_data = []

Esta lista se utilizará para almacenar las filas de datos limpios.

✨ Revisar Solución y Practicar

Leer y Procesar los Datos Brutos

En este paso, leerás los datos brutos del archivo raw_data.csv, procesarás cada fila y agregarás las filas válidas a la lista clean_data.

  1. En el archivo data_clean.py, agrega el siguiente código debajo de la inicialización de la 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 lee los datos brutos del archivo raw_data.csv, procesa cada fila y agrega las filas válidas a la lista clean_data.

✨ Revisar Solución y Practicar

Escribir los Datos Limpios en un Nuevo Archivo CSV

En este paso, escribirás los datos limpios de la lista clean_data en un nuevo archivo CSV llamado clean_data.csv.

  1. En el archivo data_clean.py, agrega el siguiente código debajo de la sección de procesamiento de datos:
## 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 para escribir usando los nombres de columna
    writer.writeheader()  ## Escribe la fila de encabezado
    writer.writerows(clean_data)  ## Escribe todas las filas limpias

Este código crea un nuevo archivo CSV llamado clean_data.csv y escribe los datos limpios de la lista clean_data en él.

✨ Revisar Solución y Practicar

Ejecutar el Script de Limpieza de Datos

En este último paso, ejecutarás el script data_clean.py para generar el archivo clean_data.csv.

  1. Guarda el archivo data_clean.py.

  2. En la terminal, navega hasta el directorio /home/labex/project si aún no lo has hecho.

  3. Ejecuta el siguiente comando para ejecutar el script de limpieza de datos:

python data_clean.py

Después de ejecutar el script, deberías encontrar un nuevo archivo clean_data.csv en el directorio /home/labex/project, que contiene los datos limpios.

¡Felicitaciones! Has completado con éxito el proyecto de purificación de datos CSV.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.