Biblioteca Seaborn para la visualización de datos en Python: Parte 2

B

En el artículo anterior, Biblioteca Seaborn para visualización de datos en Python: Parte 1, analizamos cómo se usa la Biblioteca Seaborn para trazar diagramas de distribución y categorías. En este artículo continuaremos nuestra discusión y veremos algunas de las otras funcionalidades que ofrece Seaborn para dibujar diferentes tipos de parcelas. Comenzaremos nuestra discusión con Matrix Plots.

Gráficos de matriz

Los gráficos de matriz son el tipo de gráficos que muestran datos en forma de filas y columnas. Los mapas de calor son los principales ejemplos de diagramas de matriz.

Mapas de calor

Los mapas de calor se utilizan normalmente para trazar la correlación entre columnas numéricas en forma de matriz. Es importante mencionar aquí que para dibujar diagramas de matriz, necesita tener información significativa tanto en filas como en columnas. Continuando con el tema del último artículo, tracemos las primeras cinco filas del conjunto de datos del Titanic para ver si tanto las filas como los encabezados de las columnas tienen información significativa. Ejecute el siguiente script:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('titanic')

dataset.head()

En la salida, verá el siguiente resultado:

En el resultado, puede ver que los encabezados de las columnas contienen información útil, como los pasajeros sobrevividos, su edad, tarifa, etc. Sin embargo, los encabezados de las filas solo contienen índices 0, 1, 2, etc. Para trazar diagramas de matriz, necesitamos información útil sobre tanto columnas como encabezados de fila. Una forma de hacer esto es llamar al corr()método en el conjunto de datos. La corr()función devuelve la correlación entre todas las columnas numéricas del conjunto de datos. Ejecute el siguiente script:

dataset.corr()

En el resultado, verá que tanto las columnas como las filas tienen información de encabezado significativa, como se muestra a continuación:

Ahora, para crear un mapa de calor con estos valores de correlación, debe llamar a la heatmap()función y pasarle su marco de datos de correlación. Mira el siguiente guión:

corr = dataset.corr()
sns.heatmap(corr)

La salida se ve así:

A partir de la salida, se puede ver que lo que hace esencialmente el mapa de calor es trazar un cuadro para cada combinación de valores de filas y columnas. El color de la caja depende del degradado. Por ejemplo, en la imagen de arriba, si hay una alta correlación entre dos características, la celda correspondiente o el cuadro es blanco, por otro lado, si no hay correlación, la celda correspondiente permanece negra.

Los valores de correlación también se pueden trazar en el mapa de calor pasando Trueel annotparámetro. Ejecute el siguiente script para ver esto en acción:

corr = dataset.corr()
sns.heatmap(corr, annot=True)

Salida:

También puede cambiar el color del mapa de calor pasando un argumento para el cmapparámetro. Por ahora, solo mire el siguiente script:

corr = dataset.corr()
sns.heatmap(corr, cmap='winter')

La salida se ve así:

Además de simplemente usar la correlación entre todas las columnas, también puede usar la pivot_tablefunción para especificar el índice, la columna y los valores que desea ver correspondientes al índice y las columnas. Para ver la pivot_tablefunción en acción, usaremos el conjunto de datos de “vuelos” que contiene la información sobre el año, el mes y el número de pasajeros que viajaron en ese mes.

Ejecute la siguiente secuencia de comandos para importar el conjunto de datos y ver las primeras cinco filas del conjunto de datos:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('flights')

dataset.head()

Salida:

Ahora, usando la pivot_tablefunción, podemos crear un mapa de calor que muestra el número de pasajeros que viajaron en un mes específico de un año específico. Para hacerlo, pasaremos monthcomo valor para el indexparámetro. El atributo de índice corresponde a las filas. A continuación, debemos pasar yearcomo valor para el columnparámetro. Y finalmente para el valuesparámetro, pasaremos la passengerscolumna. Ejecute el siguiente script:

data = dataset.pivot_table(index='month', columns="year", values="passengers")
sns.heatmap(data)

La salida se ve así:

Se desprende del resultado que en los primeros años el número de pasajeros que tomaron los vuelos fue menor. A medida que avanzan los años, aumenta el número de pasajeros.

