Curso
Por muy sofisticados que sean nuestros análisis o algoritmos predictivos, la calidad del resultado depende de la calidad de los datos de entrada. Dicho de otro modo: "basura entra, basura sale".
Como los datos son la base de todos estos procesos, es importante dedicar tiempo suficiente a asegurarse de que estén bien depurados.
La limpieza de datos es un proceso fundamental en el ciclo de vida de la ciencia de datos, y su papel es clave cuando queremos descubrir insights y obtener respuestas fiables. En el mundo real los datos casi siempre llegan sucios, así que la limpieza es ineludible.
En este artículo veremos ideas importantes como cómo tratar valores ausentes, duplicados y valores atípicos. Si quieres instrucciones más completas, no te pierdas nuestros cursos Cleaning Data in Python o Cleaning Data in R.
¿Qué causa datos sucios?
En pocas palabras, la limpieza (o depuración) de datos es el proceso necesario para preparar los datos antes del análisis. Puede implicar encontrar y eliminar duplicados y registros incompletos, y modificar datos para corregir registros inexactos.
Los datos sucios han sido siempre un problema, y en la última década la generación de datos se ha disparado. Solo en 2020, el mundo generó más de 64 zettabytes de datos, el equivalente a 6,4 billones de gigabytes. Aunque se conserva menos del 2% de todo ello, esto agrava, sin duda, el problema ya existente de los "datos sucios". Antes de limpiar, conviene entender cómo se han ensuciado. Suele deberse a fuentes como:
- Error humano durante la introducción, el registro o la codificación de datos
- Dispositivos de sensorización defectuosos, como ocurre en el internet de las cosas (IoT)
- Corrupción por daños de hardware o software
Conocer la causa raíz de los datos sucios que vamos a limpiar sienta una buena base para definir criterios de calidad que nos permitan clasificar los distintos problemas del dataset.
¿Por qué es tan importante la limpieza de datos?
El proceso de limpieza ayuda a crear una plantilla o protocolo para depurar los datos de una organización. Como decíamos, en analítica y ciencia de datos rige la máxima de basura entra, basura sale. Si se descuida, el resultado son análisis erróneos y costosos en tiempo, dinero y otros recursos.
¿Qué es la calidad de los datos?
La calidad de los datos es la medida cualitativa y/o cuantitativa de lo bien que se adaptan a la finalidad que deben cumplir. Estos criterios son pautas prácticas que podemos usar para evaluar si los datos son adecuados para nuestros objetivos. Piensa en ellos como pruebas métricas que los datos deben superar para considerarlos aptos para procesos de ciencia de datos.
Criterios de calidad de datos
- Exactitud: Una pregunta sencilla para verificarla es: ¿la información contenida en los datos está consignada correctamente en cada detalle? Con los datos intentamos aproximar patrones del mundo real; la exactitud indica cuán fieles son esas aproximaciones.
- Relevancia: ¿Esta información impacta en el objetivo final que perseguimos?
- Consistencia: ¿La fuente está verificada y la información es fiable? Por ejemplo, tener un cliente de 15 años con estado civil "casado".
- Completitud: ¿Los datos son lo bastante exhaustivos para el objetivo deseado? Es un problema habitual asociado a valores ausentes; una forma de resolverlo es investigando la fuente.
- Uniformidad: Imagina que tenemos una columna de ventas pero no todas las transacciones están en la misma divisa. Es imprescindible convertir todo a una sola moneda. La uniformidad va de esto: asegurar que las medidas se expresan con las mismas unidades en todos los sistemas.
Limpieza de datos vs. transformación de datos
Conviene distinguir entre limpiar y transformar datos. La transformación es un conjunto de procesos para extraer más valor de los datos proporcionados. Suelen cambiar el formato original a otro, por ejemplo:
- Codificación: Proceso de convertir valores categóricos en valores binarios que luego pueden usarse en cálculos de machine learning. La figura muestra cómo quedaría la columna de género si la codificamos. Conserva la misma información, pero en otro formato.

- Discretización (data binning): También llamada "bucketing", reduce el efecto/tamaño de observaciones menores agrupando valores continuos en intervalos o categorías.

- Escalado: Técnica común en machine learning para estandarizar valores de distintas escalas dentro de un rango fijo.

Fíjate en que, en la mayoría de transformaciones, se altera la representación original. Siguen siendo los mismos datos, pero se transforman para que sean utilizables en aprendizaje automático u otros fines.
Cómo se realiza la limpieza de datos
Es importante contar con unas pautas para lograr datos de alta calidad. A esto lo llamamos flujo de trabajo de limpieza. Nos ayuda a considerar todos los pasos necesarios. Suele incluir:
- Exploración de datos
- Limpieza de datos
- Verificación de datos
- Informe de la limpieza de datos. Algunos de estos procesos también se mostrarán en Python
Exploración de datos
La exploración consiste en entender los datos mediante un análisis profundo de las variables presentes. Requiere técnicas visuales y de agregación para descubrir problemas subyacentes. Para explorar bien, ten en cuenta:
Contexto de los datos
Antes de limpiar, debemos entender el contexto. El contexto es la procedencia de las entidades contenidas en los datos. Recoge las circunstancias de cómo se recopilaron, lo que da pistas sobre cómo pueden usarse y para qué.
Esto sirve de guía sobre qué es aceptable en la limpieza (y el análisis) para extraer las conclusiones correctas. Una vez tengamos claro cómo se obtuvieron, toca explorar.
Análisis exploratorio de datos
El análisis exploratorio de datos es el proceso de realizar investigaciones iniciales para descubrir patrones, detectar anomalías, probar hipótesis y comprobar supuestos con estadísticas descriptivas y gráficos. No hay descubrimiento sin exploración. Si no exploramos, es difícil detectar los problemas existentes.
Por ejemplo, tenemos un dataset disponible aquí. Los archivos Rolling Sales del Departamento de Finanzas listan propiedades vendidas en los últimos doce meses en la ciudad de Nueva York para las clases fiscales 1, 2 y 4. Descargaremos y leeremos los datos del Bronx proporcionados.
#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()

Los problemas más notables de este data frame incluyen:
- columnas sin nombre
- valores ausentes en las tres primeras filas
Sin embargo, al explorar el archivo en Excel se ve que la tabla real no empieza hasta la fila 4. Por tanto, si volvemos a leer los datos ajustando algunos parámetros, podemos indicar qué filas omitir y cuál usar como cabecera:
#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()

La forma de presentar los datos cambia de manera significativa. Aunque podríamos haber limpiado la primera importación, la exploración nos ha ahorrado tiempo con solo ajustar la función de importación en Python.
Explorar datos es como entrar en una escena del crimen siendo la persona investigadora: observamos pasivamente lo que está fuera de lugar; la limpieza es el proceso activo de resolver el caso.
Limpieza de datos
La exploración suele ir de la mano de la limpieza. Una vez detectados los problemas mediante técnicas visuales, de agregación o estadísticas, hay que solucionarlos. En esta fase los datos se eliminan, corrigen o imputan.
Registros inconsistentes
Un ejemplo típico es un formulario en el que se solicita introducir el género. Podemos tener formatos distintos para lo mismo, p. ej., "M", "m", "Male" o "MALE"; o registrar ventas como "aples", "apples" o "APPLES". La mejor forma de detectarlo es con un gráfico de frecuencias o mostrando todos los valores distintos de la columna. Algunas operaciones habituales sobre registros inconsistentes son:
- Convertir cadenas a minúsculas o a formato título
- Eliminar espacios en blanco
- Renombrar columnas
Ejemplo en Python: Usando el dataset importado antes, fíjate en que los nombres de las columnas son inconsistentes:

Aunque no parezca grave, es importante hacer que los nombres de columnas sean accesibles de forma consistente. Por ejemplo, EASE-MENT tiene un guion (-) entre palabras, mientras que el resto usa espacios.
Parte de la limpieza es garantizar la consistencia. Vamos a arreglarlo en dos pasos:
- Sustituir espacios entre palabras por guiones bajos
- Convertir a 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 datos y conversión
El tipo de dato es cómo se representa, lo que indica al compilador cómo debe usarse. La representación determina las operaciones posibles. Veamos los tipos en cada columna del dataframe del Bronx.
#data types
df.dtypes

Nota: Observa que ahora podemos acceder fácilmente a los nombres de columna con la notación punto (df.Year_Built).
Todos los tipos parecen correctos salvo la columna Year_Built, que debería ser categórica. Aunque no tenga gran impacto, al agregar columnas es probable que Year_Built se incluya.
#Fix Year_Built column
df.Year_Built = df.Year_Built.astype("str")
#Check
df.dtypes

Datos ausentes
A veces hay observaciones (filas) con valores ausentes y, en ocasiones, columnas enteras vacías. ¿Qué hacemos entonces? ¿Lo ignoramos? Es como un tejado con goteras: cuando llueve, cae agua.
Los valores ausentes se representan de forma distinta según la herramienta: NULL, cadenas vacías, NaN, NA, #NA, etc. El contexto es clave para tratarlos y entender por qué faltan. Hay dos métodos principales:
- Eliminación de datos
- Imputación de datos
Antes de decidir, hay que examinar los patrones de ausencia por columnas. Usaremos técnicas visuales y descriptivas para evaluarlo.
#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())

El gráfico muestra visualmente que:
- Todas las celdas de Ease_ment y casi todas en Apartment_Number están vacías
- Las columnas relacionadas con Units y Square_Feet tienen valores ausentes dispersos. En datasets mucho más grandes, este gráfico puede no ser ideal. Otra forma es medir la magnitud del problema frente al tamaño total de datos.
#Get the percentage of missing values in each column missing_pct = round(df.isnull().sum()/len(df) * 100, 1) print(missing_pct)

Eliminaremos las columnas Ease_Ment y Apartment_Number y después sustituiremos los valores ausentes en las restantes.
#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

Por supuesto, hay mucho más que decir sobre cómo tratar valores ausentes; lo verás en detalle en el curso de Datacamp Dealing with Missing Values in Python. Cada dataset, tipo y estructura tiene sus necesidades, así que no existe un enfoque único. La imagen siguiente muestra distintos escenarios para aplicar eliminación o imputación.

Duplicados
Debemos garantizar una única versión fiable de cada observación. A veces hay múltiples registros de un mismo cliente, ya sea por un doble envío del formulario o por errores en la entrada de datos. Sea cual sea el motivo, necesitamos una versión única y completa de la verdad. Esto ayuda a que las empresas:
- No malgasten tiempo y dinero dirigiéndose dos veces a la misma persona
- Dispongan de una versión fiable y completa para tomar decisiones con fundamento
Valores atípicos
Los valores atípicos son puntos extremos: valores muy bajos o muy altos que no siguen el patrón del resto, por ejemplo:
- Una persona cliente con 200 años
- Una lectura de 40° Celsius en la Antártida
Identificación de valores atípicos Hay distintas técnicas, visuales y estadísticas:
-
Ordenar el dataset: Al ordenar, a veces se detectan fácilmente. Falla con datasets grandes porque es difícil revisar todo de un vistazo.
-
Visualización: Boxplots, histogramas y dispersogramas facilitan la detección.
-
Usar puntuaciones Z: Técnica estadística que cuantifica lo inusual de un valor observado asumiendo distribución normal. Es el número de desviaciones estándar por encima o por debajo de la media.
Tratamiento de valores atípicos Consiste en eliminarlos o sustituirlos:
- Eliminar atípicos: Puede implicar quitar valores por debajo o por encima de cierto percentil. Escenarios típicos:
- Cuando es evidente que la medida es incorrecta. Como decíamos, una persona cliente activa con 200 años no es un valor válido: se debe eliminar.
-
Si el atípico no cambia los resultados del análisis, puedes descartarlo, especialmente si son pocos respecto al total.
-
Sustituir atípicos: Reemplazarlos por la media, mediana o moda. Si hay un número considerable de atípicos, eliminarlos puede distorsionar. Nota: La media es sensible a atípicos; suele ser preferible usar mediana o moda.
Verificación de datos
Una vez terminada la limpieza, conviene reevaluar la calidad mediante exploración de datos. Así verificamos la corrección y completitud del proceso, nos aseguramos de no omitir pasos y de mantenernos fieles al contexto.
Limpieza de datos, documentación y automatización
Documentar implica dejar constancia del estado de los datos tras la limpieza y de los procesos seguidos. Esto garantiza una guía para necesidades futuras similares (reproducibilidad) y permite automatizar el proceso cuando haga falta.
La automatización busca que la limpieza sea reproducible. Gran parte del proceso se basa en scripts reutilizables que pueden volver a emplearse con pocos cambios cuando sea necesario.
Conclusión
Hemos repasado en profundidad la limpieza de datos y todos los componentes que debes tener en cuenta para que un proyecto de depuración sea un éxito. Es una fase exigente en tiempo a la que los profesionales de datos dedican en torno al 60% del proyecto. Es el cimiento que, por sí solo, puede determinar el resultado de un proyecto de ciencia de datos. Datos distintos de fuentes distintas tienen necesidades diferentes; tendrás que adaptar los procesos a tu caso.
Recursos:
- Las imágenes asociadas a transformación de datos se han recortado de un libro de Excel disponible aquí
- El notebook de Python está disponible en DataCamp workspace


