Saltar al contenido principal

Preprocesamiento de datos: Una guía completa con ejemplos en Python

¡Aprende las técnicas de preparación de datos brutos para el análisis o el aprendizaje automático con ejemplos de Python!
Actualizado 16 ene 2025  · 24 min de lectura

La calidad de tus datos influye directamente en la precisión de tu análisis y en el rendimiento del modelo. ¿Por qué? Porque los datos brutos suelen contener incoherencias, errores e información irrelevante que pueden distorsionar los resultados y dar lugar a percepciones erróneas. El preprocesamiento de datos es una forma de mitigar este problema. Es decir, es el proceso de transformar los datos brutos en un formato limpio y estructurado. 

En esta entrada del blog, trataré: 

  • ¿Qué preprocesamiento de datos? 
  • Pasos del preprocesamiento de datos
  • Técnicas de preprocesamiento de datos con ejemplos
  • Herramientas para el preprocesamiento de datos
  • Buenas prácticas para el preprocesamiento de datos

¡Vamos a ello!

¿Qué es el Preprocesamiento de Datos?

El preprocesamiento de datos es un aspecto clave de la preparación de datos. Se refiere a cualquier tratamiento aplicado a los datos brutos para prepararlos para posteriores tareas de análisis o procesamiento. 

Tradicionalmente, el preprocesamiento de datos ha sido un paso previo esencial en el análisis de datos. Sin embargo, más recientemente, estas técnicas se han adaptado para entrenar modelos de aprendizaje automático y de IA y hacer inferencias a partir de ellos. 

Así, el preprocesamiento de datos puede definirse como el proceso de convertir los datos brutos en un formato que pueda procesarse con mayor eficacia y precisión en tareas como: 

  • Análisis de datos
  • Aprendizaje automático 
  • Ciencia de datos
  • AI

Conviértete en Ingeniero de Datos

Desarrolla tus habilidades en Python para convertirte en un ingeniero de datos profesional.
Empieza gratis

Pasos del Preprocesamiento de Datos

El preprocesamiento de datos implica varios pasos, cada uno de los cuales aborda retos específicos relacionados con la calidad, la estructura y la relevancia de los datos. 

Echemos un vistazo a estos pasos clave, que generalmente van en el siguiente orden: 

Paso 1: Limpieza de datos

La limpieza de datos es el proceso de identificar y corregir errores o incoherencias en los datos para garantizar que sean exactos y completos. El objetivo es abordar los problemas que pueden distorsionar el análisis o el rendimiento del modelo.

Por ejemplo: 

  • Tratamiento de los valores perdidos: Utilizar estrategias como la imputación media/modo, la supresión o los modelos predictivos para rellenar o eliminar los datos que faltan.
  • Eliminar duplicados: Eliminar los registros duplicados para garantizar que cada entrada sea única y relevante.
  • Corregir formatos incoherentes: Normalizar los formatos (por ejemplo, formatos de fecha, casos de cadena) para mantener la coherencia.

Así es como se ve en Python:

# Creating a manual dataset
data = pd.DataFrame({
    'name': ['John', 'Jane', 'Jack', 'John', None],
    'age': [28, 34, None, 28, 22],
    'purchase_amount': [100.5, None, 85.3, 100.5, 50.0],
    'date_of_purchase': ['2023/12/01', '2023/12/02', '2023/12/01', '2023/12/01', '2023/12/03']
	})

# Handling missing values using mean imputation for 'age' and 'purchase_amount'
imputer = SimpleImputer(strategy='mean')
data[['age', 'purchase_amount']] = imputer.fit_transform(data[['age', 'purchase_amount']])

# Removing duplicate rows
data = data.drop_duplicates()

# Correcting inconsistent date formats
data['date_of_purchase'] = pd.to_datetime(data['date_of_purchase'], errors='coerce')

print(data)

Imagen que muestra una tabla que representa la salida de un script Python

Salida del código anterior 

Paso 2: Integración de datos

La integración de datos implica combinar datos de múltiples fuentes para crear un conjunto de datos unificado. Esto suele ser necesario cuando los datos se recogen de distintos sistemas fuente.

Algunas técnicas utilizadas en la integración de datos son 

  • Correspondencia de esquemas: Alinear campos y estructuras de datos de distintas fuentes para garantizar la coherencia.
  • Deduplicación de datos: Identificar y eliminar entradas duplicadas en varios conjuntos de datos.

Por ejemplo, supongamos que tenemos datos de clientes procedentes de varias bases de datos. Así es como lo fusionaríamos en una sola vista: 

# Creating two manual datasets
data1 = pd.DataFrame({
    'customer_id': [1, 2, 3],
    'name': ['John', 'Jane', 'Jack'],
    'age': [28, 34, 29]
})

data2 = pd.DataFrame({
    'customer_id': [1, 3, 4],
    'purchase_amount': [100.5, 85.3, 45.0],
    'purchase_date': ['2023-12-01', '2023-12-02', '2023-12-03']
})

# Merging datasets on a common key 'customer_id'
merged_data = pd.merge(data1, data2, on='customer_id', how='inner')

print(merged_data)

Imagen que muestra una tabla que representa la salida de un script Python

Salida del código anterior

Paso 3: Transformación de datos

La transformación de datos los convierte en formatos adecuados para el análisis, el aprendizaje automático o la minería. 

Por ejemplo:

  • Escalado y normalización: Ajustar los valores numéricos a una escala común suele ser necesario para los algoritmos que se basan en métricas de distancia.
  • Codificación de variables categóricas: Convertir datos categóricos en valores numéricos mediante técnicas de codificación de un solo golpe o de etiquetas.
  • Ingeniería y extracción de rasgos: Crear nuevas características o seleccionar las importantes para mejorar el rendimiento del modelo.

Así es como se ve en Python, utilizando scikit-learn: 

from sklearn.preprocessing import StandardScaler, OneHotEncoder

# Creating a manual dataset
data = pd.DataFrame({
    'category': ['A', 'B', 'A', 'C', 'B'],
    'numeric_column': [10, 15, 10, 20, 15]
	})

# Scaling numeric data
scaler = StandardScaler()
data['scaled_numeric_column'] = scaler.fit_transform(data[['numeric_column']])

# Encoding categorical variables using one-hot encoding
encoder = OneHotEncoder(sparse_output=False)
encoded_data = pd.DataFrame(encoder.fit_transform(data[['category']]),
                            columns=encoder.get_feature_names_out(['category']))

# Concatenating the encoded data with the original dataset
data = pd.concat([data, encoded_data], axis=1)

print(data)

Imagen que muestra una tabla que representa la salida de un script Python

Salida del código anterior

Paso 4: Reducción de datos

La reducción de datos simplifica el conjunto de datos reduciendo el número de características o registros, pero conservando la información esencial. Esto ayuda a acelerar el análisis y el entrenamiento del modelo sin sacrificar la precisión.

Las técnicas de reducción de datos incluyen 

  • Selección de características: Elegir las características más importantes que contribuyen al rendimiento del análisis o del modelo.
  • Análisis de componentes principales (ACP): Unatécnica de reducción de la dimensionalidad que transforma los datos en un espacio de menor dimensión.
  • Métodos de muestreo: Reducir el tamaño del conjunto de datos seleccionando muestras representativas es útil para manejar grandes conjuntos de datos.

Y así es como aplicamos la reducción de la dimensionalidad en Python:

from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest, chi2

# Creating a manual dataset
data = pd.DataFrame({
    'feature1': [10, 20, 30, 40, 50],
    'feature2': [1, 2, 3, 4, 5],
    'feature3': [100, 200, 300, 400, 500],
    'target': [0, 1, 0, 1, 0]
	})

# Feature selection using SelectKBest
selector = SelectKBest(chi2, k=2)
selected_features = selector.fit_transform(data[['feature1', 'feature2', 'feature3']], data['target'])

# Printing selected features
print("Selected features (SelectKBest):")
print(selected_features)

# Dimensionality reduction using PCA
pca = PCA(n_components=2)
pca_data = pca.fit_transform(data[['feature1', 'feature2', 'feature3']])

# Printing PCA results
print("PCA reduced data:")
print(pca_data)

Imagen que muestra el resultado de ejecutar un script scikit-learn

Salida del código anterior 

Técnicas comunes de preprocesamiento de datos con ejemplos

Hemos establecido que el preprocesamiento de los datos brutos es esencial para garantizar que son adecuados para el análisis o los modelos de aprendizaje automático. También hemos cubierto los pasos del proceso. 

En esta sección, exploraremos varias técnicas para tratar problemas comunes durante la fase de preprocesamiento. Además, exploraremos el aumento de datos, una técnica útil para crear datos sintéticos en contextos específicos, como conjuntos de datos de imágenes o texto.

Tratamiento de los datos que faltan

Los datos que faltan pueden afectar negativamente al rendimiento de un modelo o análisis de aprendizaje automático. Hay varias estrategias para tratar eficazmente los valores perdidos:

  • Imputación: Esta técnica consiste en completar los valores que faltan con una estimación calculada, como la media, la mediana o la moda de los datos disponibles. Los métodos avanzados incluyen el modelado predictivo, en el que los valores que faltan se predicen basándose en las relaciones dentro de los datos.
# Note: This is dummy code and not expected to run on its own
from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')  # Replace 'mean' with 'median' or 'most_frequent' if needed
data['column_with_missing'] = imputer.fit_transform(data[['column_with_missing']])
  • Supresión: Eliminar las filas o columnas con valores perdidos es una solución sencilla. Sin embargo, debe utilizarse con precaución, ya que puede provocar la pérdida de datos valiosos, sobre todo si faltan muchas entradas.
data.dropna(inplace=True)  # Removes rows with any missing values
  • Modelización de valores perdidos: En los casos en que el patrón de datos que faltan es más complejo, los modelos de aprendizaje automático pueden predecir los valores que faltan basándose en el resto del conjunto de datos. Esto puede mejorar la precisión al incorporar relaciones entre distintas variables.

Detección y eliminación de valores atípicos

Los valores atípicos son valores extremos que se desvían significativamente del resto de los datos y que, al igual que los valores perdidos, pueden distorsionar el análisis y el rendimiento del modelo. Se pueden utilizar varias técnicas para detectar y tratar los valores atípicos:

  • Método de puntuación Z: Este enfoque mide cuántas desviaciones típicas hay entre un punto de datos y la media. Los puntos de datos que superen un determinado umbral (por ejemplo, ±3 desviaciones típicas) pueden considerarse valores atípicos.
# Note: this is dummy code. 
# It won’t work unless a data with a column named “column” is imported

from scipy import stats 
z_scores = stats.zscore(data['column']) outliers = abs(z_scores) > 3 # Identifying outliers
  • Rango intercuartílico (IQR): El IQR es el intervalo entre el primer cuartil (Q1) y el tercer cuartil (Q3). Los valores superiores a 1,5 veces el IQR por encima de Q3 o por debajo de Q1 se consideran valores atípicos.
Q1 = data['column'].quantile(0.25)
Q3 = data['column'].quantile(0.75)
IQR = Q3 - Q1
outliers = (data['column'] < (Q1 - 1.5 * IQR)) | (data['column'] > (Q3 + 1.5 * IQR))
  • Técnicas visuales: Los métodos de visualización como los gráficos de caja, los gráficos de dispersión o los histogramas pueden ayudar a detectar valores atípicos en un conjunto de datos. Una vez identificados, los valores atípicos pueden eliminarse o transformarse, según su influencia en el análisis.

Codificación de datos

