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())