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

    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.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *