domingo, 7 de julio de 2019

Data Science: Visualización básica de un dataset: Histograma de Frecuencias

El histograma de frecuencias, o gráfico de barras de toda la vida, es la forma más básica de visualización de datos.

Continuando con la entrada anterior (Scatterplot) vamos a ver cómo crear un histograma de frecuencias.

Introducimos el siguiente comando:

plt.hist(data["Day Calls"], bins = 20)
plt.title("Histograma del número de llamadas al día")
plt.xlabel("Número de llamadas al día")
plt.ylabel("Frecuencia")

La primera línea es la creación del gráfico en sí, donde indicamos por parámetro que el dato a visualizar va a ser la columna "Day Calls" del dataset, y la variable "bins" es el número de barras que queremos en el gráfico. Las demás líneas sólo añaden título e indicadores a los ejes.

El resultado es el siguiente:


Cabe destacar, que podemos personalizar las barras indicando los rangos de números que queremos entre ellas, como en el siguiente ejemplo:

plt.hist(data["Day Calls"], bins = [0, 30, 60, 90, 120, 150, 180])
plt.title("Histograma del número de llamadas al día")
plt.xlabel("Número de llamadas al día")
plt.ylabel("Frecuencia")

Que daría el siguiente resultado:


Por norma general, se suele utilizar la fórmula de la regla de Sturges para obtener el número de barras óptimo en un histograma de frecuencias. ¿Qué es la regla de Sturges? Pues simplemente lo buscamos en Wikipedia:


Muy bien, vamos a reproducir la fórmula en nuestro código.

Lo primero es obtener el tamaño de la muestra, que es el número de filas que tiene nuestro dataset, asñi que ejecutamos el comando:

data.shape

En mi caso, me devuelve 3333 filas.

Para replicar la fórmula de Sturges vamos a necesitar poder calcular logaritmos, así que tenemos que importar la librería numpy a nuestro proyecto. Así, junto a las librerias pandas y matplotlib.pyplot importamos la nueva librería:

import numpy as np

Ahora ya estamos listos. Guardamos la fórmula en una variable:

c = 1+np.log2(3333)

Sin embargo, el número que nos devuelve es decimal, y necesitamos un número entero, así que lo redondeamos:

c = np.ceil(1+np.log2(3333))

Ahora bien, aunque el número esté redondeado, su tipo de dato sigue siendo decimal, así que lo transformamos a número entero:

c = int(np.ceil(1+np.log2(3333)))

Ahora ya sí tenemos la fórmula completa. Sólo tenemos que crear otra vez el gráfico pasando la variable "c" como número de barras:

plt.hist(data["Day Calls"], bins = c)
plt.title("Histograma del número de llamadas al día")
plt.xlabel("Número de llamadas al día")
plt.ylabel("Frecuencia")

Y obtenemos el siguiente resultado:


Y eso es todo.

No hay comentarios:

Publicar un comentario