tutoriales.com

Unveiling Historias Visuales: Explorando el Storytelling con Gráficos de Proporción Jerárquica

Este tutorial te guiará a través del fascinante mundo de la visualización de datos jerárquicos. Aprenderás a utilizar gráficos como Treemaps, Sunbursts y Circle Packing en Python para transformar datos complejos en narrativas visuales claras y atractivas. Ideal para analistas, científicos de datos y cualquier persona interesada en mejorar sus habilidades de storytelling con datos.

Intermedio20 min de lectura14 views
Reportar error

🚀 Introducción al Storytelling con Gráficos de Proporción Jerárquica

En el vasto universo de la visualización de datos, no todos los gráficos son iguales. Algunos están diseñados para mostrar tendencias temporales, otros para comparaciones directas, y algunos, como los que exploraremos hoy, son maestros en el arte de desglosar jerarquías y proporciones. Hablamos de los gráficos de proporción jerárquica, herramientas poderosas que nos permiten sumergirnos en la estructura de nuestros datos, revelando cómo las partes contribuyen al todo de una manera visualmente intuitiva y a menudo, sorprendente.

Imagina que tienes datos sobre la población mundial, desglosada por continentes, países y ciudades. O quizás datos de ventas de una empresa, organizados por departamento, categoría de producto y artículo individual. ¿Cómo visualizamos esta complejidad sin abrumar a nuestra audiencia? Aquí es donde los gráficos como los Treemaps, Sunbursts y Circle Packing entran en juego, transformando información anidada en narrativas visuales coherentes.

Este tutorial te equipará con el conocimiento y las herramientas para dominar estas técnicas en Python. Nos centraremos en la librería Plotly Express, una joya para crear visualizaciones interactivas y estéticamente agradables con un mínimo de código. Prepárate para ir más allá de los gráficos de barras y pasteles tradicionales, y eleva tu capacidad de contar historias con datos a un nuevo nivel.

📌 Nota: Aunque `Matplotlib` y `Seaborn` son excelentes librerías, `Plotly Express` simplifica enormemente la creación de estos gráficos jerárquicos interactivos, haciéndola la opción preferida para este tipo de visualizaciones complejas.

🎯 ¿Por Qué la Visualización Jerárquica es Crucial?

La información en el mundo real rara vez es plana. Desde la estructura organizacional de una empresa hasta la taxonomía biológica de especies, pasando por los sistemas de archivos en un ordenador, la jerarquía es una constante. Los datos jerárquicos tienen una estructura de árbol, donde cada elemento puede tener padres y hijos. Visualizar estos datos de manera efectiva es fundamental por varias razones:

  • Comprensión de la Estructura: Permiten a los usuarios entender rápidamente cómo se organizan los datos y cómo las categorías de alto nivel se descomponen en subcategorías.
  • Identificación de Proporciones: Hacen evidente la contribución relativa de cada elemento al conjunto, tanto a nivel general como dentro de cada subgrupo.
  • Detección de Patrones: Ayudan a descubrir patrones, anomalías o desequilibrios que serían difíciles de identificar en tablas o gráficos lineales.
  • Navegación Intuitiva: Los gráficos interactivos permiten a los usuarios "hacer drill-down" o explorar diferentes niveles de la jerarquía, facilitando una inmersión profunda en los datos.
  • Storytelling Mejorado: Proporcionan una base visual sólida para construir narrativas convincentes sobre la composición y distribución de los datos.
🔥 Importante: La elección del gráfico jerárquico depende de la pregunta de negocio y la audiencia. No todos los gráficos son ideales para todas las situaciones.

Tipos Comunes de Gráficos Jerárquicos que Exploraremos

Tipo de GráficoDescripción PrincipalVentajas ClaveDesventajas Clave
------------
TreemapRepresenta la jerarquía mediante rectángulos anidados, donde el tamaño del rectángulo indica la proporción.Excelente para mostrar proporciones y jerarquías con uso eficiente del espacio.Puede ser difícil de leer con muchos niveles o categorías muy pequeñas.
SunburstUtiliza anillos concéntricos, donde cada anillo representa un nivel de la jerarquía.Ideal para visualizar jerarquías profundas; atractivo visualmente.Puede ocupar mucho espacio y ser difícil de comparar tamaños en anillos exteriores.
------------
Circle PackingEmplea círculos anidados o adyacentes, donde el tamaño del círculo denota la proporción.Estéticamente agradable, bueno para representar el tamaño relativo de las hojas.Más difícil de comparar áreas exactas que en Treemaps; no tan eficiente espacialmente.

🛠️ Preparando el Entorno: Instalación de Plotly Express

Antes de sumergirnos en la creación de gráficos, necesitamos asegurarnos de que tenemos las herramientas necesarias. Python, por supuesto, es nuestro lenguaje de elección, y Plotly Express será nuestra librería principal. Si aún no tienes Plotly instalado, puedes hacerlo fácilmente usando pip.

pip install plotly pandas

También instalaremos pandas para la manipulación de datos, que es una práctica común en cualquier proyecto de ciencia de datos.

💡 Consejo: Es recomendable trabajar en un entorno virtual (`venv` o `conda`) para gestionar las dependencias de tus proyectos de Python de forma aislada.

Una vez instaladas las librerías, podemos importarlas en nuestro script o notebook de Jupyter:

import plotly.express as px
import pandas as pd

📊 Data para el Storytelling: Un Conjunto de Datos Jerárquico

Para nuestros ejemplos, crearemos un conjunto de datos ficticio que represente las ventas de una empresa tecnológica, desglosadas por región, tipo de producto y subcategoría. Esto nos proporcionará una estructura jerárquica perfecta para ilustrar cada tipo de gráfico.

data = {
    'Region': ['Norteamérica', 'Norteamérica', 'Norteamérica', 'Norteamérica', 'Europa', 'Europa', 'Europa', 'Asia', 'Asia', 'Asia', 'Asia', 'Norteamérica', 'Europa', 'Asia'],
    'Producto': ['Software', 'Software', 'Hardware', 'Hardware', 'Software', 'Hardware', 'Servicios', 'Software', 'Hardware', 'Servicios', 'Servicios', 'Software', 'Software', 'Hardware'],
    'Subcategoria': ['CRM', 'ERP', 'Portátiles', 'Servidores', 'Diseño Gráfico', 'Periféricos', 'Consultoría', 'Ciberseguridad', 'Smartphones', 'Soporte Técnico', 'Capacitación', 'Big Data', 'IA', 'Wearables'],
    'Ventas': [120000, 85000, 250000, 180000, 95000, 110000, 70000, 150000, 220000, 60000, 45000, 100000, 80000, 130000]
}
df = pd.DataFrame(data)

print(df.head())

Salida esperada:

         Region   Producto   Subcategoria  Ventas
0  Norteamérica   Software            CRM  120000
1  Norteamérica   Software            ERP   85000
2  Norteamérica   Hardware      Portátiles  250000
3  Norteamérica   Hardware      Servidores  180000
4        Europa   Software  Diseño Gráfico   95000

Nuestros datos están listos. Tenemos Region (nivel superior), Producto (nivel intermedio) y Subcategoria (nivel inferior). La columna Ventas será el valor que representaremos con el tamaño o el color de las secciones del gráfico.


🌳 Visualizando Jerarquías con Treemaps

Los Treemaps son excelentes para mostrar grandes cantidades de datos jerárquicos en un espacio limitado. Cada nivel de la jerarquía está representado por un rectángulo anidado, y el tamaño del rectángulo es proporcional al valor de la métrica (en nuestro caso, Ventas).

Creando un Treemap Básico

Plotly Express hace que la creación de Treemaps sea increíblemente sencilla. Solo necesitamos especificar la secuencia de columnas que definen la jerarquía y la columna que representa el valor.

fig_treemap = px.treemap(df, 
                         path=['Region', 'Producto', 'Subcategoria'], 
                         values='Ventas',
                         title='Ventas por Región, Producto y Subcategoría (Treemap)')