Cuando se trabaja con datos categóricos, la codificación es necesaria para convertir las categorías en representaciones numéricas que los algoritmos de aprendizaje automático puedan procesar. Entre las técnicas habituales de codificación se incluyen:

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse_output=False)
encoded_data = encoder.fit_transform(data[['categorical_column']])
  • Codificación de etiquetas: La codificación de etiquetas asigna un valor numérico único a cada categoría. Sin embargo, este método puede introducir una relación ordinal involuntaria entre las categorías si no tienen un orden natural.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['encoded_column'] = le.fit_transform(data['categorical_column'])
  • Codificación ordinal: La codificación ordinal se utiliza cuando las variables categóricas tienen un orden inherente, como bajo, medio y alto. Cada categoría se asigna a un valor entero correspondiente que refleja su clasificación.
from sklearn.preprocessing import OrdinalEncoder
oe = OrdinalEncoder(categories=[['low', 'medium', 'high']])
data['ordinal_column'] = oe.fit_transform(data[['ordinal_column']])

Escalado y normalización de datos

El escalado y la normalización garantizan que las características numéricas estén en una escala similar, lo que es especialmente importante para los algoritmos que se basan en métricas de distancia (por ejemplo, k-vecinos más próximos, SVM).

  • Escala mín-máx: Esta técnica escala los datos a un intervalo especificado, normalmente de 0 a 1. Es útil cuando todas las características deben tener la misma escala.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['scaled_column']] = scaler.fit_transform(data[['numeric_column']])
  • Estandarización (normalización de la puntuación Z): Este método escala los datos de forma que la media se convierta en 0 y la desviación típica en 1, lo que ayuda a que los modelos funcionen mejor con características distribuidas normalmente.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['standardized_column']] = scaler.fit_transform(data[['numeric_column']])

Aumento de datos

El aumento de datos es una técnica para aumentar artificialmente el tamaño de un conjunto de datos creando nuevos ejemplos sintéticos. Esto es especialmente útil para conjuntos de datos de imágenes o texto en modelos de aprendizaje profundo, donde se requieren grandes cantidades de datos para un rendimiento sólido del modelo.

  • Aumento de la imagen: Técnicas como girar, voltear, escalar o añadir ruido a las imágenes ayudan a crear variaciones que mejoran la generalización del modelo.
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')

augmented_images = datagen.flow_from_directory('image_directory', target_size=(150, 150))
  • Aumento de texto: Para los datos de texto, los métodos de aumento incluyen la sustitución de sinónimos, la inserción aleatoria y la retrotraducción, en la que una frase se traduce a otra lengua y luego se vuelve a traducir a la lengua original, introduciendo variaciones.
import nlpaug.augmenter.word as naw
# install nlpaug here: https://github.com/makcedward/nlpaug 

aug = naw.SynonymAug(aug_src='wordnet')
augmented_text = aug.augment("This is a sample text for augmentation.")

Herramientas para el Preprocesamiento de Datos

Aunque puedes implementar el procesamiento de datos utilizando código Python puro, se han desarrollado potentes herramientas para gestionar diversas tareas y hacer que el proceso global sea más eficiente. He aquí algunos ejemplos: 

Bibliotecas Python

Existen bastantes bibliotecas especializadas para el preprocesamiento de datos en Python. Aquí tienes 3 de los más populares: 

  • Pandas: La biblioteca de Python más utilizada para la manipulación y limpieza de datos. Proporciona estructuras de datos flexibles, principalmente DataFrame y Series, que te permiten manejar y manipular datos estructurados con eficacia. Pandas admite operaciones como el manejo de datos que faltan, la fusión de conjuntos de datos, el filtrado de datos y la remodelación.
import pandas as pd

# Load a sample dataset
data = pd.DataFrame({
    'name': ['John', 'Jane', 'Jack'],
    'age': [28, 31, 34]
})

print(data)

Imagen que muestra una tabla como salida de la ejecución de un script Python

Salida del código anterior 

  • NumPy: Una biblioteca fundamental para cálculos numéricos. Admites matrices y arrays multidimensionales de gran tamaño y funciones matemáticas para operar con estos arrays. NumPy suele ser la base de muchas bibliotecas de procesamiento de datos de nivel superior, como Pandas.
