Lección 17 de 29•Módulo 4: Estadística Aplicada
17. Estadística Descriptiva con NumPy
Media, mediana, desviación estándar, percentiles y distribuciones
20 minutos
Domina NumPy para cálculos estadísticos rápidos: media, mediana, desviación estándar, percentiles y más.
Introducción a NumPy
import numpy as np
import pandas as pd
# Arrays de NumPy
ventas = np.array([1200, 1450, 1100, 1800, 1950, 2100, 1750])
print(f"Tipo: {type(ventas)}")
print(f"Shape: {ventas.shape}")
print(f"Dtype: {ventas.dtype}")
# Operaciones vectorizadas (ultra rápidas)
ventas_con_iva = ventas * 1.21
descuento_10pct = ventas * 0.9
Medidas de tendencia central
# Media (promedio)
media = np.mean(ventas)
print(f"Media: ${media:,.2f}")
# Mediana (valor central)
mediana = np.median(ventas)
print(f"Mediana: ${mediana:,.2f}")
# Diferencia media vs mediana
if media > mediana:
print("Distribución sesgada a la derecha (valores altos atípicos)")
elif media < mediana:
print("Distribución sesgada a la izquierda (valores bajos atípicos)")
else:
print("Distribución simétrica")
Medidas de dispersión
# Rango
rango = np.ptp(ventas) # peak-to-peak
print(f"Rango: ${rango}")
# Varianza
varianza = np.var(ventas)
print(f"Varianza: {varianza:,.2f}")
# Desviación estándar
desv_std = np.std(ventas)
print(f"Desviación estándar: ${desv_std:,.2f}")
# Coeficiente de variación (dispersión relativa)
cv = (desv_std / media) * 100
print(f"Coeficiente de variación: {cv:.1f}%")
Percentiles y cuartiles
# Percentiles
p25 = np.percentile(ventas, 25)
p50 = np.percentile(ventas, 50) # = mediana
p75 = np.percentile(ventas, 75)
p90 = np.percentile(ventas, 90)
print(f"P25: ${p25:,.0f}")
print(f"P50 (mediana): ${p50:,.0f}")
print(f"P75: ${p75:,.0f}")
print(f"P90: ${p90:,.0f}")
# IQR (Interquartile Range)
iqr = p75 - p25
print(f"IQR: ${iqr:,.0f}")
Ejemplo práctico: Análisis de dataset completo
# Dataset de ventas mensual
np.random.seed(42)
ventas_mes = np.random.normal(loc=50000, scale=10000, size=1000).clip(min=0)
print("="*70)
print("ANÁLISIS ESTADÍSTICO DE VENTAS MENSUALES")
print("="*70)
print(f"\n📊 MEDIDAS DE TENDENCIA CENTRAL:")
print(f" Media: ${np.mean(ventas_mes):,.2f}")
print(f" Mediana: ${np.median(ventas_mes):,.2f}")
print(f" Moda: ${pd.Series(ventas_mes).mode()[0]:,.2f}")
print(f"\n📏 MEDIDAS DE DISPERSIÓN:")
print(f" Desviación estándar: ${np.std(ventas_mes):,.2f}")
print(f" Varianza: ${np.var(ventas_mes):,.2f}")
print(f" Rango: ${np.ptp(ventas_mes):,.2f}")
print(f" CV: {(np.std(ventas_mes) / np.mean(ventas_mes)) * 100:.1f}%")
print(f"\n📈 PERCENTILES:")
for p in [10, 25, 50, 75, 90, 95, 99]:
valor = np.percentile(ventas_mes, p)
print(f" P{p}: ${valor:,.2f}")
print(f"\n🔍 VALORES EXTREMOS:")
print(f" Mínimo: ${np.min(ventas_mes):,.2f}")
print(f" Máximo: ${np.max(ventas_mes):,.2f}")
# Detectar outliers con IQR
Q1 = np.percentile(ventas_mes, 25)
Q3 = np.percentile(ventas_mes, 75)
IQR = Q3 - Q1
limite_inf = Q1 - 1.5 * IQR
limite_sup = Q3 + 1.5 * IQR
outliers = ventas_mes[(ventas_mes < limite_inf) | (ventas_mes > limite_sup)]
print(f"\n⚠️ OUTLIERS DETECTADOS:")
print(f" Total: {len(outliers)} ({len(outliers)/len(ventas_mes)*100:.1f}%)")
print(f" Rango normal: ${limite_inf:,.2f} - ${limite_sup:,.2f}")
Resumen de la lección
✅ NumPy es ultra rápido para operaciones numéricas ✅ Media vs Mediana detectan sesgos en distribución ✅ Desviación estándar mide dispersión de datos ✅ Percentiles dividen datos en partes iguales ✅ IQR detecta outliers de forma robusta
🎯 Próxima lección: 18. Distribuciones y Probabilidades
En la siguiente lección aprenderás distribuciones normales, binomiales y Poisson. 🚀
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.