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: