Treemaps en Python usando Squarify

La visualización de datos es una técnica poderosa para analizar un gran conjunto de datos a través de la representación gráfica. Python proporciona varios módulos que admiten la representación gráfica de datos. Los módulos más utilizados son Matplotlib , Seaborn y Plotly . Y tenemos un módulo más llamado Squarify que se utiliza principalmente para trazar un mapa de árbol. 

¿Cuándo usar Squarify? 

Aquí la pregunta es cuándo usar Squarify en lugar de por qué usar. Como Python ya tiene de 2 a 3 módulos de visualización de datos que hacen la mayor parte de la tarea. Squarify es la mejor opción cuando tiene que trazar un mapa de árbol. Los diagramas de árbol muestran datos jerárquicos como un conjunto de visualización basada en cuadrados/rectángulos anidados. 

Squarify es una gran opción:

  • Para trazar una gran cantidad de datos.
  • Los gráficos de barras no pueden ser efectivos para manejar y visualizar grandes datos, por lo que se utilizan mapas de árbol y Squarify entra en juego.
  • Trazar las proporciones entre cada parte y el todo proporcionándoles la etiqueta.
  • Para mostrar el patrón de la distribución de la medida a través de cada nivel de categorías en la jerarquía.
  • Para mostrar atributos utilizando el tamaño y la codificación de colores.
  • Para detectar patrones, valores atípicos, contribuyentes más importantes y excepciones.

Trazar mapa de árbol usando Squarify

Un diagrama de diagrama de árbol es un tipo apropiado de visualización cuando el conjunto de datos está estructurado en orden jerárquico con un diseño de árbol con raíces, ramas y Nodes. Nos permite mostrar información sobre una cantidad importante de datos de forma muy eficiente en un espacio limitado. 

Ahora trazaremos un Treemap usando Squarify. Instale el módulo usando pip install module_name.  

pip install squarify

Importe los módulos necesarios. 

Python3

import squarify
import matplotlib.pyplot as plt

Gráfico

La trama es el método mediante el cual puede crear un mapa de árbol usando Squarify. Squarify toma los tamaños como primer argumento y también admite muchas características que veremos una por una. Inicialmente, el método de trazado traza un cuadrado de dimensión 100×100. 

Python3

squarify.plot(sizes=[1, 2, 3, 4, 5],
              color="yellow")

Producción:

Color

Para hacer la trama más atractiva, cambiaremos el color de la trama. Hay dos formas en las que podemos cambiar el color del gráfico:

  • Lista de colores
  • Paleta

Método 1: Pasaremos una lista con nombres de colores que pueden o no coincidir con la longitud de los datos. Si tiene una lista de colores menor que la longitud de los datos, se repiten los mismos colores. 

Python3

data = [300, 400, 120, 590, 600, 760]
colors = ["red", "black", "green",
          "violet", "yellow", "blue"]
squarify.plot(sizes=data, color=colors)
plt.axis("off")

Producción:

Método 2: Importaremos el módulo Python Seaborn y seleccionaremos un método de paleta de colores.

Sintaxis: seaborn.color_palette(tipo,total_colors_required)

#total_colors_required debe ser un número entero

#puedes elegir cualquier tipo de esta lista:

“””