fig_treemap.show()
Norteamérica Software: $1.2M Software CRM: $800k CRM ERP: $400k ERP Hardware: $600k Hard. Portátiles: $300k Portát. Servidores: $300k Serv. Europa Software: $500k Software Hardware: $450k Hardware Asia Software: $480k Software Hardware: $420k Hardware

Explicación del Código:

  • df: Nuestro DataFrame que contiene los datos.
  • path: Una lista de nombres de columnas que definen la jerarquía, desde el nivel superior hasta el inferior. El orden es crucial.
  • values: El nombre de la columna numérica que determinará el tamaño de cada rectángulo.
  • title: El título del gráfico.

Al ejecutar este código, verás un gráfico interactivo donde puedes hacer clic en una región o un tipo de producto para "hacer zoom" y ver las subcategorías con más detalle. Es una forma muy eficiente de explorar grandes conjuntos de datos jerárquicos.

Personalizando el Treemap

Podemos añadir más información y mejorar la estética de nuestro Treemap. Por ejemplo, podemos usar el color para representar una categoría diferente o para resaltar ciertas áreas.

fig_treemap_color = px.treemap(df, 
                               path=['Region', 'Producto', 'Subcategoria'], 
                               values='Ventas',
                               color='Producto', # Colorear por Producto
                               hover_data=['Ventas'], # Mostrar ventas al pasar el ratón
                               title='Ventas por Región, Producto y Subcategoría (Treemap por Producto)',
                               color_continuous_scale='RdBu') # Escala de color
fig_treemap_color.show()
SOFTWARE SaaS (Cloud) 45% de ingresos Licencias On-Premise 15% de ingresos HARDWARE Servidores 12% Laptops 8% SERVICIOS Consultoría Estratégica 10% Soporte y Mantenimiento 10%

Ajustes Adicionales Comunes:

  • color: Permite asignar un color a los rectángulos basándose en otra columna. Puede ser categórica o continua. Si es continua, usará una escala de color.
  • hover_data: Una lista de columnas cuyos valores se mostrarán cuando el usuario pase el ratón sobre un rectángulo. Esto añade mucha información valiosa sin sobrecargar el gráfico.
  • color_continuous_scale: Si color es una variable continua, puedes especificar una escala de color. Plotly tiene muchas escalas predefinidas (ej. 'Viridis', 'Plasma', 'RdBu').
Profundizando: ¿Cómo elige Plotly la disposición de los rectángulos en un Treemap? Plotly (y la mayoría de las implementaciones de Treemaps) utiliza algoritmos como `squarify` para determinar cómo dividir el espacio en rectángulos de manera que sus relaciones de aspecto sean lo más cercanas posible a 1 (cuadrados). Esto mejora la legibilidad y la capacidad de comparar tamaños. La idea es minimizar la aparición de rectángulos muy largos y estrechos.

🌞 Explorando la Jerarquía con Gráficos Sunburst

Los gráficos Sunburst, también conocidos como gráficos de anillos concéntricos, son otra excelente opción para visualizar jerarquías. Cada anillo representa un nivel de la jerarquía, y los segmentos dentro de un anillo muestran las subdivisiones de ese nivel. Son especialmente útiles para jerarquías profundas y para visualizar cómo las partes contribuyen al todo de una manera circular.

Creando un Sunburst Básico

La sintaxis para un Sunburst en Plotly Express es casi idéntica a la de un Treemap, lo que demuestra la consistencia y facilidad de uso de la librería.

fig_sunburst = px.sunburst(df,
                           path=['Region', 'Producto', 'Subcategoria'],
                           values='Ventas',
                           title='Ventas por Región, Producto y Subcategoría (Sunburst)')
fig_sunburst.show()
VENTAS GLOBALES NORTEAMÉRICA EUROPA ASIA SOFTWARE HARDWARE SERVICIOS SOFTWARE HARDWARE Norteamérica Europa Asia

Al igual que con el Treemap, puedes hacer clic en cualquier segmento para hacer zoom y explorar los niveles inferiores. La naturaleza circular de los Sunbursts puede ser muy atractiva y, en ocasiones, más fácil de interpretar para jerarquías muy ramificadas.

Personalizando el Sunburst

Las opciones de personalización para Sunbursts son muy similares a las de los Treemaps. Podemos usar el color, los datos al pasar el ratón y más.

fig_sunburst_color = px.sunburst(df,
                                 path=['Region', 'Producto', 'Subcategoria'],
                                 values='Ventas',
                                 color='Producto', # Colorear por Producto
                                 hover_data=['Ventas'], # Mostrar ventas al pasar el ratón
                                 title='Ventas por Región, Producto y Subcategoría (Sunburst por Producto)',
                                 color_continuous_scale='YlGnBu') # Otra escala de color
fig_sunburst_color.show()
VENTAS SOFTWARE HARDWARE SERVICIOS SaaS Apps Servidores Laptops Cloud Soporte Haz hover para explorar segmentos
💡 Consejo: Para que el texto sea legible en el Sunburst, especialmente en segmentos pequeños, considera usar `maxdepth` para limitar el número de niveles visibles inicialmente, o confía en la interactividad para que el usuario haga zoom.

Ajustes Adicionales:

  • color_discrete_sequence: Si tu columna color es categórica, puedes especificar una secuencia de colores personalizados.
  • maxdepth: Un entero que limita la profundidad de los niveles de la jerarquía que se muestran inicialmente. Esto puede ser útil para evitar que el gráfico se vea demasiado abrumador al principio.

🌐 Visualización de Proporciones con Circle Packing (Empaquetamiento de Círculos)

El Circle Packing es una técnica de visualización que representa jerarquías mediante círculos anidados o adyacentes. El tamaño de cada círculo es proporcional a su valor, y los círculos hijos están contenidos dentro de sus círculos padres. A menudo se utiliza por su atractivo estético y su capacidad para resaltar relaciones de tamaño.

A diferencia de los Treemaps y Sunbursts que están directamente disponibles en Plotly Express con una función específica, el Circle Packing es un poco más avanzado y a menudo se logra con Plotly Graph Objects o con librerías dedicadas. Sin embargo, podemos simular un efecto de Circle Packing para mostrar las proporciones dentro de las categorías utilizando Treemaps con un diseño circular, o simplemente visualizando las relaciones de tamaño de una manera que se asemeje conceptualmente. Dada la limitación de Plotly Express para un Circle Packing puro de jerarquía anidada como tal, nos centraremos en cómo Plotly gestiona elementos similares que pueden aproximarse a la estética deseada o cómo podrías abordar esta idea si fuera una característica de Plotly Express.

Para propósitos de este tutorial y mantenernos dentro de Plotly Express y su facilidad, un Sunburst o Treemap son los que más se aproximan a la funcionalidad de representar proporciones jerárquicas con elementos anidados de tamaño variable. Si el objetivo es estrictamente un Circle Packing como lo define d3.js, se requerirían pasos más complejos con Plotly Graph Objects o incluso la generación de los datos de posición para los círculos. Por lo tanto, para un enfoque práctico y centrado en la herramienta aquí, es importante reconocer esta distinción.

⚠️ Advertencia: `Plotly Express` no tiene una función `circle_packing` nativa. Los Treemaps y Sunbursts son las opciones más directas para visualizaciones jerárquicas de proporción con esta librería. Si necesitas Circle Packing puro, considera otras librerías o un enfoque más manual con `Plotly Graph Objects` que está fuera del alcance de este tutorial introductorio a `Plotly Express`.

Dado esto, podemos reinterpretar la necesidad de Circle Packing como la necesidad de visualizar proporciones de una manera que destaque la interrelación de los tamaños. Los Sunbursts ya logran esto de manera efectiva con su diseño radial, donde el tamaño del arco refleja la proporción.


📝 Consideraciones de Diseño y Buenas Prácticas

Crear gráficos efectivos va más allá de solo escribir el código. Un buen diseño y la aplicación de mejores prácticas pueden marcar una gran diferencia en la claridad y el impacto de tu visualización.

