En esta sección aplicamos lo visto: limpieza de datos, análisis agrupado y un mini-proyecto. Usaremos Pandas junto a NumPy y Seaborn.
Enunciado: Recibís un DataFrame de clientes con edades, ciudades y compras en el que aparecen valores nulos (NaN/None). Tu objetivo es dejarlo listo para un análisis posterior.
Intentá resolverlo sin mirar el código que sigue y luego compará tu enfoque con la solución propuesta.
import pandas as pd
datos = {
"Cliente": ["Ana", "Luis", "Carla", "Pedro", "María"],
"Edad": [23, None, 29, 42, None],
"Ciudad": ["Córdoba", "Buenos Aires", None, "Mendoza", "Salta"],
"Compras": [5, 8, None, 12, 7]
}
df = pd.DataFrame(datos)
print("Dataset original:")
print(df)
print()
print("Valores nulos por columna:")
print(df.isnull().sum())
df1 = df.dropna(thresh=3).copy() # conserva filas con al menos 3 valores válidos
df1.loc[:, "Edad"] = df1["Edad"].fillna(df1["Edad"].mean())
df1.loc[:, "Ciudad"] = df1["Ciudad"].fillna("Desconocida")
df1.loc[:, "Compras"] = df1["Compras"].fillna(df1["Compras"].median())
print()
print("Dataset limpio:")
print(df1)
Enunciado: A partir de un registro de ventas por región y producto, generá indicadores que resuman el desempeño comercial.
Intentá resolverlo sin mirar el código y luego compará tu resultado con la solución propuesta.
Calculamos ingresos, sumas y promedios usando groupby
y agg
.
import pandas as pd
ventas = pd.DataFrame({
"Región": ["Norte", "Norte", "Sur", "Sur", "Norte", "Sur"],
"Producto": ["A", "B", "A", "B", "A", "B"],
"Unidades": [10, 15, 20, 25, 5, 30],
"Precio": [100, 200, 100, 200, 100, 200]
})
ventas["Ingresos"] = ventas["Unidades"] * ventas["Precio"]
print("Dataset de ventas:")
print(ventas)
print()
print("Ventas totales por región:")
print(ventas.groupby("Región")["Ingresos"].sum())
print()
print("Promedio de ingresos por producto:")
print(ventas.groupby("Producto")["Ingresos"].mean())
print()
print("Estadísticas por región y producto:")
print(ventas.groupby(["Región", "Producto"]).agg({
"Unidades": ["sum", "mean"],
"Ingresos": ["sum", "max"]
}))
Enunciado: Trabajá con el dataset Titanic para realizar un análisis exploratorio corto.
Intentá resolverlo sin ver la solución y después contrastá con el ejemplo.
El clásico dataset Titanic, disponible en Seaborn, es perfecto para un EDA completo.
Antes de comenzar, instalá seaborn
si todavía no lo tenés disponible:
pip install seaborn
La función sns.load_dataset("titanic")
descarga una versión preprocesada del dataset histórico con información de pasajeros (edad, sexo, clase, tarifa, puerto de embarque, etc.), lista para usarse sin descargas adicionales.
import seaborn as sns
import matplotlib.pyplot as plt
titanic = sns.load_dataset("titanic").copy()
print(titanic.head())
print(titanic.info())
print(titanic.describe())
titanic["age"] = titanic["age"].fillna(titanic["age"].mean())
titanic["embarked"] = titanic["embarked"].fillna("S")
titanic["is_child"] = titanic["age"] < 18
print()
print("Supervivencia por sexo:")
print(titanic.groupby("sex", observed=False)["survived"].mean())
print()
print("Supervivencia por clase:")
print(titanic.groupby("class", observed=False)["survived"].mean())
print()
print("Supervivencia por niños vs adultos:")
print(titanic.groupby("is_child", observed=False)["survived"].mean())
ax = titanic["age"].plot(kind="hist", bins=20, title="Distribución de edades en el Titanic")
ax.set_xlabel("Edad")
plt.show()
dropna
, fillna
y estadísticos simples.groupby
, agregaciones y cálculos derivados.