|
|
|
|
|
|
|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import plotly.express as px |
|
|
from data_loader import simulate_transport_data |
|
|
|
|
|
|
|
|
st.set_page_config(page_title="Dashboard Transporte", layout="wide") |
|
|
|
|
|
|
|
|
st.title("📊 Monitoreo de Flota de Transporte Urbano") |
|
|
|
|
|
|
|
|
df = simulate_transport_data() |
|
|
|
|
|
|
|
|
bus = st.selectbox( |
|
|
"Selecciona un autobús", |
|
|
options=df['bus_id'].unique() |
|
|
) |
|
|
filtered_df = df[df['bus_id'] == bus] |
|
|
|
|
|
|
|
|
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" |
|
|
) |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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) |