La estadística descriptiva reúne técnicas para organizar, resumir y describir datos. Sus herramientas típicas son:
👉 En pocas palabras: contarte “cómo son” tus datos sin sacar conclusiones generales sobre una población más grande.
Regla mental: descriptiva = foto del presente; inferencial = estimación + azar/margen de error.
Todos los ejemplos son auto-contenidos. Si querés, instalá librerías con:
pip install pandas numpy
# -*- coding: utf-8 -*-
# Script 1: dataset de ejemplo y exploración básica
import numpy as np
import pandas as pd
np.random.seed(42)
n = 200
datos = pd.DataFrame({
"edad": np.random.normal(loc=35, scale=10, size=n).round(0).clip(18, 70).astype(int),
"ingreso_mensual": np.random.normal(loc=8500, scale=2000, size=n).round(0).clip(2000, 20000).astype(int),
"propina": np.random.gamma(shape=2.0, scale=150.0, size=n).round(0).astype(int)
})
print("Vista rápida:")
print(datos.head())
print()
print("Info del DataFrame:")
datos.info()
print()
print("Resumen describe():")
print(datos.describe())
Qué mirar:
head()
y info()
te muestran columnas, tipos y nulos.describe()
resume conteo, media, desvío, mínimos/máximos y cuartiles.# -*- coding: utf-8 -*-
# Script 2: medidas descriptivas clave
import numpy as np
import pandas as pd
np.random.seed(42)
n = 200
datos = pd.DataFrame({
"edad": np.random.normal(loc=35, scale=10, size=n).round(0).clip(18, 70).astype(int),
"ingreso_mensual": np.random.normal(loc=8500, scale=2000, size=n).round(0).clip(2000, 20000).astype(int),
})
# Tendencia central
media_ing = datos["ingreso_mensual"].mean()
mediana_ing = datos["ingreso_mensual"].median()
moda_ing = datos["ingreso_mensual"].mode() # puede devolver más de un valor
# Dispersión
rango_ing = datos["ingreso_mensual"].max() - datos["ingreso_mensual"].min()
var_ing = datos["ingreso_mensual"].var(ddof=1) # varianza muestral
std_ing = datos["ingreso_mensual"].std(ddof=1) # desviación estándar muestral
cv_ing = std_ing / media_ing # coeficiente de variación
print(f"Media ingreso: {media_ing:.2f}")
print(f"Mediana ingreso: {mediana_ing:.2f}")
print(f"Moda ingreso (primeros 5 valores si hay varias): {list(moda_ing[:5])}")
print(f"Rango ingreso: {rango_ing}")
print(f"Varianza ingreso: {var_ing:.2f}")
print(f"Desvío estándar ingreso: {std_ing:.2f}")
print(f"Coeficiente de variación ingreso: {cv_ing:.3f}")
Claves:
ddof=1
→ fórmula muestral (divide por N−1).# -*- coding: utf-8 -*-
# Script 3: percentiles y agregaciones personalizadas
import numpy as np
import pandas as pd
np.random.seed(42)
n = 200
x = pd.Series(np.random.normal(100, 15, n))
resumen = x.agg(
media="mean",
mediana="median",
desvio="std",
p10=lambda s: s.quantile(0.10),
p25=lambda s: s.quantile(0.25),
p75=lambda s: s.quantile(0.75),
p90=lambda s: s.quantile(0.90),
)
print(resumen.round(2))
Claves:
# -*- coding: utf-8 -*-
# Script 4: misma media ≠ mismo comportamiento (dispersión distinta)
import numpy as np
import pandas as pd
np.random.seed(123)
a = np.random.normal(loc=50, scale=5, size=500)
b = np.random.normal(loc=50, scale=15, size=500)
df = pd.DataFrame({"A": a, "B": b})
print("Medias:")
print(df.mean().round(2), "
")
print("Desvíos:")
print(df.std(ddof=1).round(2), "
")
print("Resumen describe():")
print(df.describe().round(2))
Idea: A y B tienen la misma media (~50), pero B es mucho más variable. Solo mirar la media oculta riesgos.