Guía de tecnologías

Módulo statistics de Python: guía práctica

9 min read Python Actualizado 20 Oct 2025
Módulo statistics de Python — guía práctica
Módulo statistics de Python — guía práctica

El módulo statistics de la biblioteca estándar de Python ofrece funciones sencillas para cálculos estadísticos comunes: medias, medianas, modos, varianza, desviación estándar, percentiles, correlación y regresión lineal simple. Es ideal para cálculos interactivos, explicaciones pedagógicas y tareas ligeras; para análisis a gran escala o visualización avanzada conviene usar NumPy, SciPy, pandas o statsmodels.

Índice rápido

  • ¿Qué es el módulo statistics?
  • Estadística descriptiva: medias, medianas, modos y dispersión
  • Regresión y correlación lineal simple
  • Distribución normal y NormalDist
  • ¿Y NumPy, SciPy, pandas, statsmodels?
  • Cuándo usar statistics y cuándo no
  • Enfoque práctico: metodología paso a paso
  • Chequeos por rol y lista de verificación
  • Comparación rápida: statistics vs otras librerías
  • Caja de hechos, glosario y recursos

Calculadora con números y logotipos de Python alrededor.

¿Qué es el módulo statistics?

El módulo statistics es una colección de funciones y clases para cálculos estadísticos comunes incluida en la biblioteca estándar de Python. No necesita instalación adicional y está disponible en entornos donde se ejecuta Python estándar. Está pensado para cálculos sencillos, enseñanza y sesiones interactivas (intérprete, IPython, Jupyter).

Importación básica:

import statistics

En sesiones interactivas puede convenir importar funciones concretas al espacio de nombres para escribir menos:

from statistics import mean, median, stdev

Nota importante: importar nombres al espacio global es práctico en un REPL o notebook, pero en scripts grandes puede provocar conflictos de nombres. En esos casos use import statistics y llame a statistics.mean(…).

Estadística descriptiva

Estadísticas descriptivas en el intérprete interactivo de Python usando el módulo statistics.

La estadística descriptiva resume características clave de un conjunto de datos: tendencia central, dispersión y forma. El módulo incluye las funciones más usadas:

  • mean, fmean (media aritmética)
  • geometric_mean (media geométrica)
  • harmonic_mean (media armónica)
  • median, median_low, median_high, median_grouped
  • mode, multimode
  • stdev, pstdev (desviación estándar)
  • variance, pvariance (varianza)
  • quantiles (percentiles)
  • min y max (funciones integradas de Python)

Ejemplos prácticos y explicaciones cortas.

Datos de ejemplo:

# Lista de muestra
a = [4, 4, 3, 6]

Media aritmética (promedio):

from statistics import mean
mean(a)  # → 4.25

Nota: la media aritmética es la suma de los valores dividida entre el número de observaciones. Si los datos tienen valores extremos (outliers), la media puede resultar poco representativa.

Media geométrica (útil para tasas de crecimiento):

from statistics import geometric_mean
geometric_mean(a)  # calcula la raíz enésima del producto

Media armónica (útil para promediar tasas como velocidades):

from statistics import harmonic_mean
harmonic_mean(a)

Mediana (valor central):

from statistics import median
median(a)  # → valor que divide la muestra en dos mitades

Modo (valor más frecuente):

from statistics import mode
mode(a)  # → 4 en este ejemplo
# Si hay varios modos, multimode devuelve una lista
from statistics import multimode
multimode([1, 1, 2, 2, 3])  # → [1, 2]

Dispersión: varianza y desviación estándar

  • pvariance / pstdev: varianza y desviación estándar poblacionales
  • variance / stdev: varianza y desviación estándar muestrales
from statistics import stdev, pstdev, variance, pvariance
stdev(a)   # desviación estándar muestral
pstdev(a)  # desviación estándar poblacional
variance(a)  # varianza muestral
pvariance(a) # varianza poblacional

Percentiles y cuantiles:

from statistics import quantiles
quantiles(a, n=4)  # devuelve cuartiles por defecto si n=4
# Para percentiles: quantiles(a, n=100)[x-1]

Cómo calcular una media ponderada (patrón manual):

El módulo statistics no tiene una función dedicada denominada weighted_mean en todas las versiones; la forma portable y explícita es calcularla manualmente:

values = [4, 4, 3, 6]
weights = [1, 2, 3, 4]
weighted_mean = sum(v * w for v, w in zip(values, weights)) / sum(weights)

Alternativa con NumPy (si lo tiene instalado):

import numpy as np
np.average(values, weights=weights)

Consejo práctico: elija median o trimmed mean (media recortada; no incluida en statistics) cuando haya outliers. Para media geométrica y armónica use las funciones dedicadas.

Regresión y correlación

La regresión lineal simple y la correlación sirven para cuantificar la relación entre dos variables.

Regresión lineal simple (ajuste y = m*x + b):

from statistics import linear_regression
x = [1, 2, 3, 4, 5]
y = [5, 7, 9, 11, 13]
# Devuelve (slope, intercept)
slope, intercept = linear_regression(x, y)
# En este ejemplo slope == 2, intercept == 3

Este método implementa una regresión simple (dos variables) mediante mínimos cuadrados ordinarios. Devuelve parámetros que permiten predecir y dado x. No genera gráficos ni ajuste multivariante.

Correlación:

from statistics import correlation
correlation(x, y)  # coeficiente de correlación de Pearson

El coeficiente de correlación varía entre -1 (correlación negativa perfecta) y +1 (correlación positiva perfecta). En datos reales rara vez llegará a ±1.

Limitaciones: linear_regression y correlation son adecuadas para análisis exploratorios y aprendizaje. Para modelos con múltiples variables predictoras, intervalos de confianza, p-valores o diagnósticos de ajuste, utilice statsmodels o scikit-learn.

Distribución normal y NormalDist

La distribución normal (campana) es una aproximación útil en muchos contextos. statistics incluye la clase NormalDist para trabajar con distribuciones normales de forma práctica.

Ejemplo: construir una NormalDist y calcular probabilidades acumuladas (CDF) y densidad (PDF).

from statistics import NormalDist
# Supongamos media 175.1 y desviación estándar 15.56
men_height = NormalDist(mu=175.1, sigma=15.56)
# Probabilidad acumulada hasta 180 cm
p_hasta_180 = men_height.cdf(180)
# Probabilidad entre 160 y 180 cm
p_160_180 = men_height.cdf(180) - men_height.cdf(160)
# Densidad en un punto
densidad_175 = men_height.pdf(175)

Interpretación: la cdf devuelve la probabilidad acumulada P(X ≤ x). Para intervalos simétricos respecto a la media resta cdf(upper) - cdf(lower).

Advertencia: asegúrese de que los datos realmente siguen (o se aproximan a) una normal; si la distribución está fuertemente sesgada, la normal puede dar estimaciones engañosas.

¿Y NumPy, SciPy, pandas, statsmodels?

Cuando conviene usar otras librerías:

  • NumPy: operaciones numéricas eficientes para arrays grandes; funciones vectorizadas; averages y muchas utilidades.
  • pandas: manejo y limpieza de datos, series temporales, DataFrame; integraciones con estadística descriptiva y transformación de datos.
  • SciPy: funciones estadísticas más avanzadas, ajuste de distribuciones y tests estadísticos.
  • statsmodels: modelos estadísticos completos (regresión lineal/multivariante con inferencia, p-valores, intervalos de confianza).
  • scikit-learn: modelos predictivos y evaluación para machine learning.

Regla general: use statistics para cálculos rápidos y explicaciones pedagógicas; use las otras librerías cuando:

  • trabaja con datos grandes en arrays (NumPy/pandas),
  • necesita tests estadísticos avanzados o ajuste de distribuciones (SciPy),
  • requiere inferencia y diagnóstico de modelos (statsmodels),
  • necesita pipelines de machine learning (scikit-learn).

Cuándo usar statistics y cuándo no