import numpy as np

# Create an array and perform element-wise operations
array = np.array([1, 2, 3, 4])
squared_array = np.square(array)

print(squared_array)

Salida del código anterior

  • Scikit-learn: Muy utilizado para tareas de aprendizaje automático, pero también ofrece numerosas utilidades de preprocesamiento, como escalado, codificación y transformación de datos. Su módulo de preprocesamiento contiene herramientas para tratar datos categóricos, escalar datos numéricos, extraer características, etc.
from sklearn.preprocessing import StandardScaler 

# Standardize data 
data = [[10, 2], [15, 5], [20, 3]] 
scaler = StandardScaler() 
scaled_data = scaler.fit_transform(data)
print(scaled_data)

Imagen que muestra una tabla como salida de la ejecución de un script Python

Salida del código anterior

Plataformas en la nube

Los sistemas locales pueden no ser capaces de manejar grandes conjuntos de datos con eficacia. En tales situaciones, las plataformas en la nube ofrecen soluciones escalables y eficientes que te permiten procesar grandes cantidades de datos en sistemas distribuidos. 

Algunas herramientas de plataforma en la nube a tener en cuenta son 

  • Pegamento AWS: Un servicio ETL totalmente gestionado por AmazonWeb Services. Descubre y organiza automáticamente los datos y los prepara para el análisis. Glue admite la catalogación de datos y puede conectarse a servicios de AWS como S3 y Redshift.
  • Azure Data Factory: Un servicio de integración de datos basado en la nube de Microsoft. Admite la creación de ETL y conductos ELT para datos a gran escala. Azure Data Factory permite a los usuarios mover datos entre varios servicios, preprocesarlos mediante transformaciones y orquestar flujos de trabajo utilizando una interfaz visual.

Herramientas de automatización

Automatizar los pasos repetitivos del preprocesamiento de datos puede ahorrar tiempo y reducir los errores, especialmente cuando se trata de modelos de aprendizaje automático y grandes conjuntos de datos. He aquí algunas herramientas que ofrecen canalizaciones de preprocesamiento integradas: 

  • Plataformas AutoML: AutoML es la abreviatura de Aprendizaje Automático de Máquinas (y significa lo que pone en la lata). En otras palabras, estas plataformas automatizan varias etapas del flujo de trabajo del aprendizaje automático. Las plataformas comoke AutoML de Google, Azure AutoML de Microsoft y AutoML de H2O.ai proporcionan canalizaciones automatizadas que se encargan de tareas como la selección de características, la transformación de datos y la selección de modelos con una intervención mínima del usuario.
  • Canalizaciones de preprocesamiento en scikit-learn: Scikit-learn proporcionaes la clase Pipeline, que ayuda aeaminar y automatizar los pasos del preprocesamiento. Te permite encadenar varias operaciones de preprocesamiento en un único flujo de trabajo ejecutable, garantizando que las tareas de preprocesamiento se apliquen de forma coherente:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer

# Example Pipeline combining different preprocessing tasks
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])

categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('encoder', OneHotEncoder())
])

preprocessor = ColumnTransformer(transformers=[
    ('num', numeric_transformer, ['age']),
    ('cat', categorical_transformer, ['category'])
])

preprocessed_data = preprocessor.fit_transform(data)

Buenas prácticas para el preprocesamiento de datos

Es esencial seguir las mejores prácticas para maximizar la eficacia de tus esfuerzos de preprocesamiento. Dicho esto, a continuación te propongo algunas prácticas que te animo a considerar: 

Comprender los datos

Antes de sumergirte en el preprocesamiento, es importante comprender a fondo el conjunto de datos. Realiza un análisis exploratorio de los datos para identificar la estructura de los datos en cuestión. Lo que quieres entender específicamente son 

  • Características principales 
  • Posibles anomalías
  • Relaciones 

Sin conocer primero las características del conjunto de datos, es muy probable que apliques métodos de preprocesamiento incorrectos, que distorsionarán los datos. 

Automatiza los pasos repetitivos

El preprocesamiento suele implicar tareas repetitivas. Automatizar estas tareas mediante la creación de pipelines garantiza la coherencia y la eficacia, y reduce las probabilidades de errores manuales. Para agilizar los flujos de trabajo, aprovecha los pipelines de herramientas como scikit-learn o las plataformas basadas en la nube.

Pasos del preprocesamiento de documentos

Una documentación clara ayuda a conseguir dos objetivos:

  • Reproducibilidad
  • Comprensión (para ti mismo más adelante o para otros miembros de tu equipo).

Cada decisión, transformación o paso de filtrado debe registrarse, incluido su razonamiento. Esto mejorará significativamente la colaboración entre los miembros del equipo y te ayudará a retomar los proyectos donde los dejaste. 

Mejoras iterativas

El preprocesamiento de datos no es una tarea de una sola vez, sino que debe ser un proceso iterativo. A medida que los modelos evolucionan y proporcionan información sobre su rendimiento, utiliza esta información para revisar y perfeccionar los pasos del preprocesamiento, ya que puede conducir a mejores resultados. Por ejemplo, la ingeniería de rasgos puede revelar nuevos rasgos útiles, o el ajuste de la gestión de valores atípicos puede mejorar la precisión del modelo: utiliza esta información para actualizar tus pasos de preprocesamiento. 

Conclusión

El preprocesamiento de datos desempeña un papel fundamental en el éxito de cualquier proyecto de datos. Un preprocesamiento adecuado garantiza que los datos brutos se transformen en un formato limpio y estructurado, lo que ayuda a que los modelos y análisis produzcan perspectivas más precisas y significativas. 

En este artículo, he compartido varias técnicas para ayudar a implementar el preprocesamiento de datos. Aun así, lo más importante que hay que tener en cuenta es que este proceso no es un esfuerzo de una sola vez, ¡sino un proceso iterativo! El perfeccionamiento continuo conduce a un mejor rendimiento del modelo y a una mejor toma de decisiones. Un conjunto de datos bien preparado sienta las bases del éxito de cualquier iniciativa de IA de datos.

Para seguir aprendiendo, te recomiendo que consultes los siguientes recursos excelentes:

Conviértete en un Científico ML

Mejora tus conocimientos de Python para convertirte en un científico del aprendizaje automático.

Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Temas

¡Aprende más sobre ingeniería de datos con estos cursos!

curso

Introduction to Data Engineering

4 hr
115.8K
Learn about the world of data engineering in this short course, covering tools and topics like ETL and cloud computing.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Aprendizaje automático de datos categóricos con el tutorial de Python

Aprenda los trucos más comunes para manejar datos categóricos y preprocesarlos para construir modelos de aprendizaje automático.
Moez Ali's photo

Moez Ali

28 min

tutorial

Multiprocesamiento en Python: Guía de hilos y procesos

Aprende a gestionar hilos y procesos con el módulo de multiprocesamiento de Python. Descubre las técnicas clave de la programación paralela. Mejora la eficacia de tu código con ejemplos.
Kurtis Pykes 's photo

Kurtis Pykes

7 min

tutorial

Clasificación de textos en Python

Descubra qué es la clasificación de textos, cómo funciona y casos de uso con éxito. Explore ejemplos de principio a fin sobre cómo crear un canal de preprocesamiento de texto seguido de un modelo de clasificación de texto en Python.
Moez Ali's photo

Moez Ali

12 min

tutorial

Guía completa para el aumento de datos

Aprende sobre técnicas, aplicaciones y herramientas de aumento de datos con un tutorial de TensorFlow y Keras.
Abid Ali Awan's photo

Abid Ali Awan

15 min

tutorial

21 herramientas esenciales de Python

Conozca las herramientas esenciales de Python para el desarrollo de software, raspado y desarrollo web, análisis y visualización de datos y aprendizaje automático.
Abid Ali Awan's photo

Abid Ali Awan

6 min

Ver másVer más