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

B

Introducción

En el artículo anterior, analizamos cómo se puede usar la biblioteca Matplotlib de Python para la visualización de datos. En este artículo veremos Seaborn, que es otra biblioteca extremadamente útil para la visualización de datos en Python. La biblioteca de Seaborn está construida sobre Matplotlib y ofrece muchas capacidades avanzadas de visualización de datos.

Sin embargo, la biblioteca de Seaborn se puede usar para dibujar una variedad de gráficos como diagramas de matriz, diagramas de cuadrícula, diagramas de regresión, etc., en este artículo veremos cómo se puede usar la biblioteca de Seaborn para dibujar diagramas de distribución y categoriales. En la segunda parte de la serie, veremos cómo dibujar diagramas de regresión, diagramas de matriz y diagramas de cuadrícula.

Descarga de la biblioteca de Seaborn

La seabornbiblioteca se puede descargar de varias formas. Si está utilizando el instalador pip para bibliotecas de Python, puede ejecutar el siguiente comando para descargar la biblioteca:

pip install seaborn

Alternativamente, si está utilizando la distribución Anaconda de Python, puede ejecutar el siguiente comando para descargar la seabornbiblioteca:

conda install seaborn

El conjunto de datos

El conjunto de datos que vamos a utilizar para dibujar nuestras parcelas será el conjunto de datos Titanic, que se descarga por defecto con la biblioteca Seaborn. Todo lo que tienes que hacer es usar la load_datasetfunción y pasarle el nombre del conjunto de datos.

Veamos cómo se ve el conjunto de datos del Titanic. 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()

El script anterior carga el conjunto de datos de Titanic y muestra las primeras cinco filas del conjunto de datos usando la función head. La salida se ve así:

El conjunto de datos contiene 891 filas y 15 columnas y contiene información sobre los pasajeros que abordaron el desafortunado barco Titanic. La tarea original es predecir si el pasajero sobrevivió o no dependiendo de diferentes características como su edad, boleto, cabina que abordó, la clase del boleto, etc. Usaremos la biblioteca de Seaborn para ver si podemos encontrar algún patrón en los datos.

Parcelas de distribución

Las parcelas de distribución, como su nombre indica, son tipos de parcelas que muestran la distribución estadística de los datos. En esta sección, veremos algunas de las parcelas de distribución más utilizadas en Seaborn.

La trama Dist

La distplot()muestra la distribución del histograma de los datos de una sola columna. El nombre de la columna se pasa como parámetro a la distplot()función. Veamos cómo se distribuye el precio del billete para cada pasajero. Ejecute el siguiente script:

sns.distplot(dataset['fare'])

Salida:

Puedes ver que la mayoría de los tickets se han resuelto entre 0 y 50 dólares. La línea que ve representa la estimación de la densidad del kernel . Puede eliminar esta línea pasando Falsecomo parámetro para el kdeatributo como se muestra a continuación:

sns.distplot(dataset['fare'], kde=False)

Salida:

Ahora puede ver que no hay una línea para la estimación de la densidad del kernel en la gráfica.

También puede pasar el valor del binsparámetro para ver más o menos detalles en el gráfico. Eche un vistazo al siguiente guión:

sns.distplot(dataset['fare'], kde=False, bins=10)

Aquí establecemos el número de contenedores en 10. En la salida, verá datos distribuidos en 10 contenedores como se muestra a continuación:

Salida:

Puede ver claramente que para más de 700 pasajeros, el precio del boleto está entre 0 y 50.

La trama conjunta

Se jointplot()utiliza para mostrar la distribución mutua de cada columna. Debe pasar tres parámetros a jointplot. El primer parámetro es el nombre de la columna para la que desea mostrar la distribución de datos en el eje x. El segundo parámetro es el nombre de la columna para la que desea mostrar la distribución de datos en el eje y. Finalmente, el tercer parámetro es el nombre del marco de datos.

Tracemos un diagrama conjunto de columnas agey farepara ver si podemos encontrar alguna relación entre los dos.

sns.jointplot(x='age', y='fare', data=dataset)

Salida:

En el resultado, puede ver que un diagrama conjunto tiene tres partes. Una gráfica de distribución en la parte superior de la columna en el eje x, una gráfica de distribución a la derecha para la columna en el eje y y una gráfica de dispersión en el medio que muestra la distribución mutua de datos para ambas columnas. Puede ver que no se observa una correlación entre los precios y las tarifas.

Puede cambiar el tipo de gráfico conjunto pasando un valor para el kindparámetro. Por ejemplo, si en lugar de un diagrama de dispersión, desea mostrar la distribución de datos en forma de diagrama hexagonal, puede pasar el valor hexdel kindparámetro. Mira el siguiente guión:

sns.jointplot(x='age', y='fare', data=dataset, kind='hex')

Salida:

En la gráfica hexagonal, el hexágono con la mayor cantidad de puntos se vuelve más oscuro. Entonces, si observa el gráfico anterior, puede ver que la mayoría de los pasajeros tienen entre 20 y 30 años y la mayoría de ellos pagaron entre 10 y 50 por los boletos.

La trama de la pareja

El paitplot()es un tipo de gráfica de distribución que, básicamente, traza un gráfico conjunto para toda la posible combinación de columnas numéricas y booleanas en su conjunto de datos. Solo necesita pasar el nombre de su conjunto de datos como parámetro a la pairplot()función como se muestra a continuación:

sns.pairplot(dataset)

A continuación, se muestra una instantánea de la parte de la salida:

Nota: Antes de ejecutar el script anterior, elimine todos los valores nulos del conjunto de datos con el siguiente comando:

dataset = dataset.dropna()

Desde la salida del gráfico de pares, puede ver los gráficos conjuntos para todas las columnas numéricas y booleanas en el conjunto de datos de Titanic.

Para agregar información de la columna categórica al gráfico de pares, puede pasar el nombre de la columna categórica al hueparámetro. Por ejemplo, si queremos trazar la información de género en el diagrama de pares, podemos ejecutar el siguiente script:

sns.pairplot(dataset, hue="sex")

Salida:

En la salida puede ver la información sobre los machos en naranja y la información sobre la hembra en azul (como se muestra en la leyenda). En la trama conjunta en la parte superior izquierda, puede ver claramente que entre los pasajeros sobrevivientes, la mayoría eran mujeres.

La trama de la alfombra

Se rugplot()utiliza para dibujar pequeñas barras a lo largo del eje x para cada punto del conjunto de datos. Para trazar un diagrama de alfombra, debe pasar el nombre de la columna. Tracemos un diagrama de alfombra para la tarifa.

sns.rugplot(dataset['fare'])

Salida:

En el resultado, puede ver que, como fue el caso con distplot(), la mayoría de las instancias de las tarifas tienen valores entre 0 y 100.

Estos son algunos de los gráficos de distribución más utilizados que ofrece la biblioteca Seaborn de Python. Veamos algunas de las parcelas categóricas en la biblioteca de Seaborn.

Gráficos categóricos

Los gráficos categóricos, como su nombre indica, se utilizan normalmente para trazar datos categóricos. Las gráficas categóricas trazan los valores en la columna categórica contra otra columna categórica o una columna numérica. Veamos algunos de los datos categóricos más utilizados.

El diagrama de barras

Se barplot()utiliza para mostrar el valor medio de cada valor en una columna categórica, frente a una columna numérica. El primer parámetro es la columna categórica, el segundo parámetro es la columna numérica mientras que el tercer parámetro es el conjunto de datos. Por ejemplo, si desea conocer el valor medio de la edad de los pasajeros masculinos y femeninos, puede utilizar el gráfico de barras de la siguiente manera.

sns.barplot(x='sex', y='age', data=dataset)

Salida:

En el resultado, puede ver claramente que la edad promedio de los pasajeros masculinos es poco menos de 40, mientras que la edad promedio de las mujeres es de alrededor de 33 años.

Además de encontrar el promedio, el gráfico de barras también se puede utilizar para calcular otros valores agregados para cada categoría. Para hacerlo, debe pasar la función agregada al archivo estimator. Por ejemplo, puede calcular la desviación estándar para la edad de cada género de la siguiente manera:

import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

sns.barplot(x='sex', y='age', data=dataset, estimator=np.std)

Observe que en el script anterior usamos la stdfunción agregada de la numpybiblioteca para calcular la desviación estándar para las edades de los pasajeros masculinos y femeninos. La salida se ve así:

La trama del recuento

El gráfico de recuento es similar al gráfico de barras, sin embargo, muestra el recuento de las categorías en una columna específica. Por ejemplo, si queremos contar el número de pasajeros masculinos y femeninos, podemos hacerlo usando el gráfico de conteo de la siguiente manera:

sns.countplot(x='sex', data=dataset)

La salida muestra el recuento de la siguiente manera:

Salida:

El diagrama de caja

El diagrama de caja se utiliza para mostrar la distribución de los datos categóricos en forma de cuartiles. El centro del cuadro muestra el valor mediano. El valor desde el bigote inferior hasta la parte inferior del cuadro muestra el primer cuartil. Desde la parte inferior del cuadro hasta el centro del cuadro se encuentra el segundo cuartil. Desde la mitad de la caja hasta la parte superior de la caja se encuentra el tercer cuartil y, finalmente, desde la parte superior de la caja hasta el bigote superior se encuentra el último cuartil.

Puede estudiar más sobre cuartiles y diagramas de caja en este enlace .

Ahora tracemos un diagrama de caja que muestre la distribución de la edad con respecto a cada género. Debe pasar la columna categórica como primer parámetro (que es el sexo en nuestro caso) y la columna numérica (edad en nuestro caso) como segundo parámetro. Finalmente, el conjunto de datos se pasa como tercer parámetro, eche un vistazo al siguiente script:

sns.boxplot(x='sex', y='age', data=dataset)

Salida:

Tratemos de entender el diagrama de caja para mujeres. El primer cuartil comienza alrededor de 5 y termina en 22, lo que significa que el 25% de los pasajeros tienen entre 5 y 25 años. El segundo cuartil comienza alrededor de 23 y termina alrededor de 32, lo que significa que el 25% de los pasajeros tienen entre 23 años. y 32. Del mismo modo, el tercer cuartil comienza y termina entre 34 y 42, por lo que el 25% de los pasajeros tienen una edad dentro de este rango y finalmente el cuarto o último cuartil comienza en 43 y termina alrededor de 65.

Si hay valores atípicos o pasajeros que no pertenecen a ninguno de los cuartiles, se denominan valores atípicos y se representan mediante puntos en el diagrama de caja.

Puede hacer que sus diagramas de caja sean más elegantes agregando otra capa de distribución. Por ejemplo, si desea ver los diagramas de caja del forraje de pasajeros de ambos sexos, junto con la información sobre si sobrevivieron o no, puede pasar el survivedvalor as al hueparámetro como se muestra a continuación:

sns.boxplot(x='sex', y='age', data=dataset, hue="survived")

Salida:

Ahora, además de la información sobre la edad de cada género, también puede ver la distribución de los pasajeros que sobrevivieron. Por ejemplo, puede ver que entre los pasajeros masculinos, en promedio, sobrevivieron más personas jóvenes en comparación con los mayores. De manera similar, puede ver que la variación entre la edad de las pasajeras que no sobrevivieron es mucho mayor que la edad de las pasajeras sobrevivientes.

La trama del violín

El diagrama de violín es similar al diagrama de caja, sin embargo, el diagrama de violín nos permite mostrar todos los componentes que realmente corresponden al punto de datos. La violinplot()función se utiliza para trazar la trama del violín. Al igual que el diagrama de caja, el primer parámetro es la columna categórica, el segundo parámetro es la columna numérica, mientras que el tercer parámetro es el conjunto de datos.

