Volver al curso

Data Science con Python: Análisis de Datos para Tu Carrera

leccion
18 / 23
intermediate
8 horas
Visualizacion de Datos

Plotly: Graficos Interactivos y Dashboards

Lectura
50 min~3 min lectura

Plotly: Graficos Interactivos y Dashboards

De Estatico a Interactivo

Plotly crea graficos interactivos que podes hacer zoom, filtrar, y mostrar detalles al pasar el mouse. Son ideales para presentaciones, reportes web y dashboards.

import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import numpy as np

Plotly Express: Graficos Rapidos
np.random.seed(42)
df = pd.DataFrame({
    'vendedor': np.random.choice(['Ana', 'Carlos', 'Maria', 'Luis', 'Sofia'], 200),
    'region': np.random.choice(['Norte', 'Sur', 'Este', 'Oeste'], 200),
    'producto': np.random.choice(['Laptop', 'Monitor', 'Teclado'], 200),
    'monto': np.random.randint(100, 5000, 200),
    'fecha': pd.date_range('2025-01-01', periods=200, freq='D')
})

# Grafico de barras interactivo
ventas_region = df.groupby('region')['monto'].sum().reset_index()
fig = px.bar(ventas_region, x='region', y='monto',
             title='Ventas Totales por Region',
             color='region', text='monto',
             color_discrete_sequence=px.colors.qualitative.Set2)
fig.update_traces(texttemplate='$%{text:,.0f}', textposition='outside')
fig.update_layout(showlegend=False)
fig.show()

Lineas temporales interactivas

ventas_diarias = df.groupby('fecha')['monto'].sum().reset_index()
ventas_diarias['mm_7'] = ventas_diarias['monto'].rolling(7).mean()

fig = px.line(ventas_diarias, x='fecha', y=['monto', 'mm_7'],
              title='Ventas Diarias con Media Movil',
              labels={'value': 'Monto ($)', 'variable': 'Serie'})
fig.update_layout(hovermode='x unified')
fig.show()

Scatter interactivo

fig = px.scatter(df, x='monto', y='monto',
                 color='region', size='monto',
                 hover_data=['vendedor', 'producto'],
                 title='Ventas por Region')
fig.show()

Graficos Avanzados con Plotly

Treemap (composicion jerarquica)

resumen = df.groupby(['region', 'producto'])['monto'].sum().reset_index()

fig = px.treemap(resumen, path=['region', 'producto'], values='monto',
                 title='Composicion de Ventas',
                 color='monto', color_continuous_scale='Viridis')
fig.show()

Sunburst (jerarquia circular)

fig = px.sunburst(resumen, path=['region', 'producto'], values='monto',
                  title='Distribucion de Ventas')
fig.show()

Mapa de calor temporal

df['dia_semana'] = df['fecha'].dt.day_name()
df['semana'] = df['fecha'].dt.isocalendar().week.astype(int)

heatmap_data = df.groupby(['dia_semana', 'semana'])['monto'].sum().reset_index()
heatmap_pivot = heatmap_data.pivot(index='dia_semana', columns='semana', values='monto')

fig = px.imshow(heatmap_pivot.fillna(0),
                title='Mapa de Calor: Ventas por Dia y Semana',
                color_continuous_scale='YlOrRd',
                labels={'color': 'Ventas ($)'})
fig.show()

Graph Objects: Control Total
# Dashboard con multiples metricas
fig = go.Figure()

# KPIs con indicadores
fig = go.Figure(go.Indicator(
    mode="number+delta",
    value=df['monto'].sum(),
    title={"text": "Ventas Totales"},
    delta={'reference': df['monto'].sum() * 0.9, 'relative': True},
    number={'prefix': '$', 'valueformat': ',.0f'}
))
fig.update_layout(height=200)
fig.show()

# Grafico combinado: barras + linea
ventas_mensual = df.set_index('fecha').resample('M')['monto'].agg(['sum', 'mean']).reset_index()

fig = go.Figure()
fig.add_trace(go.Bar(
    x=ventas_mensual['fecha'],
    y=ventas_mensual['sum'],
    name='Total Mensual',
    marker_color='#2196F3'
))
fig.add_trace(go.Scatter(
    x=ventas_mensual['fecha'],
    y=ventas_mensual['mean'],
    name='Promedio Diario',
    yaxis='y2',
    line=dict(color='#FF5722', width=3)
))
fig.update_layout(
    title='Ventas Mensuales: Total y Promedio',
    yaxis=dict(title='Total ($)'),
    yaxis2=dict(title='Promedio ($)', overlaying='y', side='right'),
    hovermode='x unified'
)
fig.show()

Video Recomendado

Plotly Python Tutorial - Graficos Interactivos


Ejercicio Practico

Crea un notebook 18_plotly.ipynb:

  1. Crea un grafico de barras interactivo con ventas por categoria
  2. Crea una serie temporal interactiva con media movil
  3. Crea un treemap con la composicion de ventas por region y producto
  4. Crea un indicador KPI con delta respecto al mes anterior
  5. Crea un grafico combinado de barras + linea con dos ejes Y

💡 Concepto Clave

Revisemos los puntos más importantes de esta lección antes de continuar.

Resumen

  • Plotly Express: Graficos rapidos con una linea de codigo
  • Graph Objects: Control total sobre cada elemento
  • Interactividad: Zoom, hover, filtros automaticos
  • Tipos avanzados: Treemap, sunburst, indicadores KPI
  • Exportar: fig.write_html() para compartir graficos interactivos
  • Ideal para dashboards y presentaciones ejecutivas
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
  • Comprendo el concepto principal y puedo explicarlo con mis palabras
  • Entiendo cómo aplicarlo en mi situación específica
  • Necesito repasar algunas partes antes de continuar
  • Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.