Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,55 +1,67 @@
|
|
| 1 |
from flask import Flask, request, render_template
|
| 2 |
import pandas as pd
|
| 3 |
import joblib
|
|
|
|
| 4 |
|
| 5 |
-
# Initialize Flask app
|
| 6 |
app = Flask(__name__)
|
| 7 |
|
| 8 |
-
# Load model and
|
| 9 |
model = joblib.load('placement_model.pkl')
|
| 10 |
le_placement = joblib.load('le_placement.pkl')
|
| 11 |
le_internship = joblib.load('le_internship.pkl')
|
|
|
|
| 12 |
|
| 13 |
-
# Feature columns
|
| 14 |
features = ['IQ', 'Prev_Sem_Result', 'CGPA', 'Academic_Performance',
|
| 15 |
'Extra_Curricular_Score', 'Communication_Skills', 'Projects_Completed',
|
| 16 |
'Internship_Encoded']
|
| 17 |
|
| 18 |
@app.route('/', methods=['GET', 'POST'])
|
| 19 |
def index():
|
|
|
|
| 20 |
if request.method == 'POST':
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
@app.route('/about')
|
| 54 |
def about():
|
| 55 |
return render_template('about.html')
|
|
|
|
| 1 |
from flask import Flask, request, render_template
|
| 2 |
import pandas as pd
|
| 3 |
import joblib
|
| 4 |
+
import numpy as np
|
| 5 |
|
|
|
|
| 6 |
app = Flask(__name__)
|
| 7 |
|
| 8 |
+
# Load model, encoders, and optional scaler
|
| 9 |
model = joblib.load('placement_model.pkl')
|
| 10 |
le_placement = joblib.load('le_placement.pkl')
|
| 11 |
le_internship = joblib.load('le_internship.pkl')
|
| 12 |
+
# scaler = joblib.load('scaler.pkl') # Uncomment if you used scaling
|
| 13 |
|
| 14 |
+
# Feature columns in exact order used during training
|
| 15 |
features = ['IQ', 'Prev_Sem_Result', 'CGPA', 'Academic_Performance',
|
| 16 |
'Extra_Curricular_Score', 'Communication_Skills', 'Projects_Completed',
|
| 17 |
'Internship_Encoded']
|
| 18 |
|
| 19 |
@app.route('/', methods=['GET', 'POST'])
|
| 20 |
def index():
|
| 21 |
+
prediction = None
|
| 22 |
if request.method == 'POST':
|
| 23 |
+
try:
|
| 24 |
+
# Collect inputs and convert to proper type
|
| 25 |
+
IQ = float(request.form['IQ'])
|
| 26 |
+
Prev_Sem_Result = float(request.form['Prev_Sem_Result'])
|
| 27 |
+
CGPA = float(request.form['CGPA'])
|
| 28 |
+
Academic_Performance = float(request.form['Academic_Performance'])
|
| 29 |
+
Extra_Curricular_Score = float(request.form['Extra_Curricular_Score'])
|
| 30 |
+
Communication_Skills = float(request.form['Communication_Skills'])
|
| 31 |
+
Projects_Completed = int(request.form['Projects_Completed'])
|
| 32 |
+
Internship_Experience = request.form['Internship_Experience'].strip()
|
| 33 |
+
|
| 34 |
+
# Handle unknown internship category
|
| 35 |
+
if Internship_Experience not in le_internship.classes_:
|
| 36 |
+
# Assign most frequent category from training
|
| 37 |
+
Internship_Experience = le_internship.classes_[0]
|
| 38 |
+
|
| 39 |
+
internship_encoded = le_internship.transform([Internship_Experience])[0]
|
| 40 |
+
|
| 41 |
+
# Prepare DataFrame in the same feature order as training
|
| 42 |
+
X = pd.DataFrame([[IQ, Prev_Sem_Result, CGPA, Academic_Performance,
|
| 43 |
+
Extra_Curricular_Score, Communication_Skills,
|
| 44 |
+
Projects_Completed, internship_encoded]],
|
| 45 |
+
columns=features)
|
| 46 |
+
|
| 47 |
+
# Optional: scale features if model expects it
|
| 48 |
+
# X = pd.DataFrame(scaler.transform(X), columns=features)
|
| 49 |
+
|
| 50 |
+
# Make prediction
|
| 51 |
+
pred_encoded = model.predict(X)[0]
|
| 52 |
+
pred_label = le_placement.inverse_transform([pred_encoded])[0]
|
| 53 |
+
|
| 54 |
+
prediction = f'Predicted Placement: {pred_label}'
|
| 55 |
+
|
| 56 |
+
except ValueError:
|
| 57 |
+
prediction = "Invalid input! Please enter numeric values."
|
| 58 |
+
|
| 59 |
+
except Exception as e:
|
| 60 |
+
# Catch any unexpected error
|
| 61 |
+
prediction = f"Error in prediction: {str(e)}"
|
| 62 |
+
|
| 63 |
+
return render_template('index.html', prediction=prediction)
|
| 64 |
+
|
| 65 |
@app.route('/about')
|
| 66 |
def about():
|
| 67 |
return render_template('about.html')
|