La **limpieza de datos** es un paso crucial en el proceso de análisis de datos, ya que garantiza la calidad y precisión de los resultados. Implica identificar, corregir o eliminar datos incorrectos, incompletos, duplicados o irrelevantes. A continuación, se describen las etapas y técnicas más comunes de limpieza de datos, utilizando ejemplos prácticos con **Python** y la biblioteca **Pandas**.
### 1. **Identificación de Datos Faltantes**
Los valores faltantes son comunes en los conjuntos de datos y pueden afectar los análisis si no se manejan adecuadamente.
#### Identificar valores faltantes:
import pandas as pd
\# Crear un DataFrame de ejemplo
data = {'Nombre': \['Ana', 'Luis', 'Carlos', None, 'Julia'],
  'Edad': \[23, None, 45, 34, 28],
  'Ciudad': \['Madrid', 'Barcelona', None, 'Sevilla', 'Madrid']}
df = pd.DataFrame(data)
\# Identificar valores faltantes
print(df.isnull()) # Muestra los valores faltantes
print(df.isnull().sum()) # Cuenta los valores faltantes por columna
### 2. **Eliminación de Datos Faltantes**
En algunos casos, es apropiado eliminar las filas o columnas que contienen valores faltantes, especialmente si la cantidad de datos faltantes es alta y no se justifica la imputación.
#### Eliminar filas o columnas con valores faltantes:
\# Eliminar filas con valores faltantes
df\_sin\_filas\_faltantes = df.dropna()
\# Eliminar columnas con valores faltantes
df\_sin\_columnas\_faltantes = df.dropna(axis=1)
print(df\_sin\_filas\_faltantes)
print(df\_sin\_columnas\_faltantes)
### 3. **Imputación de Valores Faltantes**
La imputación consiste en reemplazar los valores faltantes por estimaciones basadas en los datos disponibles, como la media, la mediana o el valor más frecuente.
#### Imputar con la media o la moda:
\# Imputar valores faltantes en la columna 'Edad' con la media
df\['Edad'].fillna(df\['Edad'].mean(), inplace=True)
\# Imputar valores faltantes en la columna 'Ciudad' con la moda (valor más frecuente)
df\['Ciudad'].fillna(df\['Ciudad'].mode()\[0], inplace=True)
print(df)
### 4. **Detección y Eliminación de Duplicados**
Los datos duplicados pueden distorsionar el análisis si no se detectan y eliminan. Pandas facilita la identificación y eliminación de registros duplicados.
#### Identificar y eliminar duplicados:
\# Crear un DataFrame con duplicados
data\_dup = {'Nombre': \['Ana', 'Luis', 'Carlos', 'Ana', 'Luis'],
  'Edad': \[23, 34, 45, 23, 34],
  'Ciudad': \['Madrid', 'Barcelona', 'Sevilla', 'Madrid', 'Barcelona']}
df\_dup = pd.DataFrame(data\_dup)
\# Identificar duplicados
print(df\_dup.duplicated())
\# Eliminar duplicados
df\_sin\_duplicados = df\_dup.drop\_duplicates()
print(df\_sin\_duplicados)
### 5. **Corregir Tipos de Datos**
Es común que las columnas tengan tipos de datos incorrectos (por ejemplo, números almacenados como cadenas de texto). Convertir los datos al tipo adecuado mejora el rendimiento y la precisión de los análisis.
#### Corregir tipos de datos:
\# Ver los tipos de datos
print(df.dtypes)
\# Convertir la columna 'Edad' a entero (si no tiene valores faltantes)
df\['Edad'] = df\['Edad'].astype(int)
print(df.dtypes)
### 6. **Normalización y Estándarización de Datos**
Los valores numéricos pueden necesitar ser transformados para garantizar que estén en un rango similar, lo que es crucial para muchos modelos de machine learning.
- **Normalización**: Escalar los datos para que estén entre 0 y 1.
- **Estandarización**: Centrar los datos alrededor de la media y reducir la desviación estándar a 1.
#### Ejemplo de normalización y estandarización:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
\# Normalización
scaler = MinMaxScaler()
df\['Edad\_normalizada'] = scaler.fit\_transform(df\[\['Edad']])
\# Estandarización
scaler\_std = StandardScaler()
df\['Edad\_estandarizada'] = scaler\_std.fit\_transform(df\[\['Edad']])
print(df)
### 7. **Tratamiento de Outliers**
Los outliers son valores que se desvían significativamente de la mayoría de los datos y pueden afectar el análisis. Puedes eliminarlos o transformarlos según el contexto.
#### Detección de outliers con el método del rango intercuartílico (IQR):
\# Calcular el rango intercuartílico
Q1 = df\['Edad'].quantile(0.25)
Q3 = df\['Edad'].quantile(0.75)
IQR = Q3 - Q1
\# Definir los límites para detectar outliers
limite\_inferior = Q1 - 1.5 \* IQR
limite\_superior = Q3 + 1.5 \* IQR
\# Filtrar los outliers
outliers = df\[(df\['Edad'] < limite\_inferior) | (df\['Edad'] > limite\_superior)]
print(outliers)
### 8. **Transformación de Datos Categóricos**
En muchos análisis, especialmente en modelos de machine learning, es necesario convertir los datos categóricos a un formato numérico.
#### Codificación One-Hot:
\# Crear variables dummy (One-Hot Encoding)
df\_categ = pd.get\_dummies(df, columns=\['Ciudad'], drop\_first=True)
print(df\_categ)
### 9. **Manejo de Valores Inconsistentes**
Los datos pueden tener inconsistencias en la forma de entradas con errores tipográficos o diferentes formatos para representar la misma información.
#### Ejemplo:
\# Corregir valores inconsistentes manualmente
df\['Ciudad'] = df\['Ciudad'].replace({'madrid': 'Madrid', 'barcelona': 'Barcelona'})
print(df)
### 10. **Eliminar Datos Irrelevantes**
No todos los datos disponibles son relevantes para el análisis. Es importante identificar y eliminar las columnas o filas que no aportan información.
#### Ejemplo:
\# Eliminar una columna innecesaria
df\_limpio = df.drop(columns=\['Edad\_estandarizada'])
print(df\_limpio)
### Conclusión:
La limpieza de datos es un proceso fundamental que incluye el manejo de valores faltantes, la eliminación de duplicados, la corrección de tipos de datos, la detección de outliers y la normalización. Una limpieza adecuada mejora significativamente la calidad del análisis y los resultados subsecuentes.