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

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

1 día ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

2 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

6 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.