Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import joblib | |
| import os | |
| import requests | |
| import io | |
| import traceback | |
| # Descargar el modelo si no existe | |
| 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()) | |