Cuándo usar statistics:

  • Tareas interactivas de exploración rápida.
  • Ejemplos didácticos y enseñanza de conceptos básicos.
  • Scripts pequeños y utilidades que no requieren dependencias externas.

Cuándo evitar statistics:

  • Conjuntos de datos grandes donde el rendimiento importa.
  • Análisis donde necesita regresión multivariante, tests robustos o modelado estadístico profundo.
  • Cuando necesita reproducibilidad robusta con pipelines y transformaciones complejas (use pandas + scikit-learn).

Contraejemplos (cuando falla):

  • Intentar calcular percentiles y esperar exactamente la misma definición que otra herramienta: distintas herramientas usan interpolaciones distintas.
  • Usarlo para análisis de series temporales largas: pandas es más adecuado.
  • Esperar inferencia estadística completa (p-valores, intervalos fiables) con linear_regression: no es su objetivo.

Enfoque práctico: metodología paso a paso

Mini-metodología para un análisis exploratorio rápido

  1. Inspección inicial: tamaño, tipos y valores nulos.
    • len(data), min/max, valores nulos.
  2. Estadística descriptiva: mean, median, mode, stdev, quantiles.
  3. Visualización rápida (si procede): histograma, boxplot, scatter.
  4. Correlaciones y regresión simple para hipótesis iniciales.
  5. Validación: muestreo, comprobación de supuestos (normalidad, homocedasticidad) si va a inferir.
  6. Escalar a herramientas más potentes si necesita modelado, pruebas o rendimiento.

Ejemplo de checklist de 6 pasos (script o notebook):

  • Cargar datos y revisar tipos
  • Calcular media, mediana, desviación estándar
  • Mostrar histograma y boxplot (matplotlib o pandas)
  • Calcular correlaciones relevantes
  • Ajustar regresión lineal simple y evaluar residuales
  • Decidir si escalar a statsmodels/NumPy/pandas

Chequeos por rol

Data scientist

  • Verificar supuestos antes de inferir.
  • Usar statsmodels para regresión y obtener p-valores.

Analista de datos

  • Empezar con statistics o pandas.describe para obtener resúmenes.
  • Crear gráficos en Jupyter para comunicar resultados.

Desarrollador de software

  • Evitar importar nombres en el espacio global en aplicaciones de producción.
  • Preferir pruebas unitarias para funciones que usan estadísticas.

Estudiante

  • Usar statistics para aprender definiciones: media, mediana, moda, varianza.
  • Reproducir cálculos a mano y comparar con outputs del módulo.

Comparación rápida: statistics vs otras librerías

ObjetivostatisticsNumPypandasSciPystatsmodels
Cálculo rápido de media/mediana/moda
Manejo de grandes arraysNo (sencillo)Sí (vectorizado)Sí (DataFrame)Parcial
Regresión simpleSí (linear_regression)No (herramientas básicas)NoNoSí (completo)
Tests estadísticos y ajuste de distribucionesLimitadoLimitadoLimitadoSí (modelos)
Facil de usar en REPL/NotebookMuyBuenoBuenoRequiere instalaciónRequiere instalación

Caja de hechos (fact box)

  • Incluido en la biblioteca estándar de Python: disponible sin instalar paquetes adicionales.
  • Funciones clave: mean, median, mode, stdev, variance, quantiles, NormalDist, linear_regression, correlation.
  • Uso típico: cálculos pequeños, enseñanza y análisis exploratorio ligero.

Snippets y hoja de referencia rápida (cheat sheet)

  • Media: statistics.mean(data)
  • Mediana: statistics.median(data)
  • Modo: statistics.mode(data) o statistics.multimode(data)
  • Varianza muestral: statistics.variance(data)
  • Desviación estándar muestral: statistics.stdev(data)
  • Cuantiles: statistics.quantiles(data, n=4)
  • NormalDist: NormalDist(mu, sigma)
  • Regresión lineal simple: statistics.linear_regression(x, y)
  • Correlación: statistics.correlation(x, y)

Ejemplo de flujo de trabajo mínimo en un notebook:

# 1. Carga de datos
# 2. Resumen rápido
from statistics import mean, median, stdev, quantiles
print('Media', mean(values))
print('Mediana', median(values))
print('Desviación', stdev(values))
print('Cuartiles', quantiles(values))

# 3. Relación entre dos variables
from statistics import correlation, linear_regression
r = correlation(x, y)
slope, intercept = linear_regression(x, y)

Consideraciones de compatibilidad y migración

  • El módulo forma parte de la biblioteca estándar, por lo que su uso no añade dependencias.
  • Si su proyecto crece y necesita rendimiento o funciones avanzadas, planifique migrar a NumPy/pandas/SciPy. Mantenga una capa de abstracción (funciones utilitarias) para facilitar la sustitución.

Recomendación de migración rápida:

  1. Identifique funciones statistics usadas.
  2. Reemplace cálculos intensivos por operaciones vectorizadas en NumPy.
  3. Si usa DataFrames, migre a pandas y utilice sus métodos integrados.
  4. Para inferencia, reimplemente modelos con statsmodels o scikit-learn según corresponda.

Riesgos y mitigaciones (breve)

  • Riesgo: usar statistics para inferencia avanzada → mitigación: validar supuestos y usar librerías estadísticas sólidas.
  • Riesgo: confundir resultados poblacionales vs muestrales (pstdev/pvariance vs stdev/variance) → mitigación: elegir la función adecuada y documentarlo.

Galería de casos límite

  • Datos con NaN/infinito: statistics fallará si la lista contiene valores no numéricos; limpie los datos antes (p. ej., [v for v in data if v is not None]).
  • Muestras pequeñas y modos: mode lanzará una excepción si no hay un modo único; use multimode para obtener todos los modos.

Glosario (1 línea cada término)

  • Media: promedio aritmético de valores.
  • Mediana: punto que divide los datos en dos mitades.
  • Moda: valor más frecuente.
  • Varianza: promedio de las desviaciones al cuadrado respecto a la media.
  • Desviación estándar: raíz cuadrada de la varianza.
  • CDF: función de distribución acumulada, P(X ≤ x).

Ejemplo completo: análisis rápido de alturas

from statistics import mean, median, stdev, NormalDist
heights = [160, 165, 170, 175, 180, 185, 190]
print('Media', mean(heights))
print('Mediana', median(heights))
print('Desviación muestral', stdev(heights))

nd = NormalDist(mu=mean(heights), sigma=stdev(heights))
print('Probabilidad hasta 180 cm', nd.cdf(180))

Resumen final

El módulo statistics es una herramienta ligera y directa para cálculo estadístico básico en Python. Es ideal para exploración rápida, enseñanza y scripts que no justifican añadir dependencias. Para análisis más complejos, con grandes volúmenes de datos o necesidad de inferencia sólida, opte por NumPy, pandas, SciPy o statsmodels.

Importante

  • En sesiones interactivas es práctico importar funciones al namespace; en producción evite colisiones de nombres.
  • Compruebe si necesita medidas poblacionales o muestrales y elija pstdev/pvariance o stdev/variance según corresponda.

Notas

  • No todas las funciones estadísticas avanzadas están en este módulo; otras librerías pueden ofrecer implementaciones más completas.
  • Mantenga sus scripts documentados para evitar confusiones entre definiciones numéricas (por ejemplo, distintas formas de interpolar percentiles).
Autor
Edición

Materiales similares

Activar hápticos en el teclado del iPhone
Guías iPhone

Activar hápticos en el teclado del iPhone

Versión de escritorio de Facebook en Android
Redes sociales

Versión de escritorio de Facebook en Android

Evitar detección AdBlock en YouTube — Guía 2025
Guías Técnicas

Evitar detección AdBlock en YouTube — Guía 2025

Bloquea rastreadores en navegador y móvil
Privacidad

Bloquea rastreadores en navegador y móvil

AnDoSid y pruebas de estrés en Android — guía segura
Ciberseguridad

AnDoSid y pruebas de estrés en Android — guía segura

Ver cualquier documento en línea fácilmente
Productividad

Ver cualquier documento en línea fácilmente