File size: 1,496 Bytes
dd0ff4c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | # app.py
import streamlit as st
import pandas as pd
import plotly.express as px
from data_loader import simulate_transport_data
# Configuración de la página
st.set_page_config(page_title="Dashboard Transporte", layout="wide")
# Título de la aplicación
st.title("📊 Monitoreo de Flota de Transporte Urbano")
# Cargar datos simulados
df = simulate_transport_data()
# Filtro por autobús
bus = st.selectbox(
"Selecciona un autobús",
options=df['bus_id'].unique()
)
filtered_df = df[df['bus_id'] == bus]
# Sección de KPIs resumen
st.subheader(f"Resumen - {bus}")
col1, col2, col3 = st.columns(3)
with col1:
st.metric(
"Puntualidad Prom.",
f"{filtered_df['punctuality'].mean():.2f} %"
)
with col2:
st.metric(
"Ocupación Prom.",
f"{filtered_df['occupancy'].mean():.2f} %"
)
with col3:
st.metric(
"Consumo Medio",
f"{filtered_df['fuel_eff'].mean():.2f} L/100km"
)
# Gráfico de evolución diaria
st.subheader("📈 Evolución Diaria")
fig = px.line(
filtered_df,
x="date",
y=["punctuality", "occupancy", "fuel_eff"],
labels={"value": "Valor", "variable": "Métrica"},
title="Indicadores diarios"
)
st.plotly_chart(fig, use_container_width=True)
# Gráfico de kilómetros recorridos
st.subheader("🚗 Kilometraje Recorrido")
fig2 = px.bar(
filtered_df,
x="date",
y="km",
color="km",
title="KM recorridos por día"
)
st.plotly_chart(fig2, use_container_width=True) |