Uno de los pasos fundamentales del Análisis Exploratorio de Datos (EDA) es el Data Wrangling. La transformación de datos es un conjunto de técnicas utilizadas para convertir datos de un formato o estructura a otro, con el fin de hacerlos más útiles, consistentes y listos para el análisis.
En el proceso de preparación de datos, ciertas tareas suelen realizarse en un orden específico para maximizar la eficiencia y efectividad del flujo de trabajo. Un flujo de trabajo típico de limpieza y preparación de datos seria:
- Key restructuring (reestructuración de claves)
- Data validation (validación de datos)
- Data cleaning (limpieza de datos)
- Data deduplication (deduplicación de datos)
- Data derivation (derivación de datos)
- Format revisioning (revisión de formato)
- Data aggregation (agregación de datos)
- Data filtering (filtrado de datos)
- Data joining (unión de datos)
- Data integration (integración de datos)
Este flujo de trabajo es iterativo y puede requerir ajustes según las necesidades específicas del proyecto y la naturaleza de los datos. Además, algunos pasos pueden superponerse o requerir revisiones cuando surgen nuevos datos o cambios en los requisitos del análisis.
La razón principal para transformar los datos es obtener una representación más útil y compatible con otros conjuntos de datos. Además, la transformación adecuada favorece la interoperabilidad dentro de un sistema al seguir una estructura y formato común.
Key Restructuring
En el ámbito de la ciencia de datos, “Key Restructuring” se refiere a la reorganización o transformación de las claves en un conjunto de datos.
Las “claves” suelen ser identificadores únicos o combinaciones de campos que sirven para relacionar registros entre sí.
Renombrar Claves
df.rename(columns={'old_name': 'new_name'}, inplace=True)Reasignar Valores de Clave
df['key_column'] = df['key_column'].map(lambda x: 'new_value' if condition else x)Crear Claves Compuestas
df['composite_key'] = df['key_part1'].astype(str) + '-' + df['key_part2'].astype(str)Eliminar Claves Innecesarias
df.drop(columns=['unnecessary_key'], inplace=True)Asegurar la Unicidad
if df['key_column'].is_unique:
print("Las claves son únicas.")
else:
df.drop_duplicates(subset=['key_column'], inplace=True)Reindexación Basada en Claves
df.set_index('key_column', inplace=True)Data Validation
La validación de datos consiste en verificar si los datos cumplen con un conjunto de reglas o normas antes de ser procesados o analizados. Es una etapa crítica, ya que trabajar con datos erróneos o mal formateados puede llevar a conclusiones incorrectas y resultados poco confiables.
Técnicas comunes en Pandas
- Verificación de tipos de datos
df.dtypes
df['column'] = df['column'].astype(float)- Aplicar condiciones de validación
assert (df['column'] > 0).all()- Validación de texto con expresiones regulares
df['text_column'].str.match(r'^\w+$')- Detección de valores nulos
df.isnull().sum()
df.dropna(subset=['column'], inplace=True)- Valores únicos y duplicados
df['column'].is_unique
df.drop_duplicates(subset=['column'], inplace=True)- Rangos de valores
df[(df['column'] >= min_value) & (df['column'] <= max_value)]- Validación de categorías
allowed = {'cat1', 'cat2'}
df['col'].isin(allowed)- Validación cruzada entre columnas
df.apply(lambda row: row['col1'] < row['col2'], axis=1)La validación debe ser continua, adaptándose a las reglas del negocio y al tipo de análisis o modelo que se esté desarrollando.
Data Cleaning
La limpieza de datos busca detectar y corregir (o eliminar) registros corruptos, incompletos o inconsistentes, tratando valores faltantes y estandarizando formatos.
Tareas comunes:
- Detectar valores faltantes
df.isnull()- Eliminar valores faltantes
df.dropna()- Rellenar valores faltantes
df.fillna(method='ffill')- Conversión de tipos
df.astype({'col1': 'int32'})- Normalización de texto
df['col'] = df['col'].str.strip().str.lower()- Manejo de outliers
Filtrar o imputar valores extremos según percentiles o desviaciones estándar. - Manejo de fechas
df['fecha'] = pd.to_datetime(df['fecha'], errors='coerce')- Guardar los datos limpios
df.to_csv('clean_data.csv', index=False)Una limpieza adecuada es la base para cualquier análisis o modelado confiable.
Data Deduplication
La deduplicación de datos busca identificar y eliminar registros repetidos dentro de un conjunto de datos. Esto mejora la precisión y evita sesgos en el análisis.
Métodos en Pandas:
df.drop_duplicates()
df.duplicated()Se puede usar el argumento subset para definir columnas específicas y keep para decidir qué duplicado conservar. Antes de eliminar duplicados, conviene analizar su origen y asegurarse de no eliminar información valiosa.
Data Derivation
La derivación de datos consiste en crear nuevas variables o columnas a partir de datos existentes.
Ejemplos comunes:
- Cálculo de estadísticas
df['avg'] = df['value'].mean()- Transformaciones matemáticas
df['normalized'] = (df['x'] - df['x'].mean()) / df['x'].std()- Descomposición de fechas
df['year'] = df['date'].dt.year- One-hot encoding
pd.get_dummies(df['category'])- Binning
pd.cut(df['var'], bins=3)- Cálculo de diferencias
df['diff'] = df['value'].diff()Derivar datos correctamente permite enriquecer el conjunto de análisis y mejorar el rendimiento de los modelos.
Format Revisioning
La revisión de formato implica convertir datos a tipos o estructuras adecuados para el análisis o interoperabilidad.
- Conversión de tipos
df['col'] = pd.to_numeric(df['col'], errors='coerce')- Normalización de texto
df['texto'] = df['texto'].str.lower().str.strip()- Fechas y horas
df['fecha'] = pd.to_datetime(df['fecha'])- Conversión a categorías
df['cat'] = df['cat'].astype('category')- Exportar a otros formatos
df.to_excel('datos.xlsx', index=False)
df.to_sql('tabla', con=conexion)Data Aggregation
La agregación de datos permite resumir información, extraer métricas y generar resúmenes útiles.
Ejemplos:
df.groupby('col')['ventas'].sum()
df.groupby('col').agg({'ventas': ['mean', 'std']})
df.pivot_table(values='ventas', index='mes', columns='region')
pd.crosstab(df['categoria'], df['region'])
df['ventas'].rolling(window=3).mean()
df.resample('M')['ventas'].sum()La agregación facilita el análisis exploratorio y la generación de indicadores clave (KPIs).
Data Filtering
El filtrado de datos consiste en seleccionar subconjuntos relevantes según condiciones o criterios específicos.
Ejemplos:
df[df['edad'] > 30]
df.query('columna > 100')
df[df['pais'].isin(['España', 'Chile'])]
df[(df['ventas'] > 500) & (df['region'] == 'Norte')]También puedes aplicar funciones personalizadas:
df[df['nombre'].apply(lambda x: 'a' in x)]El filtrado ayuda a centrarse en los datos más relevantes y reduce ruido analítico.
Top – Data Joining
El data joining combina conjuntos de datos mediante claves comunes, similar a las uniones de SQL.
Métodos:
pd.concat()– concatenar DataFrames (vertical u horizontalmente)pd.merge()– unión tipo SQL (inner, left, right, outer)df.join()– unión por índice o columnamerge_asof()ymerge_ordered()– uniones temporales o ordenadascompare()– detectar diferencias entre DataFrames
Ejemplos:
pd.concat([df1, df2], axis=0)
pd.merge(df1, df2, on='id', how='left')La unión de datos es esencial para integrar fuentes diversas y construir un dataset analítico coherente.
Deja una respuesta