Limpieza y Analisis Exploratorio (EDA)
El Proceso SistematicoEl Analisis Exploratorio de Datos (EDA) es la fase donde investigas tus datos antes de construir modelos o sacar conclusiones. Es como ser detective: haces preguntas, buscas patrones, identificas problemas.
Framework de EDA en 7 Pasos
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
sns.set_theme(style='whitegrid')
# Cargar datos (ejemplo con dataset real)
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df = pd.read_csv(url)
print("=" * 60)
print("PASO 1: PRIMERA MIRADA")
print("=" * 60)
print(f"\nForma: {df.shape} ({df.shape[0]} filas, {df.shape[1]} columnas)")
print(f"\nPrimeras filas:")
print(df.head())
Paso 2: Tipos y estructura
print("=" * 60)
print("PASO 2: TIPOS DE DATOS")
print("=" * 60)
print(df.info())
print(f"\nMemoria usada: {df.memory_usage(deep=True).sum() / 1e6:.2f} MB")
# Clasificar columnas
numericas = df.select_dtypes(include='number').columns.tolist()
categoricas = df.select_dtypes(include='object').columns.tolist()
print(f"\nNumericas ({len(numericas)}): {numericas}")
print(f"Categoricas ({len(categoricas)}): {categoricas}")
Paso 3: Valores faltantes
print("=" * 60)
print("PASO 3: VALORES FALTANTES")
print("=" * 60)
faltantes = df.isnull().sum()
faltantes_pct = (faltantes / len(df) * 100).round(1)
df_faltantes = pd.DataFrame({
'faltantes': faltantes,
'porcentaje': faltantes_pct
}).sort_values('porcentaje', ascending=False)
df_faltantes = df_faltantes[df_faltantes['faltantes'] > 0]
print(df_faltantes)
# Visualizar valores faltantes
if len(df_faltantes) > 0:
fig, ax = plt.subplots(figsize=(8, 4))
df_faltantes['porcentaje'].plot(kind='barh', color='#FF5722', ax=ax)
ax.set_title('Porcentaje de Valores Faltantes')
ax.set_xlabel('% Faltante')
plt.tight_layout()
plt.show()
Paso 4: Estadisticas descriptivas
print("=" * 60)
print("PASO 4: ESTADISTICAS DESCRIPTIVAS")
print("=" * 60)
print("\nVariables numericas:")
print(df.describe().round(2))
print("\nVariables categoricas:")
for col in categoricas:
print(f"\n{col}:")
print(df[col].value_counts().head(10))
Paso 5: Distribuciones
print("=" * 60)
print("PASO 5: DISTRIBUCIONES")
print("=" * 60)
# Histogramas de todas las variables numericas
num_cols = df.select_dtypes(include='number').columns
n_cols = len(num_cols)
n_rows = (n_cols + 2) // 3
fig, axes = plt.subplots(n_rows, 3, figsize=(15, 4*n_rows))
axes = axes.flatten()
for i, col in enumerate(num_cols):
df[col].hist(bins=30, ax=axes[i], edgecolor='white', alpha=0.7)
axes[i].set_title(col)
axes[i].axvline(df[col].mean(), color='red', linestyle='--', alpha=0.7)
axes[i].axvline(df[col].median(), color='blue', linestyle='--', alpha=0.7)
# Ocultar ejes vacios
for j in range(i+1, len(axes)):
axes[j].set_visible(False)
plt.suptitle('Distribuciones (rojo=media, azul=mediana)', fontsize=14)
plt.tight_layout()
plt.show()
Paso 6: Correlaciones
print("=" * 60)
print("PASO 6: CORRELACIONES")
print("=" * 60)
corr = df.select_dtypes(include='number').corr()
fig, ax = plt.subplots(figsize=(10, 8))
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f', cmap='RdBu_r',
center=0, square=True, linewidths=0.5, ax=ax)
ax.set_title('Matriz de Correlaciones')
plt.tight_layout()
plt.show()
# Top correlaciones
corr_pares = corr.unstack().sort_values(ascending=False)
corr_pares = corr_pares[(corr_pares < 1) & (corr_pares > -1)]
print("\nTop 10 correlaciones:")
print(corr_pares.head(10))
Paso 7: Insights y preguntas
print("=" * 60)
print("PASO 7: INSIGHTS")
print("=" * 60)
# Ejemplo con Titanic
if 'Survived' in df.columns:
# Tasa de supervivencia por clase
surv_clase = df.groupby('Pclass')['Survived'].mean()
print("Tasa de supervivencia por clase:")
for clase, tasa in surv_clase.items():
print(f" Clase {clase}: {tasa:.1%}")
# Por genero
surv_genero = df.groupby('Sex')['Survived'].mean()
print("\nTasa de supervivencia por genero:")
for genero, tasa in surv_genero.items():
print(f" {genero}: {tasa:.1%}")
Video Recomendado
EDA Completo con Python - Paso a Paso
Ejercicio Practico
Crea un notebook 21_eda.ipynb:
- Carga un dataset real (Titanic, tips de Seaborn, o datos propios)
- Sigue los 7 pasos del framework de EDA completo
- Documenta cada paso con celdas Markdown explicativas
- Genera al menos 6 graficos diferentes
- Escribe 3 insights o hallazgos principales
- Lista 3 preguntas que quedan pendientes para investigar
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- EDA es sistematico: Sigue un framework de 7 pasos
- Primero entender: Forma, tipos, faltantes, distribuciones
- Despues buscar patrones: Correlaciones, diferencias entre grupos
- Documentar todo: Cada hallazgo con su grafico y explicacion
- Generar preguntas: El EDA no solo responde, tambien genera nuevas preguntas
- Un buen EDA es la base de todo analisis exitoso
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación específica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.