Tracemos un diagrama de violín que muestre la distribución de la edad con respecto a cada género.

sns.violinplot(x='sex', y='age', data=dataset)

Salida:

Puede ver en la figura anterior que los diagramas de violín proporcionan mucha más información sobre los datos en comparación con el diagrama de caja. En lugar de trazar el cuartil, el diagrama de violín nos permite ver todos los componentes que realmente corresponden a los datos. El área donde la trama del violín es más gruesa tiene un mayor número de instancias para la edad. Por ejemplo, a partir de la trama de violines para hombres, es claramente evidente que el número de pasajeros con edades entre 20 y 40 es mayor que el resto de los tramos de edad.

Al igual que los diagramas de caja, también puede agregar otra variable categórica al diagrama de violín utilizando el hueparámetro como se muestra a continuación:

sns.violinplot(x='sex', y='age', data=dataset, hue="survived")

Ahora puedes ver mucha información sobre la trama del violín. Por ejemplo, si observa la parte inferior del diagrama de violín para los machos que sobrevivieron (izquierda-naranja), puede ver que es más grueso que la parte inferior del diagrama de violín para los machos que no sobrevivieron (izquierda-azul ). Esto significa que el número de pasajeros varones jóvenes que sobrevivieron es mayor que el número de pasajeros varones jóvenes que no sobrevivieron. Las tramas de violín transmiten mucha información, sin embargo, en el lado negativo, se necesita un poco de tiempo y esfuerzo para comprender las tramas de violín.

En lugar de trazar dos gráficos diferentes para los pasajeros que sobrevivieron y los que no, puede tener un gráfico de violín dividido en dos mitades, donde una mitad representa a los sobrevivientes mientras que la otra mitad representa a los pasajeros que no sobrevivieron. Para hacerlo, debe pasar Truecomo valor para el splitparámetro de la violinplot()función. Veamos cómo podemos hacer esto:

sns.violinplot(x='sex', y='age', data=dataset, hue="survived", split=True)

La salida se ve así:

Ahora puede ver claramente la comparación entre la edad de los pasajeros que sobrevivieron y los que no, tanto para hombres como para mujeres.

Tanto los diagramas de violín como los de caja pueden ser extremadamente útiles. Sin embargo, como regla general, si presenta sus datos a una audiencia no técnica, se deben preferir los diagramas de caja, ya que son fáciles de comprender. Por otro lado, si presenta sus resultados a la comunidad de investigadores, es más conveniente utilizar la trama de violín para ahorrar espacio y transmitir más información en menos tiempo.

La trama de la tira

El diagrama de bandas dibuja un diagrama de dispersión donde una de las variables es categórica. Hemos visto diagramas de dispersión en la gráfica conjunta y en las secciones de la gráfica de pares donde teníamos dos variables numéricas. El diagrama de tira es diferente de una manera que una de las variables es categórica en este caso, y para cada categoría en la variable categórica, verá un diagrama de dispersión con respecto a la columna numérica.

La stripplot()función se utiliza para trazar la trama del violín. Al igual que el diagrama de caja, el primer parámetro es la columna categórica, el segundo parámetro es la columna numérica, mientras que el tercer parámetro es el conjunto de datos. Mira el siguiente guión:

sns.stripplot(x='sex', y='age', data=dataset)

Salida:

Puede ver las parcelas de edad dispersas tanto para hombres como para mujeres. Los puntos de datos parecen tiras. Es difícil comprender la distribución de datos de esta forma. Para comprender mejor los datos, pase Trueel jitterparámetro que agrega algo de ruido aleatorio a los datos. Mira el siguiente guión:

sns.stripplot(x='sex', y='age', data=dataset, jitter=True)

Salida:

Ahora tiene una mejor vista de la distribución de la edad entre los géneros.

