Ticker

6/recent/ticker-posts

Aplicación Dashboard de Ventas desarrollado en Python con Streamlit

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.csv con columnas: fecha, producto, categoria, venta_total, cantidad y precio_unitario.
  • Entorno virtual: Se recomienda el uso de venv o conda para 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

  1. Inicio: El usuario ejecuta la aplicación mediante streamlit run app.py.
  2. Carga: El sistema busca el archivo CSV en la ruta local definida.
  3. Procesamiento: Pandas transforma los datos y convierte las series de tiempo.
  4. Renderizado: Streamlit despliega las métricas (st.metric) y los gráficos de Plotly.
  5. 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_uploader para 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-except para 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

Publicar un comentario

0 Comentarios