Actualmente, puede ver que los cuadros o las celdas se superponen en algunos casos y la distinción entre los límites de las celdas no es muy clara. Para crear un límite claro entre las celdas, puede utilizar los parámetros linecolory linewidths. Eche un vistazo al siguiente guión:

data = dataset.pivot_table(index='month', columns="year", values="passengers" )
sns.heatmap(data, linecolor="blue", linewidth=1)

En la secuencia de comandos anterior, pasamos “azul” como valor para el linecolorparámetro, mientras que el linewidthparámetro está establecido en 1. En la salida, verá un límite azul alrededor de cada celda:

Puede aumentar el valor del linewidthparámetro si desea límites más gruesos.

Mapa de clúster

Además del mapa de calor, otro diagrama de matriz de uso común es el mapa de conglomerados. El mapa de conglomerados básicamente utiliza la agrupación jerárquica para agrupar las filas y columnas de la matriz.

Tracemos un mapa de conglomerados para la cantidad de pasajeros que viajaron en un mes específico de un año específico. Ejecute el siguiente script:

data = dataset.pivot_table(index='month', columns="year", values="passengers")
sns.clustermap(data)

Para trazar un mapa de conglomerados, clustermapse usa la función y, al igual que la función de mapa de calor, el conjunto de datos que se pasa debe tener encabezados significativos para filas y columnas. La salida del script anterior se ve así:

En la salida, puede ver meses y años agrupados en función del número de pasajeros que viajaron en un mes específico.

Con esto, concluimos nuestra discusión sobre los diagramas de Matrix. En la siguiente sección, comenzaremos nuestra discusión sobre las capacidades de cuadrícula de la biblioteca Seaborn.

Cuadrículas Seaborn

Las cuadrículas en Seaborn nos permiten manipular las subparcelas según las características utilizadas en las parcelas.

Par de cuadrícula

En la Parte 1 de esta serie de artículos, vimos cómo se puede usar el diagrama de pares para dibujar un diagrama de dispersión para todas las combinaciones posibles de las columnas numéricas en el conjunto de datos.

Revisemos aquí el diagrama de pares antes de pasar a la cuadrícula de pares. El conjunto de datos que vamos a utilizar para la sección de cuadrícula de pares es el conjunto de datos “iris” que se descarga de forma predeterminada cuando descarga la seabornbiblioteca. Ejecute el siguiente script para cargar el conjunto de datos de iris:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('iris')

dataset.head()

Las primeras cinco filas del conjunto de datos de iris se ven así:

Ahora dibujemos un diagrama de pares en el conjunto de datos del iris. Ejecute el siguiente script:

sns.pairplot(dataset)

Una instantánea de la salida se ve así:

Ahora tracemos la cuadrícula de pares y veamos la diferencia entre la gráfica de pares y la cuadrícula de pares. Para crear una cuadrícula de pares, simplemente debe pasar el conjunto de datos a la PairGridfunción, como se muestra a continuación:

sns.PairGrid(dataset)

Salida:

En la salida, puede ver cuadrículas vacías. Esto es esencialmente lo que hace la función de cuadrícula de pares. Devuelve un conjunto vacío de cuadrículas para todas las características del conjunto de datos.

A continuación, debe llamar a la mapfunción en el objeto devuelto por la función de cuadrícula de pares y pasarle el tipo de gráfico que desea dibujar en las cuadrículas. Tracemos un diagrama de dispersión usando la cuadrícula de pares.

grids = sns.PairGrid(dataset)
grids.map(plt.scatter)

La salida se ve así:

Puede ver diagramas de dispersión para todas las combinaciones de columnas numéricas en el conjunto de datos “iris”.

También puede trazar diferentes tipos de gráficos en la misma cuadrícula de pares. Por ejemplo, si desea trazar una parcela de “distribución” en la diagonal, “kdeplot” en la mitad superior de la diagonal, y la trama “dispersión” en la parte inferior de la diagonal se puede utilizar map_diagonal, map_uppery map_lowerfunciones, respectivamente. El tipo de gráfico a dibujar se pasa como parámetro a estas funciones. Eche un vistazo al siguiente guión:

