Seaborn#

¿Qué es Seaborn?#

Seaborn es una librería de visualización de datos basada en MatPlotLib. Los gráficos que produce Seaborn no son únicamente muy atractivos, sino que resultan muy funcionales. Seaborn ha sido pensada para el fácil análisis estadístico de los datos. Por esta razón, encontrarás que la librería incluye una importante colección de funciones de análisis estadístico.

¿Cómo se instala?#

Para ver instrucciones generales de instalación puedes visitar la página oficial. Allí encontrarás indicaciones específicas para tu sistema operativo y/o tu gestor de entornos y paquetes. Aquí supondremos que estás trabajando en tu entorno de conda, así que el comando que debes teclear en la terminal es:

conda install -c conda-forge seaborn

¿Cómo se usa?#

Importando Seaborn#

Seaborn reconoce como argumentos de entrada objetos de tipo “pandas.DataFrame” y “numpy.ndarray”. Por ese motivo importaremos la librería Pandas y Numpy en este tutorial junto con Seaborn:

import seaborn as sns
import numpy as np
import pandas as pd

3 Clusters en 2 dimensiones#

¿Recuerdas los k-means clusters que calculaste en uno de los retos de la semana 2? Tomemos esa distribución de puntos que hemos construido agrupados en tres clusters para hacer una representación gráfica en la que incluir las distribuciones marginales de cada cluster.

Esta era la gráfica que representamos en el reto para los 3 clusters:

from sklearn import datasets
import matplotlib.pyplot as plt

dataset, membership = datasets.make_blobs(n_samples=500, n_features=2, centers=3, cluster_std=1.0)

plt.scatter(dataset[(membership==0),0], dataset[(membership==0),1], color='r')
plt.scatter(dataset[(membership==1),0], dataset[(membership==1),1], color='g')
plt.scatter(dataset[(membership==2),0], dataset[(membership==2),1], color='b')
plt.show()
../_images/9edb08b027f34ffad2c517266dc66492fcd26f5411ce5e04879fdcd53cba3913.png

Construyamos ahora un DataFrame de Pandas con los datos anteriores, pero hacer una de las columnas no numérica, diremos que el cluster 0 corresponde a la especie “A”, el cluster 1 a la especie “B” y el cluster 2 a la especie “C”:

cluster_a_especie = {0:'A', 1:'B', 2:'C'}
especies = [cluster_a_especie[ii] for ii in membership]
df = pd.DataFrame({'Atributo 1':dataset[:,0], 'Atributo 2':dataset[:,1], 'Especie':especies})
df
Atributo 1 Atributo 2 Especie
0 4.713753 -2.698828 B
1 -7.577563 8.167813 C
2 4.022792 -3.734464 B
3 -2.906265 -6.227590 A
4 -6.518599 9.951264 C
... ... ... ...
495 4.269663 -3.084059 B
496 -6.136778 10.889047 C
497 -6.833954 9.428000 C
498 4.091155 -4.559685 B
499 -5.001906 -8.101855 A

500 rows × 3 columns

Y hagamos uso de la función jointplot:

sns.jointplot(data=df, x="Atributo 1", y="Atributo 2", hue="Especie")
plt.show()
../_images/1d8011c12553cee582be598b58cd7bc94079295967bf39bebef9eeddee32472f.png

5 clusters en 4 dimensiones#

Supongamos ahora que en lugar de tener una distribución de datos correspondiente a 2 atributos de 3 especies, tenemos 4 atributos de 5 especies. O en términos de clusters y dimensiones, hemos encontrado 5 clusters en un espacio 4-dimensional. ¿Cómo vamos a representar eso gráficamente? Seaborn nos ofrece una herramienta sencilla para hacer una primera visualización de todas las proyecciones bi-dimensionales posibles distintas junto con las distribuiones marginales de cada cluster. Veamos el siguiente ejemplo.

Construimos en primer lugar los datos que vamos a representar:

dataset, membership = datasets.make_blobs(n_samples=500, n_features=4, centers=5, cluster_std=1.0)

Y almacenamos los datos en un DataFrame de Pandas con el nombre apropiado de los atributos y las especies:

cluster_a_especie = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
especies = [cluster_a_especie[ii] for ii in membership]
df = pd.DataFrame({'Atributo 1':dataset[:,0],
                   'Atributo 2':dataset[:,1],
                   'Atributo 3':dataset[:,2],
                   'Atributo 4':dataset[:,3],
                   'Especie':especies})

Hagamos uso ahora de la función pairplot:

sns.pairplot(data=df, hue="Especie")
plt.show()
../_images/56faa52165102b6f27daf977e9a002750d20713ded727db7a269cb33ca3c5537.png