En este tutorial desarrollamos una aplicaciones "Dashboard de Ventas" web con Python y Streamlit, recordemos que al aplicar Streamlit es una de las formas más rápidas y visuales de poder mostrar el resultado al usuario final. Streamlit permite crear interfaces interactivas para análisis de datos, modelos de IA o dashboards funcionales en pocas líneas de código y sin tener amplios conocimientos HTML, CSS ni JavaScrip.
1. Resumen de la Aplicación
Esta herramienta interactiva permite a las tiendas minoristas transformar datos planos en conocimiento accionable mediante visualizaciones dinámicas. El sistema carga automáticamente datasets de ventas en formato CSV, procesando información crítica como fechas, categorías y montos totales. Gracias a su interfaz intuitiva, los usuarios pueden monitorear métricas clave en tiempo real, analizar tendencias temporales y evaluar el rendimiento por producto, facilitando una gestión de inventarios eficiente y estrategias de marketing basadas en datos.
2. Requisitos Previos
- Python 3.8 o superior: Lenguaje base para la ejecución del script.
- Archivo de datos: Un archivo CSV ubicado en
datasets_basicos/ventas_30.csvcon columnas: fecha, producto, categoria, venta_total, cantidad y precio_unitario. - Entorno virtual: Se recomienda el uso de
venvocondapara gestionar las dependencias.
3. Stack Tecnológico y Librerías
- Streamlit: Framework de código abierto que permite crear aplicaciones web para proyectos de ciencia de datos de forma ágil.
- Pandas: Biblioteca fundamental que ofrece estructuras de datos flexibles diseñadas para trabajar de manera intuitiva con datos tabulares y relacionales.
- Plotly Express: Herramienta de visualización de alto nivel que facilita la creación de gráficos interactivos complejos con una sintaxis muy simplificada.
4. Análisis del Código por Bloques
A. Configuración e Importación
Se establecen las librerías necesarias y los parámetros iniciales de la interfaz web.
import streamlit as st
import pandas as pd
import plotly.express as px
from pathlib import Path
# Configuración de la página
st.set_page_config(page_title="Dashboard de Ventas", layout="wide")
# Título de la aplicación
st.title("📊 Dashboard de Ventas - Tienda Minorista")
st.markdown("---")
B. Gestión y Carga de Datos
Se implementa una función con caché para optimizar el rendimiento y la limpieza de datos.
# Función para cargar el dataset desde archivo CSV
@st.cache_data
def cargar_dataset_ventas():
ruta_csv = 'datasets_basicos/ventas_30.csv'
# Leer el archivo CSV
df = pd.read_csv(ruta_csv)
# Convertir columna fecha a datetime para mejor manejo
df['fecha'] = pd.to_datetime(df['fecha'])
return df
# Cargar los datos
df_ventas = cargar_dataset_ventas()
C. Métricas Principales y Descarga
Cálculo de KPIs básicos y habilitación de la opción de exportación de datos.
if df_ventas is not None:
# Mostrar información del dataset
col1, col2, col3 = st.columns(3)
with col1:
st.metric("📋 Total Registros", len(df_ventas))
with col2:
st.metric("💰 Venta Total", f"${df_ventas['venta_total'].sum():,.2f}")
with col3:
st.metric("📦 Productos Vendidos", df_ventas['cantidad'].sum())
# Botón para descargar el CSV
csv = df_ventas.to_csv(index=False).encode('utf-8')
st.download_button(
label="📥 Descargar dataset ventas_30.csv",
data=csv,
file_name="ventas_30.csv",
mime="text/csv"
)
st.dataframe(df_ventas, use_container_width=True)
D. Visualizaciones Interactivas
Creación de gráficos de línea, barras y pastel para análisis de tendencias y distribución.
# Gráfico 1: Ventas por fecha (línea)
ventas_por_fecha = df_ventas.groupby('fecha')['venta_total'].sum().reset_index()
fig_lineal = px.line(ventas_por_fecha, x='fecha', y='venta_total',
title='Tendencia de Ventas Diarias', markers=True)
st.plotly_chart(fig_lineal, use_container_width=True)
# Gráfico 2: Ventas por producto (barra)
ventas_por_producto = df_ventas.groupby('producto')['venta_total'].sum().sort_values(ascending=True)
fig_barras = px.bar(x=ventas_por_producto.values, y=ventas_por_producto.index,
orientation='h', title='Ventas Totales por Producto')
st.plotly_chart(fig_barras, use_container_width=True)
5. Flujo de Trabajo
- Inicio: El usuario ejecuta la aplicación mediante
streamlit run app.py. - Carga: El sistema busca el archivo CSV en la ruta local definida.
- Procesamiento: Pandas transforma los datos y convierte las series de tiempo.
- Renderizado: Streamlit despliega las métricas (
st.metric) y los gráficos de Plotly. - Interacción: El usuario puede filtrar visualmente, explorar la tabla o descargar el archivo original.
6. Recomendaciones de Implementación
- Validación de archivos: Implementar un componente
st.file_uploaderpara permitir que el usuario suba cualquier archivo CSV sin depender de una ruta estática. - Manejo de Errores: Envolver la carga de datos en un bloque
try-exceptpara capturar errores de formato o archivos faltantes. - Seguridad: Si se despliega en la nube, asegurar que los datasets no contengan información sensible de clientes sin encriptar.
7. Próximos Pasos para Mejorar el Código
- Filtros Dinámicos: Agregar una barra lateral (
st.sidebar) con selectores de fecha y categoría para segmentar los gráficos. - Predicción: Integrar una librería de series temporales (como
Prophet) para proyectar ventas futuras. - Conexión a BD: Migrar la carga de CSV a una conexión directa con una base de datos SQL para manejar volúmenes de datos mayores.
Tutorial elaborado por Hadson Paredes - 2026
- Repositorio Streamlit-Learning
- Ruta de aprendizaje de Streamlit
0 Comentarios