import pandas as pd
import streamlit as st
import plotly.express as px
FILE = "Consolidado_mensual_actividades_2023_2025.xlsx"
SHEET = "Consolidado_Mensual"
@st.cache_data
def load_data():
df = pd.read_excel(FILE, sheet_name=SHEET)
# Periodo viene como YYYY-MM; lo convertimos a fecha para ordenar y graficar bien
df["Periodo_dt"] = pd.to_datetime(df["Periodo"] + "-01")
df = df.sort_values("Periodo_dt")
return df
st.set_page_config(page_title="Neuroinmune | Actividades", layout="wide")
st.title("📊 Neuroinmune — Dashboard de Actividades (Mensual)")
df = load_data()
Filtros
years = sorted(df["Año"].unique())
sel_years = st.multiselect("Filtrar por año", years, default=years)
df_f = df[df["Año"].isin(sel_years)].copy()
KPIs
c1, c2, c3, c4 = st.columns(4)
c1.metric("Consultas", int(df_f["Consultas"].sum()))
c2.metric("Pruebas", int(df_f["Pruebas"].sum()))
c3.metric("Terapias", int(df_f["Terapias"].sum()))
c4.metric("Total actividades", int(df_f["Total_Actividades"].sum()))
Serie de tiempo
st.subheader("Evolución mensual")
df_long = df_f.melt(
id_vars=["Periodo_dt"],
value_vars=["Consultas","Pruebas","Terapias"],
var_name="Tipo",
value_name="Cantidad"
)
fig = px.line(df_long, x="Periodo_dt", y="Cantidad", color="Tipo", markers=True)
st.plotly_chart(fig, use_container_width=True)
Barras apiladas
st.subheader("Composición mensual (Consultas vs Pruebas vs Terapias)")
fig2 = px.bar(df_long, x="Periodo_dt", y="Cantidad", color="Tipo", barmode="stack")
st.plotly_chart(fig2, use_container_width=True)
Tabla
st.subheader("Tabla mensual")
st.dataframe(df_f.drop(columns=["Periodo_dt"]), use_container_width=True)
st.caption("Tip: agrega filas al Excel y reinicia/recarga la app para ver cambios.")
import pandas as pd
import streamlit as st
import plotly.express as px
FILE = "Consolidado_mensual_actividades_2023_2025.xlsx"
SHEET = "Consolidado_Mensual"
@st.cache_data
def load_data():
df = pd.read_excel(FILE, sheet_name=SHEET)
# Periodo viene como YYYY-MM; lo convertimos a fecha para ordenar y graficar bien
df["Periodo_dt"] = pd.to_datetime(df["Periodo"] + "-01")
df = df.sort_values("Periodo_dt")
return df
st.set_page_config(page_title="Neuroinmune | Actividades", layout="wide")
st.title("📊 Neuroinmune — Dashboard de Actividades (Mensual)")
df = load_data()
Filtros
years = sorted(df["Año"].unique())
sel_years = st.multiselect("Filtrar por año", years, default=years)
df_f = df[df["Año"].isin(sel_years)].copy()
KPIs
c1, c2, c3, c4 = st.columns(4)
c1.metric("Consultas", int(df_f["Consultas"].sum()))
c2.metric("Pruebas", int(df_f["Pruebas"].sum()))
c3.metric("Terapias", int(df_f["Terapias"].sum()))
c4.metric("Total actividades", int(df_f["Total_Actividades"].sum()))
Serie de tiempo
st.subheader("Evolución mensual")
df_long = df_f.melt(
id_vars=["Periodo_dt"],
value_vars=["Consultas","Pruebas","Terapias"],
var_name="Tipo",
value_name="Cantidad"
)
fig = px.line(df_long, x="Periodo_dt", y="Cantidad", color="Tipo", markers=True)
st.plotly_chart(fig, use_container_width=True)
Barras apiladas
st.subheader("Composición mensual (Consultas vs Pruebas vs Terapias)")
fig2 = px.bar(df_long, x="Periodo_dt", y="Cantidad", color="Tipo", barmode="stack")
st.plotly_chart(fig2, use_container_width=True)
Tabla
st.subheader("Tabla mensual")
st.dataframe(df_f.drop(columns=["Periodo_dt"]), use_container_width=True)
st.caption("Tip: agrega filas al Excel y reinicia/recarga la app para ver cambios.")