grids = sns.PairGrid(dataset)
grids.map_diag(sns.distplot)
grids.map_upper(sns.kdeplot)
grids.map_lower(plt.scatter)

La salida del script anterior se ve así:

Puede ver el verdadero poder de la función de cuadrícula de pares en la imagen de arriba. En las diagonales tenemos gráficos de distribución, en la mitad superior tenemos los gráficos de densidad del grano, mientras que en la mitad inferior tenemos los gráficos de dispersión.

Cuadrículas de facetas

Las cuadrículas de facetas se utilizan para trazar dos o más de dos características categóricas frente a dos o más de dos características numéricas. Tracemos una cuadrícula de facetas que traza la trama de distribución de género vs vivo con respecto a la edad de los pasajeros.

Para esta sección, usaremos nuevamente el conjunto de datos Titanic. Ejecute el siguiente script para cargar el conjunto de datos Titanic:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('titanic')

Para dibujar la cuadrícula de facetas, FacetGrid()se utiliza la función. El primer parámetro de la función es el conjunto de datos, el segundo parámetro colespecifica la característica a graficar en las columnas mientras que el rowparámetro especifica la característica en las filas. La FacetGrid()función devuelve un objeto. Al igual que la cuadrícula de pares, puede usar la mapfunción para especificar el tipo de gráfico que desea dibujar.

Ejecute el siguiente script:

grid = sns.FacetGrid(data=dataset, col="alive", row='sex')
grid.map(sns.distplot, 'age')

En el script anterior, trazamos la gráfica de distribución para la edad en la cuadrícula de facetas. La salida se ve así:

En la salida, puede ver cuatro gráficos. Uno por cada combinación de género y supervivencia del pasajero. Las columnas contienen información sobre la supervivencia, mientras que las filas contienen información sobre el sexo, según lo especificado por la FacetGrid()función.

La primera fila y la primera columna contienen la distribución por edad de los pasajeros donde el sexo es masculino y los pasajeros no sobrevivieron. La primera fila y la segunda columna contienen la distribución por edad de los pasajeros donde el sexo es masculino y los pasajeros sobrevivieron. De manera similar, la segunda fila y la primera columna contienen la distribución de edad de los pasajeros donde el sexo es femenino y los pasajeros no sobrevivieron, mientras que la segunda fila y la segunda columna contienen la distribución de edad de los pasajeros donde el sexo es femenino y los pasajeros sobrevivieron.

Además de las gráficas de distribución para una característica, también podemos trazar gráficas de dispersión que involucran dos características en la cuadrícula de facetas.

Por ejemplo, el siguiente guión traza el diagrama de dispersión de la edad y la tarifa para los géneros de los pasajeros que sobrevivieron y los que no.

grid = sns.FacetGrid(data= dataset, col="alive", row = 'sex')
grid.map(plt.scatter, 'age', 'fare')

La salida del script anterior se ve así:

Gráficos de regresión

Los gráficos de regresión, como su nombre indica, se utilizan para realizar análisis de regresión entre dos o más variables.

En esta sección, estudiaremos la gráfica del modelo lineal que traza una relación lineal entre dos variables junto con la línea de regresión de mejor ajuste según los datos.

El conjunto de datos que vamos a utilizar para esta sección es el conjunto de datos “diamantes” que se descarga por defecto con la seabornbiblioteca. Ejecute la siguiente secuencia de comandos para cargar el conjunto de datos:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('diamonds')

dataset.head()

El conjunto de datos se ve así:

El conjunto de datos contiene diferentes características de un diamante, como el peso en quilates, el color, la claridad, el precio, etc.

Tracemos una relación lineal entre el quilate y el precio del diamante. Idealmente, cuanto más pesado sea el diamante, más alto debería ser el precio. Veamos si esto es realmente cierto según la información disponible en el conjunto de datos de diamantes.

Para trazar el modelo lineal, lmplot()se utiliza la función. El primer parámetro es la característica que desea trazar en el eje x, mientras que la segunda variable es la característica que desea trazar en el eje y. El último parámetro es el conjunto de datos. Ejecute el siguiente script:

sns.lmplot(x='carat', y='price', data=dataset)

La salida se ve así:

También puede trazar varios modelos lineales basados ​​en una característica categórica. El nombre de la función se pasa como valor al hueparámetro. Por ejemplo, si desea trazar múltiples modelos lineales para la relación entre el quilate y la característica del precio, según el corte del diamante, puede usar la lmplotfunción de la siguiente manera:

sns.lmplot(x='carat', y='price', data=dataset, hue="cut")

La salida se ve así:

En el resultado, puede ver que la relación lineal entre el quilate y el precio del diamante es más pronunciada para el diamante de corte ideal como se esperaba y el modelo lineal es más superficial para el diamante de corte justo.

Además de graficar los datos de la función de corte con diferentes matices, también podemos tener un gráfico para cada corte. Para hacerlo, debe pasar el nombre de la columna al colsatributo. Eche un vistazo al siguiente guión:

sns.lmplot(x='carat', y='price', data=dataset, col="cut")

En la salida, verá una columna separada para cada valor en la columna de corte del conjunto de datos de diamantes como se muestra a continuación:

También puede cambiar el tamaño y la relación de aspecto de los gráficos mediante los parámetros aspecty size. Eche un vistazo al siguiente guión:

sns.lmplot(x='carat', y = 'price', data= dataset, col="cut", aspect = 0.5, size = 8 )

El aspectparámetro define la relación de aspecto entre el ancho y el alto. Una relación de aspecto de 0,5 significa que el ancho es la mitad de la altura, como se muestra en el resultado.

Puede ver que el tamaño del gráfico ha cambiado, el tamaño de la fuente sigue siendo muy pequeño. En la siguiente sección, veremos cómo controlar las fuentes y estilos de los gráficos de Seaborn.

Estilo de trama

La biblioteca Seaborn viene con una variedad de opciones de estilo. En esta sección veremos algunos de ellos.

Establecer estilo

La set_style()función se utiliza para establecer el estilo de la cuadrícula. Puede pasar el darkgrid, whitegrid, dark, whitey tickscomo los parámetros a la set_stylefunción.

Para esta sección, usaremos nuevamente el “conjunto de datos titánico”. Ejecute el siguiente script para ver el darkgridestilo.

sns.set_style('darkgrid')
sns.distplot(dataset['fare'])

La salida se ve así;

En la salida, puede ver que tenemos un fondo oscuro con cuadrículas. Veamos cómo se whitegridve. Ejecute el siguiente script:

sns.set_style('whitegrid')
sns.distplot(dataset['fare'])

La salida se ve así:

Ahora puede ver que todavía tenemos cuadrículas en el fondo, pero el fondo gris oscuro no es visible. Te sugiero que pruebes y juegues con el resto de opciones y veas qué estilo te conviene.

Cambiar el tamaño de la figura

Dado que Seaborn usa funciones de Matplotlib detrás de escena, puede usar el pyplotpaquete de Matplotlib para cambiar el tamaño de la figura como se muestra a continuación:

plt.figure(figsize=(8,4))
sns.distplot(dataset['fare'])

En la secuencia de comandos anterior, establecemos el ancho y la altura del gráfico en 8 y 4 pulgadas respectivamente. La salida del script anterior se ve así:

Establecer contexto

Además del cuaderno, es posible que deba crear gráficos para carteles. Para hacerlo, puede usar la set_context()función y pasarla postercomo el único atributo como se muestra a continuación:

sns.set_context('poster')
sns.distplot(dataset['fare'])

En el resultado, debería ver un gráfico con las especificaciones del póster como se muestra a continuación. Por ejemplo, puede ver que las fuentes son mucho más grandes en comparación con los gráficos normales.

Conclusión

Seaborn Library es una biblioteca Python avanzada para visualización de datos. Este artículo es la Parte 2 de la serie de artículos sobre Seaborn para la visualización de datos en Python. En este artículo, vimos cómo trazar gráficos de regresión y matrices en Seaborn. También vimos cómo cambiar los estilos de trazado y utilizar funciones de cuadrícula para manipular subtramas. En el próximo artículo, veremos cómo se pueden utilizar las capacidades integradas de la biblioteca Pandas de Python para la visualización de datos.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad