Download src/streamlit_app.py from divya55/Admission_VisaPredictor-classification_model: direct link, hf CLI and curl.
- Browser
- Download file 6.62 kB
-
https://huggingface.co/spaces/divya55/Admission_VisaPredictor-classification_model/resolve/main/src/streamlit_app.py
- Command line
-
hf download hf://spaces/divya55/Admission_VisaPredictor-classification_model/src/streamlit_app.py
-
curl -L -o streamlit_app.py https://huggingface.co/spaces/divya55/Admission_VisaPredictor-classification_model/resolve/main/src/streamlit_app.py
6.62 kB
| # streamlit_app.py | |
| import os | |
| import joblib | |
| import pandas as pd | |
| import streamlit as st | |
| # ----------------- Paths ----------------- | |
| BASE_PATH = "src" | |
| ADMISSION_CSV = os.path.join(BASE_PATH, "admission_data.csv") | |
| VISA_CSV = os.path.join(BASE_PATH, "visa_data.csv") | |
| ADMISSION_MODEL_FILE = os.path.join(BASE_PATH, "admission_model_rf.pkl") | |
| VISA_MODEL_FILE = os.path.join(BASE_PATH, "visa_model_tuned_gb.pkl") | |
| # ----------------- Helpers ----------------- | |
| def load_csv_safe(path): | |
| if os.path.exists(path): | |
| try: | |
| return pd.read_csv(path) | |
| except Exception as e: | |
| st.warning(f"Could not read {path}: {e}") | |
| return None | |
| return None | |
| def load_models_safe(): | |
| admission_model = visa_model = None | |
| if os.path.exists(ADMISSION_MODEL_FILE): | |
| try: | |
| admission_model = joblib.load(ADMISSION_MODEL_FILE) | |
| except Exception as e: | |
| st.warning(f"Failed to load admission model: {e}") | |
| if os.path.exists(VISA_MODEL_FILE): | |
| try: | |
| visa_model = joblib.load(VISA_MODEL_FILE) | |
| except Exception as e: | |
| st.warning(f"Failed to load visa model: {e}") | |
| return {"admission_model": admission_model, "visa_model": visa_model} | |
| def prepare_and_predict(model, input_df): | |
| """Runs prediction only (no probability)""" | |
| try: | |
| pred = model.predict(input_df) | |
| pred_label = pred[0] if hasattr(pred, "__len__") else pred | |
| except Exception as e: | |
| st.error(f"Model prediction failed: {e}") | |
| return None | |
| return pred_label | |
| # ----------------- Load data and models ----------------- | |
| models = load_models_safe() | |
| admission_df = load_csv_safe(ADMISSION_CSV) | |
| visa_df = load_csv_safe(VISA_CSV) | |
| # ----------------- Page config ----------------- | |
| st.set_page_config(page_title="Admission & Visa Predictor", page_icon="π", layout="centered") | |
| st.title("β¨ Admission & Visa Predictor β Plan Your Future") | |
| # ----------------- Admission Inputs ----------------- | |
| st.subheader("Admission β Step 1") | |
| gre_score = st.number_input("GRE Score", min_value=0, max_value=340, value=300) | |
| toefl_score = st.number_input("TOEFL Score", min_value=0, max_value=120, value=100) | |
| university_rating = st.selectbox("University Rating (1-5)", [1, 2, 3, 4, 5], index=2) | |
| sop = st.slider("SOP Strength (1.0 - 5.0)", 1.0, 5.0, 3.0, step=0.5) | |
| lor = st.slider("LOR Strength (1.0 - 5.0)", 1.0, 5.0, 3.0, step=0.5) | |
| cgpa = st.number_input("CGPA (0.0 - 10.0)", min_value=0.0, max_value=10.0, value=8.0, format="%.2f") | |
| research = st.selectbox("Research (0 = No, 1 = Yes)", [0, 1], index=0) | |
| admission_input_df = pd.DataFrame([{ | |
| "gre_score": gre_score, | |
| "toefl_score": toefl_score, | |
| "university_rating": university_rating, | |
| "sop": sop, | |
| "lor": lor, | |
| "cgpa": cgpa, | |
| "research": research | |
| }]) | |
| # --- Admission Button --- | |
| if st.button("Check Admission", key="admission_btn"): | |
| # Clear old results | |
| st.session_state.pop("admitted", None) | |
| st.session_state.pop("visa_ok", None) | |
| if models["admission_model"] is None: | |
| st.error("Admission model not found in `src/`.") | |
| else: | |
| admitted = prepare_and_predict(models["admission_model"], admission_input_df) | |
| if admitted is None: | |
| st.error("Could not predict admission result.") | |
| else: | |
| st.session_state["admitted"] = bool(admitted) | |
| if not admitted: | |
| st.error("Admission result: Not admitted. You cannot proceed to visa check.") | |
| else: | |
| st.success("Admission result: Admitted! Please scroll down to Visa check.") | |
| # ----------------- Visa Section ----------------- | |
| if st.session_state.get("admitted", False): | |
| st.subheader("Visa β Step 2") | |
| interview_location = st.selectbox( | |
| "Interview Location", | |
| visa_df["Interview Location"].dropna().unique().tolist() if visa_df is not None else ["Islamabad", "Karachi", "Other"] | |
| ) | |
| program = st.selectbox( | |
| "Program", | |
| visa_df["Program"].dropna().unique().tolist() if visa_df is not None else ["Masters", "PhD", "MBA", "Other"] | |
| ) | |
| degree_level = st.selectbox( | |
| "Degree Level", | |
| visa_df["Degree Level"].dropna().unique().tolist() if visa_df is not None else ["Bachelors", "Masters", "PhD"] | |
| ) | |
| university = st.selectbox( | |
| "University", | |
| visa_df["University"].dropna().unique().tolist() if visa_df is not None else ["Harvard", "MIT", "Other"] | |
| ) | |
| universities_applied = st.number_input("Number of Universities Applied", min_value=1, value=3) | |
| sponsor = st.selectbox( | |
| "Sponsor", | |
| visa_df["Sponsor"].dropna().unique().tolist() if visa_df is not None else ["Self", "Parents", "Scholarship", "Other"] | |
| ) | |
| scholarship = st.selectbox( | |
| "Scholarship", | |
| visa_df["Scholarship"].dropna().unique().tolist() if visa_df is not None else ["Yes", "No"] | |
| ) | |
| relatives_us = st.selectbox( | |
| "Relatives in US", | |
| visa_df["Relatives in US"].dropna().unique().tolist() if visa_df is not None else ["Yes", "No"] | |
| ) | |
| visa_attempts = st.selectbox( | |
| "Visa Attempts", | |
| visa_df["Visa Attempts"].dropna().unique().tolist() if visa_df is not None else ["First", "Second", "More"] | |
| ) | |
| visa_input_df = pd.DataFrame([{ | |
| "Interview Location": interview_location, | |
| "Program": program, | |
| "Degree Level": degree_level, | |
| "University": university, | |
| "Universities Applied": universities_applied, | |
| "Sponsor": sponsor, | |
| "Scholarship": scholarship, | |
| "Relatives in US": relatives_us, | |
| "Visa Attempts": visa_attempts | |
| }]) | |
| # --- Visa Button --- | |
| if st.button("Check Visa Approval", key="visa_btn"): | |
| # Clear old Visa result before predicting again | |
| st.session_state.pop("visa_ok", None) | |
| if models["visa_model"] is None: | |
| st.error("Visa model not found in `src/`.") | |
| else: | |
| visa_ok = prepare_and_predict(models["visa_model"], visa_input_df) | |
| if visa_ok is None: | |
| st.error("Could not predict visa approval result.") | |
| else: | |
| st.session_state["visa_ok"] = bool(visa_ok) | |
| # --- Display final result --- | |
| if "visa_ok" in st.session_state: | |
| visa_ok = st.session_state["visa_ok"] | |
| if visa_ok: | |
| st.balloons() | |
| st.success("π Final Result: Admission + Visa likely approved.") | |
| else: | |
| st.warning("β οΈ Final Result: Admission accepted, but visa approval looks unlikely.") | |