import streamlit as st import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import seaborn as sns # ----------------------- # Load Dataset # ----------------------- data = pd.read_csv("students.csv") # Encode categorical data le_interest = LabelEncoder() le_course = LabelEncoder() data["interest"] = le_interest.fit_transform(data["interest"]) data["recommended_course"] = le_course.fit_transform(data["recommended_course"]) # Features and target X = data[["math_grade", "programming_grade", "gpa", "interest"]] y = data["recommended_course"] # Train model model = DecisionTreeClassifier() model.fit(X, y) # ----------------------- # Streamlit UI # ----------------------- st.set_page_config(page_title="Course Recommendation System", layout="wide") st.title("π University Course Recommendation System") st.markdown(""" This interactive system recommends the most suitable university courses for students based on their grades and interests. """) # Sidebar for input st.sidebar.header("Input Student Data") math = st.sidebar.slider("Math Grade", 0, 100, 70) programming = st.sidebar.slider("Programming Grade", 0, 100, 70) gpa = st.sidebar.slider("GPA", 0.0, 4.0, 3.0, 0.1) interest = st.sidebar.selectbox("Interest", le_interest.classes_) # Recommendation if st.button("Recommend Course"): interest_encoded = le_interest.transform([interest])[0] pred = model.predict([[math, programming, gpa, interest_encoded]]) course_name = le_course.inverse_transform(pred) st.success(f"β
Recommended Course: {course_name[0]}") # Display student data in table st.subheader("π Your Input Data") input_df = pd.DataFrame({ "Math Grade": [math], "Programming Grade": [programming], "GPA": [gpa], "Interest": [interest] }) st.table(input_df) # Graph: Compare with dataset st.subheader("π Comparison with Dataset") fig, ax = plt.subplots(figsize=(8,4)) sns.scatterplot(data=data, x="math_grade", y="programming_grade", hue="recommended_course", palette="tab10", s=100, ax=ax) ax.scatter(math, programming, color='red', s=200, label="You") ax.set_title("Math vs Programming Grades") ax.legend() st.pyplot(fig) # Show dataset with st.expander("View Dataset"): st.dataframe(data)
verified