Al igual que los diagramas de violín y de caja, puede agregar una columna categórica adicional al diagrama de bandas utilizando el hueparámetro como se muestra a continuación:

sns.stripplot(x='sex', y='age', data=dataset, jitter=True, hue="survived")

Nuevamente, puede ver que hay más puntos para los machos que sobrevivieron cerca del final de la trama en comparación con los que no sobrevivieron.

Al igual que las parcelas de violín, también podemos dividir las parcelas de tiras. Ejecute el siguiente script:

sns.stripplot(x='sex', y='age', data=dataset, jitter=True, hue="survived", split=True)

Salida:

Ahora puede ver claramente la diferencia en la distribución de la edad de los pasajeros masculinos y femeninos que sobrevivieron y los que no sobrevivieron.

La trama del enjambre

La trama del enjambre es una combinación de la trama de la tira y la trama del violín. En los gráficos de enjambre, los puntos se ajustan de tal manera que no se superponen. Tracemos un diagrama de enjambre para la distribución de edad contra género. La swarmplot()función se utiliza para trazar la trama del violín. Al igual que el diagrama de caja, el primer parámetro es la columna categórica, el segundo parámetro es la columna numérica, mientras que el tercer parámetro es el conjunto de datos. Mira el siguiente guión:

sns.swarmplot(x='sex', y='age', data=dataset)

Puede ver claramente que el gráfico anterior contiene puntos de datos dispersos como el gráfico de tiras y los puntos de datos no se superponen. Más bien, están dispuestos para ofrecer una vista similar a la de una trama de violín.

Agreguemos otra columna categórica a la gráfica de enjambre usando el hueparámetro.

sns.swarmplot(x='sex', y='age', data=dataset, hue="survived")

Salida:

A partir del resultado, es evidente que la proporción de machos supervivientes es menor que la proporción de hembras supervivientes. Dado que para la trama masculina, hay más puntos azules y menos puntos naranjas. Por otro lado, para las hembras, hay más puntos naranjas (supervivientes) que puntos azules (no supervivientes). Otra observación es que entre los hombres menores de 10 años, sobrevivieron más pasajeros en comparación con los que no lo hicieron.

También podemos dividir las parcelas de enjambre como hicimos en el caso de las parcelas de franjas y cajas. Ejecute el siguiente script para hacerlo:

sns.swarmplot(x='sex', y='age', data=dataset, hue="survived", split=True)

Salida:

Ahora puede ver claramente que sobrevivieron más mujeres que hombres.

Combinando argumentos de Swarm y Violín

No se recomiendan los gráficos de enjambre si tiene un conjunto de datos enorme, ya que no se escalan bien porque tienen que trazar cada punto de datos. Si realmente te gustan las parcelas de enjambre, una mejor manera es combinar dos parcelas. Por ejemplo, para combinar una trama de violín con una trama de enjambre, debe ejecutar el siguiente guión:

sns.violinplot(x='sex', y='age', data=dataset)
sns.swarmplot(x='sex', y='age', data=dataset, color="black")

Salida:

Si bien esta serie pretende ser un recurso detallado sobre el uso de Seaborn, hay muchos detalles que no podremos cubrir en algunas publicaciones de blog. También hay muchas otras bibliotecas de visualización para Python que tienen características que van más allá de lo que Seaborn puede hacer. Para obtener una guía más detallada para visualizar datos en Python utilizando Seabor, así como otras 8 bibliotecas, consulte Visualización de datos en Python .

Conclusión

Seaborn es una biblioteca avanzada de visualización de datos construida sobre la biblioteca Matplotlib . En este artículo, analizamos cómo podemos dibujar gráficos distributivos y categóricos utilizando la biblioteca Seaborn. Esta es la Parte 1 de la serie de artículos sobre Seaborn. En el segundo artículo de la serie, veremos cómo jugamos con las funcionalidades de cuadrícula en Seaborn y cómo podemos dibujar diagramas de matriz y regresión en Seaborn.

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