Table of Contents
Introducción
La visualización como herramienta toma parte del análisis proveniente del científico de datos para extraer conclusiones de un conjunto de datos. En el artículo de hoy vamos a pasar por la librería Matplotlib. Matplotlib es una librería de terceros para la visualización de datos. Funciona bien en combinación con NumPy, SciPy y Pandas.
Plot básico, visualización de funciones y visualización de datos
The 2009 data set ‘Wine Quality Dataset’ elaborated by Cortez et al. available at UCI Machine Learning, is a well-known dataset that contains wine quality information.It includes data about red and white wine physicochemical properties and a quality score. Before we start, we are going to visualize the head a little example dataset:
Plot básico
Matplotlib es una librería que tiene un poder infinito para representar datos de casi cualquier forma posible. Para entender cómo funciona, vamos a empezar con las instrucciones más básicas y poco a poco vamos a aumentar la dificultad.
La forma más útil de comprobar la distribución de los datos es representándola, así que vamos a empezar pintando una serie de puntos. Para ello, podemos utilizar tanto plt.plot como plt.scatter para visualizarlos.
Lista de distribución de puntos de plot
Import matplotlib as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 21])
Representación de una lista de puntos mediante la función `plot`:
Fig 1. Trazado de la lista de puntos utilizando plt.plot y plt.scatter plot. La diferencia entre ambos viene con el control sobre el color, la forma y el tamaño de los puntos. En plt.scatter tienes más control en la apariencia de cada punto.
Import matplotlib as plt
plt.scatter([1, 2, 3, 4], [1, 4, 9, 16])
plt.axis([0, 6, 0, 21])
Representación de una lista de puntos mediante la función `scatter`:
points = [[1,2,3,4], [1,4,9,16]]
plt.plot(points[0], points[1], 'g^')
plt.plot([x * 2 for x in points[0]], points[1], 'r--')
plt.plot([x * 2.3 for x in points[0]], points[1], 'bs')
plt.axis([0, 15, 0, 21])
Fig. 2. Gráfico de 3 listas de puntos diferentes. La función de gráfico de dispersión permite personalizar la forma de los diferentes puntos
Visualización de funciones
A veces queremos pintar una serie de puntos basándonos en el comportamiento de una determinada función. Para ilustrar este ejemplo vamos a utilizar la función seno(2πx). Como verás, vamos a definir previamente la función por lo que podríamos utilizar cualquier función que creemos, no tiene por qué estar predeterminada.
Representando una función:
Import matplotlib as plt
Import numpy as np
def sin(t):
return np.sin(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
plt.scatter(t1, sin(t1))
Fig. 3. Representación de una función con puntos y líneas utilizando las funciones de gráfico de dispersión y gráfico de la biblioteca matplotlib
Ahora haremos la misma representación pero utilizando una línea que pasa por todos estos puntos.
Import matplotlib as plt
Import numpy as np
def sin(t):
return np.sin(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
plt.plot(t1, sin(t1), 'b')
Visualización de datos
Vamos a empezar con algunas visualizaciones básicas pero muy útiles cuando empezamos a estudiar nuestros datos. Para ello vamos a utilizar el conjunto de datos de vino de calidad comentado anteriormente y vamos a aprender a representar un histograma de datos y una comparación entre dos columnas.
Representación de un histograma de una columna de nuestro conjunto de datos:
df_wine['fixed acidity'].hist(legend=True)
Fig 4
Comparación de dos columnas del conjunto de datos:
plt.figure(figsize=(7, 4))
plt.plot(df_wine['fixed acidity'], df_wine['quality'], 'ro')
plt.xlabel('quality')
plt.ylabel('fixed acidity')
Fig 5
Representación de un histograma de una columna de nuestro conjunto de datos:
plt.bar(df_wine['quality'], df_wine['fixed acidity'])
plt.xlabel('Quality')
plt.ylabel('Fixed Acidity')
Fig 6
Ahora vamos a subir un poco la dificultad y vamos a entrar en lo que Matplotlib llama Figures.
Matplotlib grafica tus datos en Figures (es decir, ventanas, widgets de Jupyter, etc.), cada una de las cuales puede contener uno o más ejes (es decir, un área donde los puntos pueden especificarse en términos de coordenadas x-y, o theta-r en un gráfico polar, o x-y-z en un gráfico 3D, etc.).
La forma más sencilla de crear una figura con un eje es utilizando pyplot.subplots. Luego podemos usar Axes.plot para dibujar algunos datos en los ejes:
Fig 7
Vamos a empezar creando una figura vacía y vamos a añadirle un título.
Figura vacía con el título «This is an empty figure»:
fig = plt.figure()
fig.suptitle('This is an empty figure', fontsize=14, fontweight='bold')
ax = fig.add_subplot(111)
plt.show()
Como puedes ver `fig.add_subplot(111)` son parámetros del grid del subplot codificados como un solo entero.
Por ejemplo, «111» significa «cuadrícula 1×1, 1er subplot» y «234» significa «cuadrícula 2×3, 4to subplot».
La forma alternativa de add_subplot(111) es add_subplot(1, 1, 1)
A continuación escribiremos el nombre de lo que representa cada eje y añadiremos un pequeño cuadro de texto.
Trazar un texto dentro de una caja:
fig = plt.figure()
fig.suptitle('This is an empty figure', fontsize=14, fontweight='bold')
ax = fig.add_subplot(111)
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(0.3, 0.8, 'boxed italics text in data coords', style='italic',
bbox={'facecolor':'red', 'alpha':0.5, 'pad':10})
plt.show()
Ahora vamos a intentar escribir una anotación seguida de una flecha.
Traza una anotación:
fig = plt.figure()
fig.suptitle('This is an empty figure', fontsize=14, fontweight='bold')
ax = fig.add_subplot(111)
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.annotate('annotate', xy=(0.2, 0.1), xytext=(0.3, 0.4),
arrowprops=dict(facecolor='black', shrink=0.05))
plt.show()
Por último, algo muy útil que solemos necesitar es configurar el rango de los ejes para nuestra representación. Para ello vamos a utilizar el atributo axis y pasarle los valores que queramos configurar.
Cambia los rangos de los ejes a x -> [0, 10] y -> [0, 10]:
fig = plt.figure()
fig.suptitle('This is an empty figure', fontsize=14, fontweight='bold')
ax = fig.add_subplot(111)
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.axis([0, 10, 0, 10])
Entrenando tus habilidades
Si quieres llevar tus habilidades un nivel más allá en Ciencia de Datos, hemos creado un curso que puedes descargar gratuitamente aquí.