Anmol58's picture
Update app.py
e8502e1 verified
from flask import Flask, request, render_template
import pandas as pd
import joblib
import numpy as np
app = Flask(__name__)
# Load model, encoders, and optional scaler
model = joblib.load('placement_model.pkl')
le_placement = joblib.load('le_placement.pkl')
le_internship = joblib.load('le_internship.pkl')
# scaler = joblib.load('scaler.pkl') # Uncomment if you used scaling
# Feature columns in exact order used during training
features = ['IQ', 'Prev_Sem_Result', 'CGPA', 'Academic_Performance',
'Extra_Curricular_Score', 'Communication_Skills', 'Projects_Completed',
'Internship_Encoded']
@app.route('/', methods=['GET', 'POST'])
def index():
prediction = None
if request.method == 'POST':
try:
# Collect inputs and convert to proper type
IQ = float(request.form['IQ'])
Prev_Sem_Result = float(request.form['Prev_Sem_Result'])
CGPA = float(request.form['CGPA'])
Academic_Performance = float(request.form['Academic_Performance'])
Extra_Curricular_Score = float(request.form['Extra_Curricular_Score'])
Communication_Skills = float(request.form['Communication_Skills'])
Projects_Completed = int(request.form['Projects_Completed'])
Internship_Experience = request.form['Internship_Experience'].strip()
# Handle unknown internship category
if Internship_Experience not in le_internship.classes_:
# Assign most frequent category from training
Internship_Experience = le_internship.classes_[0]
internship_encoded = le_internship.transform([Internship_Experience])[0]
# Prepare DataFrame in the same feature order as training
X = pd.DataFrame([[IQ, Prev_Sem_Result, CGPA, Academic_Performance,
Extra_Curricular_Score, Communication_Skills,
Projects_Completed, internship_encoded]],
columns=features)
# Optional: scale features if model expects it
# X = pd.DataFrame(scaler.transform(X), columns=features)
# Make prediction
pred_encoded = model.predict(X)[0]
pred_label = le_placement.inverse_transform([pred_encoded])[0]
prediction = f'Predicted Placement: {pred_label}'
except ValueError:
prediction = "Invalid input! Please enter numeric values."
except Exception as e:
# Catch any unexpected error
prediction = f"Error in prediction: {str(e)}"
return render_template('index.html', prediction=prediction)
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/canva')
def canva():
return render_template('canva.html')
if __name__ == '__main__':
app.run(debug=True)