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

    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 鈥嬧媏n 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.

     

    Etiquetas:

    Deja una respuesta

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