El uso de gráficas avanzadas como Icicle permite resumir y concluir para tomar decisiones estrátegicas
Recientemente leyendo un artículo en Medium, acerca de nuevas visualizaciones (Ajay Parmar, en su artículo 9 Unique Data Visualization Charts with Plotly), encontré Icicle. En mi experiencia, normalmente se hacían versiones tradicionales de pie chart, o mezclaba varias gráficas en un dashboard en Tableau o PowerBi para obtener el resultado.
Para construir la gráfica de Icicle, utilicé siempre los datos de Estados Unidos que había trabajado para el artículo Visualizando Patrones Comerciales de Exportaciones con Space Time Cubes sólo que en lugar de utilizar al sector lácteo, utilice el de frutas frescas, secas y congeladas.
Mi objetivo era sencillo: cómo explicarle a mi audiencia, qué países eran los principales destinos de las exportaciones de Estados Unidos, a través de qué puertos y qué productos (en términos técnicos, utilizando la subpartida como descripción). Todo de manera dinámica.
¿Cómo se construye?
Para la creación del proyecto en Python, sólos e usan tres librerías:
-
- Plotly (tal y como se explicó en el artículo de Ajay Parmar)
-
- Pandas (tradicional)
-
- os
Con esas tres librerías se trabajó (con Claude para la generación del código) en la creación de la gráfica. También se descargó la información de puertos de Estados Unidos a través del API del Census Bureau, de enero del 2017 a agosto del 2025 (finalmente sólo usamos del 2017 al 2024).
Hicimos también hicimos algunos filtros:
-
- En la lista de países estaba agregada USMCA (que es el Tratado de Libre Comercio de Estados Unidos, México y Canadá), se duplicaban los valores.
-
- Sólo tomamos a los 10 principales países que compran frutas de Estados Unidos
-
- Sólo se toman los 50 productos principales
Luego de esta limpieza quedaron 14,731 registros, de cerca de 200,000 que tenía los datos originales. Con un monto de comercio de US$84.25 mil millones de dólares, con 10 países y 50 productos.
La base de datos junto con el script estarán disponibles en (el archivo de datos original está en español):
¿Qué obtenemos?
De este script, obtendremos lo siguiente: A. Un filtrado de los datos para que usemos los más importantes (sección de AGREGAR Y FILTRAR); B. Creación de la jerarquía para la gráfica (sección CONSTRUIR JERARQUÍA) y C. La visualización de Icicle (CREAR ICICLE CHART) y por último se crea un archivo html (para verlo en cualquier computadora y no afectar rendimiento) que se guarda en el directorio que se especificó (Establecer directorio de trabajo).
# Script 1: Icicle
import pandas as pd
import plotly.graph_objects as go
import os
# Establecer directorio de trabajo
os.chdir(r'E:\OneDrive\XXXXIcicle\Datos') # ajustar
# CARGAR Y LIMPIAR DATOS
df = pd.read_csv(r'E:\XXX\exports_capitulo_08\exports_08.csv') # ajustar
df['Fecha'] = pd.to_datetime(df['Fecha'])
df = df[(df['Fecha'].dt.year >= 2017) & (df['Fecha'].dt.year <= 2024)]
df = df[~df['País'].isin(['USMCA (NAFTA)', 'USMCA', 'NAFTA'])].copy()
df = df[df['Valor US$'] > 0].copy()
df['Producto'] = df['Subpartida'].astype(str) + ' - ' + df['Descripción'].str[:30]
# AGREGAR Y FILTRAR
df_agg = df.groupby(['País', 'Puerto', 'Producto']).agg({'Valor US$': 'sum'}).reset_index()
TOP_PAISES = 10
TOP_PRODUCTOS = 50
top_paises = df_agg.groupby('País')['Valor US$'].sum().nlargest(TOP_PAISES).index
df_filtrado = df_agg[df_agg['País'].isin(top_paises)].copy()
top_productos = df_filtrado.groupby('Producto')['Valor US$'].sum().nlargest(TOP_PRODUCTOS).index
df_filtrado = df_filtrado[df_filtrado['Producto'].isin(top_productos)]
# CONSTRUIR JERARQUÍA
labels = ['Chapter 08<br>Edible Fruits<br>& Nuts']
parents = [""]
values = [df_filtrado['Valor US$'].sum()]
ids = ["root"]
for pais in df_filtrado['País'].unique():
labels.append(pais)
parents.append("root")
values.append(df_filtrado[df_filtrado['País'] == pais]['Valor US$'].sum())
ids.append(pais)
for _, row in df_filtrado.groupby(['País', 'Puerto'])['Valor US$'].sum().reset_index().iterrows():
labels.append(row['Puerto'])
parents.append(row['País'])
values.append(row['Valor US$'])
ids.append(f"{row['País']}-{row['Puerto']}")
for _, row in df_filtrado.iterrows():
labels.append(row['Producto'])
parents.append(f"{row['País']}-{row['Puerto']}")
values.append(row['Valor US$'])
ids.append(f"{row['País']}-{row['Puerto']}-{row['Producto']}")
# CREAR ICICLE CHART
fig = go.Figure(go.Icicle(
ids=ids,
labels=labels,
parents=parents,
values=values,
branchvalues="total",
marker=dict(
colorscale='Greens',
line=dict(color='white', width=2)
),
root=dict(color='#1e5c12'),
textfont=dict(size=11),
hovertemplate='<b>%{label}</b><br>Value: $%{value:,.0f}<br>% of parent: %{percentParent:.1%}<extra></extra>'
))
fig.update_layout(
title={
'text': 'U.S. Exports - Chapter 08: Edible Fruits and Nuts<br><sub>Top 10 Countries → Ports → Products (Total - 2017-2024)</sub><br>Zoom in for details<sub></sub>',
'x': 0.5,
'xanchor': 'center',
'font': {'size': 18}
},
height=1200,
margin=dict(t=120, l=5, r=5, b=5),
font=dict(family='Arial', size=11),
paper_bgcolor='white',
plot_bgcolor='white'
)
# GUARDAR
archivo = 'icicle_chapter08_exports.html'
fig.write_html(archivo, config={'displayModeBar': False}, include_plotlyjs='cdn')
print(f"\n✅ Archivo guardado: {os.path.join(os.getcwd(), archivo)}")
print(f"📊 Total Value: ${df_filtrado['Valor US$'].sum():,.2f}")
print(f"🌎 Countries: {df_filtrado['País'].nunique()}")
print(f"📦 Products: {df_filtrado['Producto'].nunique()}")
Creación autor asistido por Claude en el código
Pero, a mi audiencia qué
A. Canadá (35.6% del total, US$30.0 mil millones) -> Detroit, MI (23.0%) -> Raspberries(16.9%)
B. México (10.0% del total, US$8.4 mil millones) ->Nogales, AZ (30.3%)-> Manzanas frescas (47.0%)
C. India (9.2% del total, US$7.7 mil millones) ->Oakland, CA (75.4%) ->Almendras 86.9%)
Con exactamente cuatro clicks (o acciones), se puede tener una radiografía del país explicativa y que permite tomar acciones. Falta, si. Por ejemplo, cuánto ha crecido en el acumulado, pero todo esto es modificable en el código.
En resumen, Canadá representa el 35.6% del total de las exportaciones de Estados Unidos -más de US$30 mil millones de dólares-, usan mayoritariamente Detroit, MI -23% del total y 17% de lo que entra por este puerto son Raspberries. Igual va para México, 10% del total, US$8.4 mil millones de dólares, por Nogalez, AZ (3 de cada 10 dólares exportados a México) y la mitad son manzanas frescas.
Respuestas por ejemplo, para un país que exporta bananos (Guatemala) que normalmente indica que su destino (país vendedor es Estados Unidos), ahora podríamos ver qué puertos usa Canadá desde Estados Unidos para comprar bananos (la lógica y presunción aquí es que por cercanía Guatemala podría ser uno de los proveedores más cercanos). Con dos clicks se observa que no es por Detroit, MI que entra, tampoco por Port Huron, MI, pero si por Blaine, WA (cerca de la frontera con Canadá, en la costa oeste), los bananos vienen de Ecuador. Con US$504.2 millones de dólares exportados. Ahh…pero Estados Unidos no produce bananos, así es pero si los vende o distribuye. Sin embargo, no es el más importante, la gráfica de Icicle permite ver también tamaños, y vemos que el puerto de Buffalo-Niagara Falls, NY en el lado este es el que mueve más bananos, comparado con Blaine, WA es el doble con más de US$1.0 mil millones de dólares.
¿Cómo se ve la gráfica Icicle?
A nivel general, tiene una jerarquía sencilla: la raíz que corresponde a la clasificación general (Frutas), en el segundo se coloca el país (al cual se le da su participación), posteriormente los puertos y por último los productos.
Icicle General Exportaciones de Frutas Top 10 Países de Estados Unidos, Acumulado 2017–2024, en US$

