Convertir datos en una herramienta interactiva permite responder preguntas como: ¿cómo evolucionan las ventas?, ¿qué categorías generan más ingresos?, ¿qué regiones aportan mayores ganancias?
Para explorar estas preguntas, construí un dashboard de ventas en español con Python, Streamlit y Plotly, y lo desplegué en Streamlit Community Cloud, conectado a GitHub.
Todos los datos son ficticios y están identificados como datos de demostración. No representan operaciones de una empresa real.
1. Datos reproducibles
El proyecto genera 2.400 pedidos del año 2025. Cada registro incluye:
- Identificador del pedido.
- Fecha.
- Categoría.
- Región.
- Unidades.
- Ventas y costos.
La generación utiliza random.Random(42), una semilla fija que permite obtener los mismos datos al repetir la ejecución en el mismo entorno.
Los importes se almacenan en céntimos enteros y se convierten a soles peruanos al mostrarlos. Así evitamos acumular errores de representación decimal en las sumas.
2. Indicadores con definiciones claras
El dashboard presenta cuatro indicadores:
| Indicador | Cálculo |
|---|---|
| Ventas | Suma de los importes vendidos |
| Ganancias | Ventas menos costos simulados |
| Pedidos | Cantidad de identificadores únicos |
| Ticket promedio | Ventas divididas entre pedidos |
Si no hay pedidos, el ticket promedio se muestra como cero para evitar una división entre cero.
Con el conjunto completo, los resultados son:
| Indicador | Resultado |
|---|---|
| Ventas | S/ 2.437.981,88 |
| Ganancias simuladas | S/ 656.355,02 |
| Pedidos | 2.400 |
| Ticket promedio | S/ 1.015,83 |
La simulación no incorpora impuestos ni devoluciones. Por eso, las ganancias representan la diferencia entre las ventas y los costos generados, no un beneficio neto contable.
3. Filtros y visualizaciones
La barra lateral permite filtrar por fecha, categoría y región.
Las condiciones se combinan: cada pedido debe cumplir todos los filtros seleccionados. El período incluye la fecha inicial y la final.
Con Plotly, la aplicación muestra tres visualizaciones:
- Evolución diaria de ventas: permite observar el comportamiento durante el período, incluyendo los días sin ventas como cero.
- Ventas por categoría: facilita comparar las categorías de productos.
- Resultados por región: compara ventas y ganancias simuladas.
Los indicadores, los gráficos y la tabla responden a la misma selección.
Si los filtros no encuentran pedidos, aparece un mensaje explicativo y los indicadores quedan en cero.
4. Tabla y descarga en CSV
Además de los gráficos, el dashboard incluye una tabla con el detalle de los pedidos filtrados.
El botón de descarga exporta exactamente esa selección a un archivo CSV, con:
- Encabezados en español.
- Codificación UTF-8 con BOM.
- Coma como separador.
- Importes expresados en PEN.
Esto permite continuar el análisis en una hoja de cálculo u otra herramienta.
5. Separar los cálculos de la interfaz
Organicé el proyecto con esta estructura:
data-visualization-dashboard/
├── app.py
├── sales.py
├── requirements.txt
├── requirements-dev.txt
├── .gitignore
├── .streamlit/
│ └── config.toml
├── .github/
│ └── workflows/
│ └── checks.yml
├── tests/
│ └── test_sales.py
└── docs/
└── articulo-borrador.md
app.py construye la interfaz de Streamlit y los gráficos de Plotly.
sales.py contiene la generación de datos, los filtros, los indicadores y la preparación del CSV.
Esta separación permite comprobar las reglas del dashboard sin depender de su presentación visual.
6. Ejecutar el proyecto localmente
Para probarlo en Windows con Python 3.12:
git clone https://github.com/Abel-GG-777/data-visualization-dashboard.git
cd data-visualization-dashboard
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.\.venv\Scripts\python.exe -m streamlit run app.py
Después, abre:
http://localhost:8501
En Linux o macOS:
git clone https://github.com/Abel-GG-777/data-visualization-dashboard.git
cd data-visualization-dashboard
python3.12 -m venv .venv
.venv/bin/python -m pip install -r requirements-dev.txt
.venv/bin/python -m streamlit run app.py
requirements.txt contiene las dependencias de la aplicación. requirements-dev.txt incorpora también pytest para ejecutar las pruebas.
7. Comprobar los cálculos y filtros
La validación local incluyó nueve pruebas automatizadas, todas aprobadas.
Las pruebas verifican:
- Reproducibilidad de los datos.
- Consistencia entre ventas, costos y ganancias.
- Indicadores con valores conocidos.
- Fechas inclusivas y selección de un solo día.
- Combinación de filtros.
- Selecciones vacías.
- Contenido del CSV.
- Interacciones con la aplicación mediante
AppTestde Streamlit.
Para ejecutarlas en Windows:
.\.venv\Scripts\python.exe -m pytest -q
También comprobé el arranque del servidor y ejecuté pip check, que no encontró conflictos entre las dependencias instaladas.
8. Desplegar en Streamlit Community Cloud
Una vez subido el código a GitHub, conecté el repositorio a Streamlit Community Cloud.
La configuración utilizada fue:
Repositorio: Abel-GG-777/data-visualization-dashboard
Rama: main
Archivo principal: app.py
Python: 3.12
El proceso consiste en:
- Iniciar sesión en Streamlit Community Cloud y conectar GitHub.
- Crear una aplicación desde el repositorio.
- Seleccionar la rama y el archivo principal.
- Configurar la versión de Python.
- Pulsar Deploy y revisar los registros.
El servicio instala las dependencias declaradas en requirements.txt. Esta aplicación no necesita claves de API ni secretos.
Después del despliegue, comprobé que el dashboard se podía abrir en una ventana de incógnito.
Puedes consultar la guía oficial de despliegue.
9. Actualizaciones automáticas y GitHub Actions
Community Cloud refleja los cambios que se suben a la rama conectada. Cuando cambian las dependencias, el servicio vuelve a instalarlas, lo que puede tardar más que una actualización de código.
Documentación oficial sobre actualizaciones.
El repositorio también incluye un workflow de GitHub Actions que instala las dependencias, compila el código y ejecuta las pruebas en cada push y pull request.
Ambos procesos tienen funciones distintas:
| Herramienta | Función |
|---|---|
| GitHub Actions | Comprobar el código y ejecutar las pruebas |
| Streamlit Community Cloud | Desplegar y actualizar la aplicación |
Un fallo de Actions no bloquea automáticamente el despliegue de Community Cloud. Para controlar qué cambios llegan a main, se pueden utilizar pull requests y protección de rama con comprobaciones obligatorias cuando estén disponibles.
Qué aprendí construyéndolo
Este proyecto conecta varias partes del desarrollo de una aplicación de datos: generar información reproducible, definir métricas, aplicar filtros coherentes, visualizar resultados, exportar datos y verificar el comportamiento antes de desplegar.
Streamlit permite construir la interfaz desde Python y Plotly aporta gráficos interactivos. Separar la lógica de la presentación facilita mantener el proyecto y probar sus cálculos.
Como siguiente mejora, se podría sustituir el generador de datos ficticios por una fuente real, definiendo antes cómo tratar pedidos duplicados, devoluciones, impuestos y datos faltantes.
Top comments (0)