‘Acento’, ‘Accent_r’, ‘Blues’, ‘Blues_r’, ‘BrBG’, ‘BrBG_r’, ‘BuGn’, ‘BuGn_r’, ‘BuPu’, ‘BuPu_r’, ‘CMRmap’, ‘CMRmap_r’, ‘Dark2 ‘, ‘Dark2_r’, ‘GnBu’, ‘GnBu_r’, ‘Verdes’, ‘Verdes_r’, ‘Grises’, ‘Grises_r’, ‘OrRd’, ‘OrRd_r’, ‘Naranjas’, ‘Naranjas_r’, ‘PRGn’, ‘PRGn_r’, ‘Emparejado’, ‘Emparejado_r’, ‘Pastel1’, ‘Pastel1_r’, ‘Pastel2’, ‘Pastel2_r’, ‘PiYG’, ‘PiYG_r’, ‘PuBu’, ‘PuBuGn’, ‘PuBuGn_r’, ‘PuBu_r ‘, ‘PuOr’, ‘PuOr_r’, ‘PuRd’, ‘PuRd_r’, ‘Purples’, ‘Purples_r’, ‘RdBu’, ‘RdBu_r’, ‘RdGy’, ‘RdGy_r’, ‘RdPu’, ‘RdPu_r’, ‘RdYlBu’, ‘RdYlBu_r’, ‘RdYlGn’, ‘RdYlGn_r’, ‘Rojos’, ‘Rojos_r’, ‘Conjunto1’, ‘Conjunto1_r’, ‘Conjunto2’, ‘Conjunto2_r’, ‘Conjunto3’, ‘Conjunto3_r’, ‘Conjunto ‘, ‘Espectral_r’, ‘Wistia’, ‘Wistia_r’, ‘YlGn’, ‘YlGnBu’, ‘YlGnBu_r’, ‘YlGn_r’, ‘YlOrBr’, ‘YlOrBr_r’, ‘YlOrRd’, ‘YlOrRd_r’, ‘afmhot’, ‘afmhot_r’, ‘otoño’, ‘otoño_r’, ‘binario’, ‘binario_r’, ‘hueso’, ‘hueso_r’, ‘brg’, ‘brg_r’, ‘bwr’,’bwr_r’, ‘cividis’, ‘cividis_r’, ‘cool’, ‘cool_r’, ‘coolwarm’, ‘coolwarm_r’, ‘copper’, ‘copper_r’, ‘cresta’, ‘cresta_r’, ‘cubehelix’, ‘cubehelix_r ‘, ‘bandera’, ‘flag_r’, ‘flare’, ‘flare_r’, ‘gist_earth’, ‘gist_earth_r’, ‘gist_gray’, ‘gist_gray_r’, ‘gist_heat’, ‘gist_heat_r’, ‘gist_ncar’, ‘gist_ncar_r’, ‘gist_rainbow’, ‘gist_rainbow_r’, ‘gist_stern’, ‘gist_stern_r’, ‘gist_yarg’, ‘gist_yarg_r’, ‘gnuplot’, ‘gnuplot2’, ‘gnuplot2_r’, ‘gnuplot_r’, ‘gris’, ‘gray_r’, ‘caliente ‘, ‘hot_r’, ‘hsv’, ‘hsv_r’, ‘icefire’, ‘icefire_r’, ‘inferno’, ‘inferno_r’, ‘jet’, ‘jet_r’, ‘magma’, ‘magma_r’, ‘mako’, ‘mako_r’, ‘nipy_spectral’, ‘nipy_spectral_r’, ‘ocean’, ‘ocean_r’, ‘pink’, ‘pink_r’, ‘plasma’, ‘plasma_r’, ‘prism’, ‘prism_r’, ‘rainbow’, ‘rainbow_r ‘, ‘cohete’, ‘cohete_r’, ‘sísmico’, ‘sísmico_r’, ‘primavera’, ‘primavera_r’, ‘verano’, ‘verano_r’, ‘tab10’, ‘tab10_r’, ‘tab20′,’tab20_r’, ‘tab20b’, ‘tab20b_r’, ‘tab20c’, ‘tab20c_r’, ‘terrain’, ‘terrain_r’, ‘turbo’, ‘turbo_r’, ‘twilight’, ‘twilight_r’, ‘twilight_shifted’, ‘twilight_shifted_r ‘, ‘viridis’, ‘viridis_r’, ‘vlag’, ‘vlag_r’, ‘invierno’, ‘invierno_r’

“””

Python3

import seaborn as sb
  
data = [300, 400, 120, 590, 600, 760]
squarify.plot(sizes=data, 
              color=sb.color_palette("Spectral", 
                                     len(data)))
plt.axis("off")

Producción:

Alfa

El argumento alfa se utiliza para variar la opacidad de la imagen. Puede ser un valor entero o flotante en el rango de 0 a 1. El valor alfa cerca de 1 tiene una alta opacidad mientras que el valor alfa cerca de 0 tiene menos opacidad.

Python3

data = [300,400,720,213]
colors = ["red","black","green","violet"]
squarify.plot(sizes=data,color=colors,alpha=0.8)
plt.axis("off")

Producción:

Aquí, veremos un valor más bajo de alfa.

Python3

data = [300,400,720,213]
colors = ["red","black","green","violet"]
squarify.plot(sizes=data,color=colors,alpha=0.3)
plt.axis("off")

Producción:

Escalar el gráfico

La escala se usa para cambiar el rango del gráfico; de forma predeterminada, el rango del gráfico es 100 × 100. Usando norm_x puede escalar los datos del eje x mientras que norm_y puede escalar el eje y. 

Python3

data = [100, 20, 50, 1000]
colors = ["red", "yellow", "blue", "green"]
squarify.plot(sizes=data, color=colors)

Producción:

Escalado con ambos ejes.

Python3

data = [100, 20, 50, 1000]
colors = ["red", "yellow", "blue", "green"]
squarify.plot(sizes=data, norm_x=1000, 
              norm_y=10, color=colors)

Producción:

Etiquetas

Un Treemap sin etiqueta es solo un cuadro sin significado. La etiqueta agrega significado a las divisiones del diagrama de árbol y denota lo que representan las parcelas específicas. Puede aumentar el tamaño de fuente de la etiqueta agregando un argumento adicional text_kwargs.

Python3

episode_data = [1004, 720, 366, 360, 80]
anime_names = ["One Piece", "Naruto", "Bleach", 
               "Gintama", "Attack On Titan"]
  
squarify.plot(episode_data, label=anime_names)
  
plt.axis("off")

Producción:

Relleno

El relleno toma un valor entero que se usa para agregar espacios entre los mapas de árbol para una visualización adecuada.

Python3

squarify.plot(episode_data, label=anime_names, pad=2)
plt.axis("off")

Producción:

Creación de un mapa de árbol en un conjunto de datos del mundo real mediante Squarify

Ahora veremos cómo implementar un Treemap en un conjunto de datos del mundo real. Puede descargar el conjunto de datos desde https://www.kaggle.com/hamdallak/the-world-of-pokemons. En el siguiente código, tomamos los 20 Pokémon principales y creamos un diagrama de árbol basado en el tipo principal de los 20 Pokémon principales.

Python3

# import required modules
import pandas as pd
import squarify
import matplotlib.pyplot as plt
import seaborn as sb
  
# read the dataset and create a DataFrame
dataset = pd.read_csv("pokemons dataset.csv")
df = pd.DataFrame(dataset)
  
# select top 20 pokemons from 3 columns
# and sort them by Total Strength
top20_pokemon = df.loc[:, ["Name", "Total",
                           'Primary Type']].sort_values(
    by="Total", ascending=False)[:20]
  
# create a plot figure with figsize
plt.figure(figsize=(12, 6))
# we don't require the axis values so lets remove it
plt.axis("off")
axis = squarify.plot(top20_pokemon['Primary Type'].value_counts(),
                     label=top20_pokemon['Primary Type'].value_counts().index,
                     color=sb.color_palette("tab20", len(
                         top20_pokemon['Primary Type'].value_counts())),
                     pad=1,
                     text_kwargs={'fontsize': 18})
axis.set_title("Primary Data Types Of Top 20 Pokemons", fontsize=24)

Producción:

Publicación traducida automáticamente

Artículo escrito por jaintarun y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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