El análisis exploratorio de datos (EDA por sus siglas en inglés) es el proceso de entender un dataset antes de hacer cualquier análisis formal. Es como leer un libro nuevo: antes de sacar conclusiones, necesitas saber de qué trata, qué tan larga es la historia y si hay páginas faltantes.
La mayoría de los errores en proyectos de datos ocurren por saltarse este paso. Se construye un modelo con datos sucios, se crea una visualización con categorías duplicadas, o se toman decisiones basadas en datos que tienen valores extremos no detectados.
Cargar el dataset
Pandas puede leer prácticamente cualquier formato de datos: CSV, Excel, JSON, SQL. El más común es CSV:
import pandas as pd # Cargar desde archivo local df = pd.read_csv("ventas_2026.csv") # O desde Excel df = pd.read_excel("ventas.xlsx", sheet_name="Hoja1") # Primeras 5 filas para ver la estructura df.head()
Las primeras preguntas que siempre hago
Una vez cargado el dataset, hay cinco preguntas que respondo siempre antes de continuar:
# 1. ¿Cuántas filas y columnas tiene? print(df.shape) # (filas, columnas) # 2. ¿Qué tipo de dato es cada columna? print(df.dtypes) # 3. ¿Hay valores nulos? print(df.isnull().sum()) # 4. ¿Cómo se distribuyen los valores numéricos? print(df.describe()) # 5. ¿Hay duplicados? print(f"Duplicados: {df.duplicated().sum()}")
Limpiar el dataset
En el 90% de los datasets reales hay algo que limpiar. Estos son los casos más frecuentes:
# Eliminar filas completamente vacías df = df.dropna(how="all") # Rellenar valores nulos en una columna numérica con la mediana df["precio"] = df["precio"].fillna(df["precio"].median()) # Eliminar duplicados exactos df = df.drop_duplicates() # Limpiar espacios en columnas de texto df["nombre"] = df["nombre"].str.strip().str.lower() # Convertir columna de fecha a tipo datetime df["fecha_venta"] = pd.to_datetime(df["fecha_venta"], dayfirst=True)
Explorar con agrupaciones
Una vez limpio el dataset, las agrupaciones son la herramienta más útil para encontrar patrones. Ejemplos concretos:
# Ventas totales por categoría de producto ventas_cat = df.groupby("categoria")["total"].sum().sort_values(ascending=False) print(ventas_cat) # Ticket promedio por mes df["mes"] = df["fecha_venta"].dt.to_period("M") ticket_mes = df.groupby("mes")["total"].mean() print(ticket_mes) # Top 10 clientes por compras acumuladas top_clientes = ( df.groupby("cliente")["total"] .sum() .sort_values(ascending=False) .head(10) ) print(top_clientes)
Si trabajas con Google Sheets como fuente de datos, puedes leerlos directamente con pd.read_csv(url_publicada) sin necesidad de descargar el archivo. Esto hace que el análisis se actualice automáticamente cuando actualizas la hoja.
El resumen completo en una sola función
Esta función combina todo lo anterior para darte un diagnóstico inicial de cualquier dataset en segundos:
def diagnostico(df): print("=== DIAGNÓSTICO DEL DATASET ===") print(f"Filas: {df.shape[0]:,} | Columnas: {df.shape[1]}") print(f"Duplicados: {df.duplicated().sum()}") print("\nValores nulos por columna:") nulos = df.isnull().sum() print(nulos[nulos > 0]) print("\nResumen estadístico:") print(df.describe()) diagnostico(df)
¿Tienes datos sin explotar en Excel o Google Sheets?
Puedo ayudarte a convertirlos en insights accionables con un dashboard en Power BI o un análisis en Python.
Analicemos tus datos