Inasistencia-FVL / src /streamlit_app.py
felipeocampo's picture
Update src/streamlit_app.py
499cffa verified
import streamlit as st
import pandas as pd
import joblib
import os
import requests
import io
import traceback
# Descargar el modelo si no existe
@st.cache_resource
def cargar_modelo():
path = "src/modelo_noshows.joblib"
if not os.path.exists(path):
st.info("Descargando modelo desde Hugging Face...")
url = "https://huggingface.co/spaces/felipeocampo/Inasistencia-FVL/resolve/main/src/modelo_noshows.joblib"
try:
response = requests.get(url)
response.raise_for_status()
with open(path, "wb") as f:
f.write(response.content)
st.success("Modelo descargado correctamente.")
except Exception as e:
st.error(f"No se pudo descargar el modelo: {e}")
return None
return joblib.load(path)
# Cargar el modelo
modelo = cargar_modelo()
if modelo is None:
st.stop()
# Interfaz de usuario
st.title("Predicci贸n desde archivo Excel")
uploaded_file = st.file_uploader("Sube un archivo Excel (.xlsx)", type="xlsx")
if uploaded_file:
try:
df = pd.read_excel(uploaded_file)
st.write("Datos cargados:", df)
# Predicci贸n
pred = modelo.predict(df)
df["predicci贸n"] = ["inasistencia" if p == 0 else "asistencia" for p in pred]
st.subheader("Resultados")
st.write(df)
# Preparar archivo de salida
output = io.BytesIO()
with pd.ExcelWriter(output, engine="openpyxl") as writer:
df.to_excel(writer, index=False)
output.seek(0)
st.download_button(
label="馃摜 Descargar resultados",
data=output,
file_name="predicciones.xlsx",
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
except Exception as e:
st.error("Ocurri贸 un error procesando el archivo:")
st.code(traceback.format_exc())