Colores y Legibilidad

  • Usa paletas de colores adecuadas: Para datos categóricos, usa colores distintos que sean fáciles de diferenciar. Para datos continuos, elige una escala de color que represente bien la progresión de los valores (ej. de claro a oscuro, o una escala divergente para valores positivos/negativos).
  • Evita sobrecargar el gráfico: Demasiados colores o categorías pueden hacer que el gráfico sea confuso. Si tienes muchas categorías, considera agrupar las más pequeñas en una categoría "Otros".
  • Contraste: Asegúrate de que el texto y los elementos del gráfico tengan suficiente contraste con el fondo para ser legibles.

Interactividad

  • Aprovecha el hover_data: Es una de las características más valiosas de Plotly. Permite a los usuarios obtener detalles específicos sin saturar la vista principal.
  • Zoom y Pan: La interactividad por defecto de Plotly permite a los usuarios explorar los datos en profundidad. Asegúrate de que los gráficos sean responsivos y funcionen bien en diferentes tamaños de pantalla.

Títulos y Etiquetas

  • Títulos claros y concisos: El título debe indicar claramente qué está mostrando el gráfico.
  • Etiquetas informativas: Aunque Plotly Express maneja muchas etiquetas automáticamente, asegúrate de que, si añades etiquetas personalizadas, sean comprensibles.

Elección del Gráfico Correcto

  • Treemaps: Excelentes para datos con muchos elementos y para optimizar el espacio. Ideales cuando el tamaño es la métrica principal y la jerarquía es clara.
  • Sunbursts: Prefiribles para jerarquías profundas o cuando el aspecto radial es visualmente más atractivo. Permiten ver el camino completo desde la raíz hasta la hoja de un vistazo.

Ejemplo de un Dashboard Simple (Concepto)

Aunque no lo construiremos aquí, un dashboard podría combinar múltiples gráficos jerárquicos o complementarlos con otros tipos de gráficos. Imagina tener un Treemap mostrando las ventas generales y un Sunburst para una región específica, ambos interactivos y conectados.

FILTROS: Año: 2024 Categoría: Todas Ventas Globales (Treemap) Europa €4.2M Norteamérica $5.8M Asia Latam Oceanía y Otros Detalle: Norteamérica EE.UU. Segmentación por Estado Seleccionado: Norteamérica

✅ Conclusión y Próximos Pasos

En este tutorial, hemos dado un paso significativo en el mundo de la visualización de datos jerárquicos, centrándonos en el poder de Plotly Express para crear Treemaps y Sunbursts interactivos. Hemos aprendido cómo transformar datos complejos y anidados en visualizaciones claras que no solo informan, sino que también invitan a la exploración y el descubrimiento. El storytelling con datos es una habilidad esencial en el siglo XXI, y dominar estas técnicas te permitirá comunicar ideas de manera más efectiva y persuasiva.

Ahora tienes las bases para:

  • Identificar cuándo un gráfico jerárquico es la mejor opción para tus datos.
  • Utilizar Plotly Express para construir Treemaps y Sunbursts.
  • Personalizar estos gráficos para mejorar su legibilidad y su atractivo visual.
  • Comprender las fortalezas y debilidades de cada tipo de visualización jerárquica.

¿Qué Sigue?

La visualización de datos es un campo en constante evolución. Te animo a seguir explorando:

  1. Explorar Plotly Graph Objects: Para un control aún más fino y visualizaciones altamente personalizadas, la API de Graph Objects de Plotly es el siguiente nivel.
  2. Integración con Dash: Lleva tus visualizaciones interactivas al siguiente nivel construyendo dashboards completos con Dash, el framework de Plotly para aplicaciones web.
  3. Más Conjuntos de Datos: Experimenta con tus propios datos jerárquicos. Prueba a visualizar la estructura de archivos de tu ordenador, datos de organización de proyectos o taxonomías biológicas.
  4. Análisis Comparativo: Crea Treemaps y Sunbursts para diferentes períodos de tiempo o grupos y compara los resultados. Esto puede revelar cambios importantes en la estructura o las proporciones.

La capacidad de contar historias convincentes con datos es una habilidad invaluable. Sigue practicando, experimentando y desafiándote a ti mismo para encontrar nuevas formas de revelar las narrativas ocultas en tus datos.

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!