Python

Creación de histogramas con Matplotlib en Python

Los histogramas permiten obtener una visión general de la distribución existente en una muestra de datos. Para lo que dibuja barras asociadas a un rango de valores, siendo la altura de estas proporcional a la frecuencia de aparición de estos. Siendo una representación gráfica muy popular. Existiendo una función para dibujar histogramas con Matplotlib en Python a partir de cualquier conjunto de datos. Veamos a continuación como es el funcionamiento básico de este método.

Creación de histogramas básicos con Matplotlib

La función para la creación de histogramas en Matplotlib es hist(). Una función que solamente tiene un parámetro obligatorio, el conjunto de datos con el que se desea realizar la gráfica. Así, para comprobar el funcionamiento de esta, se puede crear un conjunto de datos aleatorio que siga la distribución normal estándar mediante la función randn() de NumPy y representarla. Siendo esto lo que se hace en el siguiente código.

import numpy as np
import matplotlib.pyplot as plt

data = np.random.RandomState(0).randn(400)

(counts, bins, patches) = plt.hist(data)
plt.xlabel("Datos")
plt.ylabel("Eventos")
plt.show()

Obteniendo como resultado la siguiente figura cuando al ejecutarlo.

Histograma básico creado con Matplotlib en Python

En esta figura se puede observar que los todos datos se encuentran entre -3 y 3, con una mayor frecuencia en torno a 0. Los valores que se esperarían de una distribución normal estándar. Nótese que la función también devuelve una tupla con tres elementos relacionados con la gráfica:

  • count: un vector con el recuento de elementos para cada uno de los bins.
  • bins: un vector con los valores en los que comienza y finaliza cada uno de los bins, por lo contiene un elemento más que el anterior.
  • patches: el contendor de la figura.

Opciones para el número de bins y uso de la densidad

Dos opciones que se usan habitualmente a la hora de crear los histogramas con Matplotlib son bins, con la que se puede indicar el número de bins que se desea para la figura, y density, mediante el cual se puede indicar que se use para el eje y la densidad de probabilidad en lugar de la frecuencia. Por ejemplo, en el siguiente código se ha cambiado el número de bins a 12 y las unidades del eje de ordenadas.

plt.hist(data, bins=12, density=True)
plt.xlabel("Datos")
plt.ylabel("Probabilidad")
plt.show()

Si se ejecuta este código se obtiene la siguiente figura como resultado.

Histograma con 12 bins en el que se representa la frecuencia de ocurrencia

En este caso el cambio más importante respecto a la figura anterior es el número de bins usados. En el eje de ordenadas solamente se tiene un cambio de unidades. Nótese que si no se indica el número de bins este valor será seleccionado en base al número de elementos y la dispersión de estos.

Incluir el CDF en los histogramas con Matplotlib

Opcionalmente la función hist() puede dibujar los valores acumulados del histograma, los que se puede usar como una aproximación de la función distribución acumulada (CDF, del inglés Cumulative Distribution Function). Para lo que se te tiene que indicar el valor verdadero en la propiedad cumulative de la función, tal como se puede ver en el siguiente ejemplo.

plt.hist(data, bins=12, density=True)
plt.hist(data, bins=12, density=True, cumulative=True, label='CDF', histtype='step')
plt.xlabel("Datos")
plt.ylabel("Probabilidad")
plt.show()

Lo que produce la siguiente figura.

Histograma y gráfica con los valores de densidad acumulados creados con Matplotlib

Nótese que también se ha usado la opción histtype='step' para indicar que no se rellene la barras, gracias a lo que se pueden ver tanto el histograma como la función acumulada en la misma figura.

Conclusiones

Los histogramas son unas gráficas bastante populares, por lo que Matplotlib dispone de una función para crearlas de una forma completamente automática. Simplificando mucho el trabajo del analista de datos.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

9 horas ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

2 días ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

1 semana ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

1 semana ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

2 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

This website uses cookies.