Dashboards Interactivos con Streamlit
Aplicaciones web interactivas para análisis de datos en tiempo real

Dashboards Interactivos con Streamlit
Este proyecto consiste en el desarrollo de dashboards interactivos utilizando Streamlit, una librería de Python que permite crear aplicaciones web de forma rápida y sencilla.
Los dashboards incluyen análisis de ventas, comportamiento de clientes, métricas de rendimiento y visualizaciones dinámicas que facilitan la toma de decisiones.
🎯 Objetivo del proyecto
- Visualizar métricas clave de negocio en tiempo real
- Análisis interactivo de datos de ventas y clientes
- Filtros dinámicos para segmentación de datos
- Exportación de reportes y visualizaciones
📊 KPIs Principales
🧩 Estructura del dashboard
Panel Principal
Vista general con KPIs principales y gráficos de tendencias
Análisis de Ventas
Desglose detallado de ventas por período, categoría y región
Comportamiento de Clientes
Análisis de segmentación y patrones de compra
Visualizaciones Interactivas
Gráficos dinámicos con filtros personalizables
🧠 Conclusiones clave
Streamlit permite crear dashboards profesionales con Python de forma rápida y eficiente
La interactividad mejora significativamente la experiencia del usuario en el análisis de datos
Integración perfecta con bibliotecas de Python como Pandas, Plotly y Matplotlib
🛠️ Herramientas aplicadas
- Streamlit para el desarrollo de la aplicación web
- Pandas para procesamiento y análisis de datos
- Plotly y Matplotlib para visualizaciones interactivas
👩💻 Mi Rol
- Diseño y desarrollo del dashboard completo
- Implementación de visualizaciones y filtros interactivos
- Optimización de rendimiento y experiencia de usuario
💻 Código Python del Dashboard
import streamlit as st
import pandas as pd
import numpy as np
import plotly.graph_objects as go
from streamlit_option_menu import option_menu
from datetime import datetime
# Configuración de página
st.set_page_config(
page_title="Dashboard Profesional",
layout="wide",
initial_sidebar_state="expanded",
page_icon="📊"
)
# Cargar estilos CSS desde archivo externo
with open("estilos.css") as f:
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
# SIDEBAR con contenido centrado
with st.sidebar:
st.markdown('<div class="sidebar-content">', unsafe_allow_html=True)
st.image("imagen1.png", width=200)
st.markdown('<div class="sidebar-name">Jesica Gimenez</div>', unsafe_allow_html=True)
st.markdown('<div class="sidebar-role">Analista de Datos</div>', unsafe_allow_html=True)
selected = option_menu(
menu_title=None,
options=["Inicio", "Dashboard", "Configuración"],
icons=["house", "bar-chart-line", "gear"],
menu_icon="cast",
default_index=1,
orientation="vertical",
styles={
"container": {"padding": "0!important", "background-color": "#1e1e2f", "width":"100%"},
"icon": {"color": "#8e8e8e", "font-size": "18px"},
"nav-link": {"font-size": "16px", "text-align": "center", "margin":"5px 0", "--hover-color": "#6200ea"},
"nav-link-selected": {"background-color": "#bb86fc", "color": "#121212"},
}
)
st.markdown('</div>', unsafe_allow_html=True)
# Datos ficticios
np.random.seed(42)
dates = pd.date_range(end=datetime.today(), periods=30)
visits = np.random.poisson(lam=11000, size=30) + np.linspace(0, 5000, 30).astype(int)
conversion_labels = ['Orgánico', 'Pago', 'Referido', 'Directo']
conversion_values = [45, 25, 15, 15]
categories = ['Tecnología', 'Moda', 'Hogar', 'Libros', 'Deportes']
cat_values = [2100, 1800, 1600, 1400, 1200]
heatmap_data = np.random.randint(0, 100, size=(7, 24))
days = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom']
hours = [f"{h}:00" for h in range(24)]
kpi_values = [78, 54, 92]
kpi_labels = ["Satisfacción", "Retención", "Crecimiento"]
# Gráficos
def circular_progress(value, label, color):
fig = go.Figure(go.Indicator(
mode="gauge+number",
value=value,
domain={'x': [0, 1], 'y': [0, 1]},
title={'text': label, 'font': {'size': 16}},
gauge={
'axis': {'range': [0, 100], 'visible': False},
'bar': {'color': color},
'bgcolor': "#3a3a65",
'borderwidth': 0,
'threshold': {
'line': {'color': "white", 'width': 2},
'thickness': 0.75,
'value': value}
}
))
fig.update_layout(
margin=dict(l=0, r=0, t=20, b=0),
height=140,
paper_bgcolor="#29294a",
font=dict(color="white", family="Montserrat")
)
return fig
def radar_chart(labels, values):
fig = go.Figure()
fig.add_trace(go.Scatterpolar(
r=values,
theta=labels,
fill='toself',
line_color='#bb86fc'
))
fig.update_layout(
polar=dict(
bgcolor='#29294a',
radialaxis=dict(visible=True, range=[0, 100], gridcolor='gray'),
angularaxis=dict(gridcolor='gray')
),
showlegend=False,
margin=dict(l=10, r=10, t=25, b=10),
paper_bgcolor="#29294a",
font=dict(color="white", family="Montserrat"),
height=250,
)
return fig
# MAIN
if selected == "Inicio":
show_inicio()
elif selected == "Dashboard":
show_dashboard()
else:
show_configuracion()
🔗 Accedé al dashboard completo
Podés ver el dashboard interactivo desde el siguiente enlace:
Ver Dashboard Interactivo