👉 ** [Ver Icicle Chart Interactivo](https://rodomeo.github.io/Icicle_frutas_eeuu/)**
La visualización muestra la jerarquía: País → Puerto → Producto, permitiéndote navegar entre los diferentes niveles haciendo click en cada sección. Sin embargo, esta jerarquí puede cambiar a País→Producto→Puerto, depende lo que se quiera visualizar.
Icicle Exportaciones de Frutas de Estados Unidos a Canadá, Acumulado 2017–2024, en US$

👉 ** [Ver Icicle Chart Interactivo](https://rodomeo.github.io/Icicle_frutas_eeuu/)**
En este caso se puede observar que al hacer zoom in y de acuerdo con el país seleccionado, se cambia la gráfica y ahora el foco es Canadá y sus puertos.
Icicle Exportaciones de Frutas de Estados Unidos a Países Bajos, Acumulado 2017–2024, en US$

👉 ** [Ver Icicle Chart Interactivo](https://rodomeo.github.io/Icicle_frutas_eeuu/)**
Para el caso de Países Bajos, también es Oakland, CA el principal puerto de salida y almendras (California es el mayor productor mundial de una diversidad de nueces). Tiene sentido que salga de este puerto, en lugar de cruzar por tierra todo Estados Unidos y luego cruzar el Atlántico y posterior llegar Países Bajos ya que normalmente este tipo de productos se vende en bulk.
Estaremos haciendo otras visualizaciones avanzadas para ir viendo cuál es la mejor, haremos el mismo ejercicio para Treemap y Sunburst.
📊 Reproducir el Análisis
- Todo el código y datos están disponibles en GitHub:
- 💻 **Código:** https://github.com/rodomeo/Icicle_frutas_eeuu
- 📁 **Datos:** [exports_08.csv](https://github.com/rodomeo/Icicle_frutas_eeuu/blob/main/exports_08.zip)
- 🐍 **Script Python:** [icicle_script.py](https://github.com/rodomeo/Icicle_frutas_eeuu/blob/main/script.py)
- 🔗 Repo: https://github.com/rodomeo/Icicle_frutas_eeuu

