Upload 11 files
Browse files- Campus_Selection.csv +216 -0
- app.py +350 -0
- placement_label_encoder.joblib +3 -0
- placement_model.joblib +3 -0
- placement_model_features.joblib +3 -0
- placement_model_pipeline.joblib +3 -0
- placement_preprocessor.joblib +3 -0
- plots/correlation_heatmap.png +0 -0
- plots/feature_importance.png +0 -0
- plots/placement_distribution.png +0 -0
- requirements.txt.txt +0 -0
Campus_Selection.csv
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
sl_no,gender,ssc_p,ssc_b,hsc_p,hsc_b,hsc_s,degree_p,degree_t,workex,etest_p,specialisation,mba_p,status
|
| 2 |
+
1,M,67.0,Others,91.0,Others,Commerce,58.0,Sci&Tech,No,55.0,Mkt&HR,58.8,Placed
|
| 3 |
+
2,M,79.33,Central,78.33,Others,Science,77.48,Sci&Tech,Yes,86.5,Mkt&Fin,66.28,Placed
|
| 4 |
+
3,M,65.0,Central,68.0,Central,Arts,64.0,Comm&Mgmt,No,75.0,Mkt&Fin,57.8,Placed
|
| 5 |
+
4,M,56.0,Central,52.0,Central,Science,52.0,Sci&Tech,No,66.0,Mkt&HR,59.43,Not Placed
|
| 6 |
+
5,M,85.8,Central,73.6,Central,Commerce,73.3,Comm&Mgmt,No,96.8,Mkt&Fin,55.5,Placed
|
| 7 |
+
6,M,55.0,Others,49.8,Others,Science,67.25,Sci&Tech,Yes,55.0,Mkt&Fin,51.58,Not Placed
|
| 8 |
+
7,F,46.0,Others,49.2,Others,Commerce,79.0,Comm&Mgmt,No,74.28,Mkt&Fin,53.29,Not Placed
|
| 9 |
+
8,M,82.0,Central,64.0,Central,Science,66.0,Sci&Tech,Yes,67.0,Mkt&Fin,62.14,Placed
|
| 10 |
+
9,M,73.0,Central,79.0,Central,Commerce,72.0,Comm&Mgmt,No,91.34,Mkt&Fin,61.29,Placed
|
| 11 |
+
10,M,58.0,Central,70.0,Central,Commerce,61.0,Comm&Mgmt,No,54.0,Mkt&Fin,52.21,Not Placed
|
| 12 |
+
11,M,58.0,Central,61.0,Central,Commerce,60.0,Comm&Mgmt,Yes,62.0,Mkt&HR,60.85,Placed
|
| 13 |
+
12,M,69.6,Central,68.4,Central,Commerce,78.3,Comm&Mgmt,Yes,60.0,Mkt&Fin,63.7,Placed
|
| 14 |
+
13,F,47.0,Central,55.0,Others,Science,65.0,Comm&Mgmt,No,62.0,Mkt&HR,65.04,Not Placed
|
| 15 |
+
14,F,77.0,Central,87.0,Central,Commerce,59.0,Comm&Mgmt,No,68.0,Mkt&Fin,68.63,Placed
|
| 16 |
+
15,M,62.0,Central,47.0,Central,Commerce,50.0,Comm&Mgmt,No,76.0,Mkt&HR,54.96,Not Placed
|
| 17 |
+
16,F,65.0,Central,75.0,Central,Commerce,69.0,Comm&Mgmt,Yes,72.0,Mkt&Fin,64.66,Placed
|
| 18 |
+
17,M,63.0,Central,66.2,Central,Commerce,65.6,Comm&Mgmt,Yes,60.0,Mkt&Fin,62.54,Placed
|
| 19 |
+
18,F,55.0,Central,67.0,Central,Commerce,64.0,Comm&Mgmt,No,60.0,Mkt&Fin,67.28,Not Placed
|
| 20 |
+
19,F,63.0,Central,66.0,Central,Commerce,64.0,Comm&Mgmt,No,68.0,Mkt&HR,64.08,Not Placed
|
| 21 |
+
20,M,60.0,Others,67.0,Others,Arts,70.0,Comm&Mgmt,Yes,50.48,Mkt&Fin,77.89,Placed
|
| 22 |
+
21,M,62.0,Others,65.0,Others,Commerce,66.0,Comm&Mgmt,No,50.0,Mkt&HR,56.7,Placed
|
| 23 |
+
22,F,79.0,Others,76.0,Others,Commerce,85.0,Comm&Mgmt,No,95.0,Mkt&Fin,69.06,Placed
|
| 24 |
+
23,F,69.8,Others,60.8,Others,Science,72.23,Sci&Tech,No,55.53,Mkt&HR,68.81,Placed
|
| 25 |
+
24,F,77.4,Others,60.0,Others,Science,64.74,Sci&Tech,Yes,92.0,Mkt&Fin,63.62,Placed
|
| 26 |
+
25,M,76.5,Others,97.7,Others,Science,78.86,Sci&Tech,No,97.4,Mkt&Fin,74.01,Placed
|
| 27 |
+
26,F,52.58,Others,54.6,Central,Commerce,50.2,Comm&Mgmt,Yes,76.0,Mkt&Fin,65.33,Not Placed
|
| 28 |
+
27,M,71.0,Others,79.0,Others,Commerce,66.0,Comm&Mgmt,Yes,94.0,Mkt&Fin,57.55,Placed
|
| 29 |
+
28,M,63.0,Others,67.0,Others,Commerce,66.0,Comm&Mgmt,No,68.0,Mkt&HR,57.69,Placed
|
| 30 |
+
29,M,76.76,Others,76.5,Others,Commerce,67.5,Comm&Mgmt,Yes,73.35,Mkt&Fin,64.15,Placed
|
| 31 |
+
30,M,62.0,Central,67.0,Central,Commerce,58.0,Comm&Mgmt,No,77.0,Mkt&Fin,51.29,Not Placed
|
| 32 |
+
31,F,64.0,Central,73.5,Central,Commerce,73.0,Comm&Mgmt,No,52.0,Mkt&HR,56.7,Placed
|
| 33 |
+
32,F,67.0,Central,53.0,Central,Science,65.0,Sci&Tech,No,64.0,Mkt&HR,58.32,Not Placed
|
| 34 |
+
33,F,61.0,Central,81.0,Central,Commerce,66.4,Comm&Mgmt,No,50.89,Mkt&HR,62.21,Placed
|
| 35 |
+
34,F,87.0,Others,65.0,Others,Science,81.0,Comm&Mgmt,Yes,88.0,Mkt&Fin,72.78,Placed
|
| 36 |
+
35,M,62.0,Others,51.0,Others,Science,52.0,Others,No,68.44,Mkt&HR,62.77,Not Placed
|
| 37 |
+
36,F,69.0,Central,78.0,Central,Commerce,72.0,Comm&Mgmt,No,71.0,Mkt&HR,62.74,Placed
|
| 38 |
+
37,M,51.0,Central,44.0,Central,Commerce,57.0,Comm&Mgmt,No,64.0,Mkt&Fin,51.45,Not Placed
|
| 39 |
+
38,F,79.0,Central,76.0,Central,Science,65.6,Sci&Tech,No,58.0,Mkt&HR,55.47,Placed
|
| 40 |
+
39,F,73.0,Others,58.0,Others,Science,66.0,Comm&Mgmt,No,53.7,Mkt&HR,56.86,Placed
|
| 41 |
+
40,M,81.0,Others,68.0,Others,Science,64.0,Sci&Tech,No,93.0,Mkt&Fin,62.56,Placed
|
| 42 |
+
41,F,78.0,Central,77.0,Others,Commerce,80.0,Comm&Mgmt,No,60.0,Mkt&Fin,66.72,Placed
|
| 43 |
+
42,F,74.0,Others,63.16,Others,Commerce,65.0,Comm&Mgmt,Yes,65.0,Mkt&HR,69.76,Not Placed
|
| 44 |
+
43,M,49.0,Others,39.0,Central,Science,65.0,Others,No,63.0,Mkt&Fin,51.21,Not Placed
|
| 45 |
+
44,M,87.0,Others,87.0,Others,Commerce,68.0,Comm&Mgmt,No,95.0,Mkt&HR,62.9,Placed
|
| 46 |
+
45,F,77.0,Others,73.0,Others,Commerce,81.0,Comm&Mgmt,Yes,89.0,Mkt&Fin,69.7,Placed
|
| 47 |
+
46,F,76.0,Central,64.0,Central,Science,72.0,Sci&Tech,No,58.0,Mkt&HR,66.53,Not Placed
|
| 48 |
+
47,F,70.89,Others,71.98,Others,Science,65.6,Comm&Mgmt,No,68.0,Mkt&HR,71.63,Not Placed
|
| 49 |
+
48,M,63.0,Central,60.0,Central,Commerce,57.0,Comm&Mgmt,Yes,78.0,Mkt&Fin,54.55,Placed
|
| 50 |
+
49,M,63.0,Others,62.0,Others,Commerce,68.0,Comm&Mgmt,No,64.0,Mkt&Fin,62.46,Placed
|
| 51 |
+
50,F,50.0,Others,37.0,Others,Arts,52.0,Others,No,65.0,Mkt&HR,56.11,Not Placed
|
| 52 |
+
51,F,75.2,Central,73.2,Central,Science,68.4,Comm&Mgmt,No,65.0,Mkt&HR,62.98,Placed
|
| 53 |
+
52,M,54.4,Central,61.12,Central,Commerce,56.2,Comm&Mgmt,No,67.0,Mkt&HR,62.65,Not Placed
|
| 54 |
+
53,F,40.89,Others,45.83,Others,Commerce,53.0,Comm&Mgmt,No,71.2,Mkt&HR,65.49,Not Placed
|
| 55 |
+
54,M,80.0,Others,70.0,Others,Science,72.0,Sci&Tech,No,87.0,Mkt&HR,71.04,Placed
|
| 56 |
+
55,F,74.0,Central,60.0,Others,Science,69.0,Comm&Mgmt,No,78.0,Mkt&HR,65.56,Placed
|
| 57 |
+
56,M,60.4,Central,66.6,Others,Science,65.0,Comm&Mgmt,No,71.0,Mkt&HR,52.71,Placed
|
| 58 |
+
57,M,63.0,Others,71.4,Others,Commerce,61.4,Comm&Mgmt,No,68.0,Mkt&Fin,66.88,Placed
|
| 59 |
+
58,M,68.0,Central,76.0,Central,Commerce,74.0,Comm&Mgmt,No,80.0,Mkt&Fin,63.59,Placed
|
| 60 |
+
59,M,74.0,Central,62.0,Others,Science,68.0,Comm&Mgmt,No,74.0,Mkt&Fin,57.99,Placed
|
| 61 |
+
60,M,52.6,Central,65.58,Others,Science,72.11,Sci&Tech,No,57.6,Mkt&Fin,56.66,Placed
|
| 62 |
+
61,M,74.0,Central,70.0,Central,Science,72.0,Comm&Mgmt,Yes,60.0,Mkt&Fin,57.24,Placed
|
| 63 |
+
62,M,84.2,Central,73.4,Central,Commerce,66.89,Comm&Mgmt,No,61.6,Mkt&Fin,62.48,Placed
|
| 64 |
+
63,F,86.5,Others,64.2,Others,Science,67.4,Sci&Tech,No,59.0,Mkt&Fin,59.69,Placed
|
| 65 |
+
64,M,61.0,Others,70.0,Others,Commerce,64.0,Comm&Mgmt,No,68.5,Mkt&HR,59.5,Not Placed
|
| 66 |
+
65,M,80.0,Others,73.0,Others,Commerce,75.0,Comm&Mgmt,No,61.0,Mkt&Fin,58.78,Placed
|
| 67 |
+
66,M,54.0,Others,47.0,Others,Science,57.0,Comm&Mgmt,No,89.69,Mkt&HR,57.1,Not Placed
|
| 68 |
+
67,M,83.0,Others,74.0,Others,Science,66.0,Comm&Mgmt,No,68.92,Mkt&HR,58.46,Placed
|
| 69 |
+
68,M,80.92,Others,78.5,Others,Commerce,67.0,Comm&Mgmt,No,68.71,Mkt&Fin,60.99,Placed
|
| 70 |
+
69,F,69.7,Central,47.0,Central,Commerce,72.7,Sci&Tech,No,79.0,Mkt&HR,59.24,Not Placed
|
| 71 |
+
70,M,73.0,Central,73.0,Central,Science,66.0,Sci&Tech,Yes,70.0,Mkt&Fin,68.07,Placed
|
| 72 |
+
71,M,82.0,Others,61.0,Others,Science,62.0,Sci&Tech,No,89.0,Mkt&Fin,65.45,Placed
|
| 73 |
+
72,M,75.0,Others,70.29,Others,Commerce,71.0,Comm&Mgmt,No,95.0,Mkt&Fin,66.94,Placed
|
| 74 |
+
73,M,84.86,Others,67.0,Others,Science,78.0,Comm&Mgmt,No,95.5,Mkt&Fin,68.53,Placed
|
| 75 |
+
74,M,64.6,Central,83.83,Others,Commerce,71.72,Comm&Mgmt,No,86.0,Mkt&Fin,59.75,Placed
|
| 76 |
+
75,M,56.6,Central,64.8,Central,Commerce,70.2,Comm&Mgmt,No,84.27,Mkt&Fin,67.2,Placed
|
| 77 |
+
76,F,59.0,Central,62.0,Others,Commerce,77.5,Comm&Mgmt,No,74.0,Mkt&HR,67.0,Not Placed
|
| 78 |
+
77,F,66.5,Others,70.4,Central,Arts,71.93,Comm&Mgmt,No,61.0,Mkt&Fin,64.27,Placed
|
| 79 |
+
78,M,64.0,Others,80.0,Others,Science,65.0,Sci&Tech,Yes,69.0,Mkt&Fin,57.65,Placed
|
| 80 |
+
79,M,84.0,Others,90.9,Others,Science,64.5,Sci&Tech,No,86.04,Mkt&Fin,59.42,Placed
|
| 81 |
+
80,F,69.0,Central,62.0,Central,Science,66.0,Sci&Tech,No,75.0,Mkt&HR,67.99,Not Placed
|
| 82 |
+
81,F,69.0,Others,62.0,Others,Commerce,69.0,Comm&Mgmt,Yes,67.0,Mkt&HR,62.35,Placed
|
| 83 |
+
82,M,81.7,Others,63.0,Others,Science,67.0,Comm&Mgmt,Yes,86.0,Mkt&Fin,70.2,Placed
|
| 84 |
+
83,M,63.0,Central,67.0,Central,Commerce,74.0,Comm&Mgmt,No,82.0,Mkt&Fin,60.44,Not Placed
|
| 85 |
+
84,M,84.0,Others,79.0,Others,Science,68.0,Sci&Tech,Yes,84.0,Mkt&Fin,66.69,Placed
|
| 86 |
+
85,M,70.0,Central,63.0,Others,Science,70.0,Sci&Tech,Yes,55.0,Mkt&Fin,62.0,Placed
|
| 87 |
+
86,F,83.84,Others,89.83,Others,Commerce,77.2,Comm&Mgmt,Yes,78.74,Mkt&Fin,76.18,Placed
|
| 88 |
+
87,M,62.0,Others,63.0,Others,Commerce,64.0,Comm&Mgmt,No,67.0,Mkt&Fin,57.03,Placed
|
| 89 |
+
88,M,59.6,Central,51.0,Central,Science,60.0,Others,No,75.0,Mkt&HR,59.08,Not Placed
|
| 90 |
+
89,F,66.0,Central,62.0,Central,Commerce,73.0,Comm&Mgmt,No,58.0,Mkt&HR,64.36,Placed
|
| 91 |
+
90,F,84.0,Others,75.0,Others,Science,69.0,Sci&Tech,Yes,62.0,Mkt&HR,62.36,Placed
|
| 92 |
+
91,F,85.0,Others,90.0,Others,Commerce,82.0,Comm&Mgmt,No,92.0,Mkt&Fin,68.03,Placed
|
| 93 |
+
92,M,52.0,Central,57.0,Central,Commerce,50.8,Comm&Mgmt,No,67.0,Mkt&HR,62.79,Not Placed
|
| 94 |
+
93,F,60.23,Central,69.0,Central,Science,66.0,Comm&Mgmt,No,72.0,Mkt&Fin,59.47,Placed
|
| 95 |
+
94,M,52.0,Central,62.0,Central,Commerce,54.0,Comm&Mgmt,No,72.0,Mkt&HR,55.41,Not Placed
|
| 96 |
+
95,M,58.0,Central,62.0,Central,Commerce,64.0,Comm&Mgmt,No,53.88,Mkt&Fin,54.97,Placed
|
| 97 |
+
96,M,73.0,Central,78.0,Others,Commerce,65.0,Comm&Mgmt,Yes,95.46,Mkt&Fin,62.16,Placed
|
| 98 |
+
97,F,76.0,Central,70.0,Central,Science,76.0,Comm&Mgmt,Yes,66.0,Mkt&Fin,64.44,Placed
|
| 99 |
+
98,F,70.5,Central,62.5,Others,Commerce,61.0,Comm&Mgmt,No,93.91,Mkt&Fin,69.03,Not Placed
|
| 100 |
+
99,F,69.0,Central,73.0,Central,Commerce,65.0,Comm&Mgmt,No,70.0,Mkt&Fin,57.31,Placed
|
| 101 |
+
100,M,54.0,Central,82.0,Others,Commerce,63.0,Sci&Tech,No,50.0,Mkt&Fin,59.47,Not Placed
|
| 102 |
+
101,F,45.0,Others,57.0,Others,Commerce,58.0,Comm&Mgmt,Yes,56.39,Mkt&HR,64.95,Not Placed
|
| 103 |
+
102,M,63.0,Central,72.0,Central,Commerce,68.0,Comm&Mgmt,No,78.0,Mkt&HR,60.44,Placed
|
| 104 |
+
103,F,77.0,Others,61.0,Others,Commerce,68.0,Comm&Mgmt,Yes,57.5,Mkt&Fin,61.31,Placed
|
| 105 |
+
104,M,73.0,Central,78.0,Central,Science,73.0,Sci&Tech,Yes,85.0,Mkt&HR,65.83,Placed
|
| 106 |
+
105,M,69.0,Central,63.0,Others,Science,65.0,Comm&Mgmt,Yes,55.0,Mkt&HR,58.23,Placed
|
| 107 |
+
106,M,59.0,Central,64.0,Others,Science,58.0,Sci&Tech,No,85.0,Mkt&HR,55.3,Not Placed
|
| 108 |
+
107,M,61.08,Others,50.0,Others,Science,54.0,Sci&Tech,No,71.0,Mkt&Fin,65.69,Not Placed
|
| 109 |
+
108,M,82.0,Others,90.0,Others,Commerce,83.0,Comm&Mgmt,No,80.0,Mkt&HR,73.52,Placed
|
| 110 |
+
109,M,61.0,Central,82.0,Central,Commerce,69.0,Comm&Mgmt,No,84.0,Mkt&Fin,58.31,Placed
|
| 111 |
+
110,M,52.0,Central,63.0,Others,Science,65.0,Sci&Tech,Yes,86.0,Mkt&HR,56.09,Not Placed
|
| 112 |
+
111,F,69.5,Central,70.0,Central,Science,72.0,Sci&Tech,No,57.2,Mkt&HR,54.8,Placed
|
| 113 |
+
112,M,51.0,Others,54.0,Others,Science,61.0,Sci&Tech,No,60.0,Mkt&HR,60.64,Not Placed
|
| 114 |
+
113,M,58.0,Others,61.0,Others,Commerce,61.0,Comm&Mgmt,No,58.0,Mkt&HR,53.94,Placed
|
| 115 |
+
114,F,73.96,Others,79.0,Others,Commerce,67.0,Comm&Mgmt,No,72.15,Mkt&Fin,63.08,Placed
|
| 116 |
+
115,M,65.0,Central,68.0,Others,Science,69.0,Comm&Mgmt,No,53.7,Mkt&HR,55.01,Placed
|
| 117 |
+
116,F,73.0,Others,63.0,Others,Science,66.0,Comm&Mgmt,No,89.0,Mkt&Fin,60.5,Placed
|
| 118 |
+
117,M,68.2,Central,72.8,Central,Commerce,66.6,Comm&Mgmt,Yes,96.0,Mkt&Fin,70.85,Placed
|
| 119 |
+
118,M,77.0,Others,75.0,Others,Science,73.0,Sci&Tech,No,80.0,Mkt&Fin,67.05,Placed
|
| 120 |
+
119,M,76.0,Central,80.0,Central,Science,78.0,Sci&Tech,Yes,97.0,Mkt&HR,70.48,Placed
|
| 121 |
+
120,M,60.8,Central,68.4,Central,Commerce,64.6,Comm&Mgmt,Yes,82.66,Mkt&Fin,64.34,Placed
|
| 122 |
+
121,M,58.0,Others,40.0,Others,Science,59.0,Comm&Mgmt,No,73.0,Mkt&HR,58.81,Not Placed
|
| 123 |
+
122,F,64.0,Central,67.0,Others,Science,69.6,Sci&Tech,Yes,55.67,Mkt&HR,71.49,Placed
|
| 124 |
+
123,F,66.5,Central,66.8,Central,Arts,69.3,Comm&Mgmt,Yes,80.4,Mkt&Fin,71.0,Placed
|
| 125 |
+
124,M,74.0,Others,59.0,Others,Commerce,73.0,Comm&Mgmt,Yes,60.0,Mkt&HR,56.7,Placed
|
| 126 |
+
125,M,67.0,Central,71.0,Central,Science,64.33,Others,Yes,64.0,Mkt&HR,61.26,Placed
|
| 127 |
+
126,F,84.0,Central,73.0,Central,Commerce,73.0,Comm&Mgmt,No,75.0,Mkt&Fin,73.33,Placed
|
| 128 |
+
127,F,79.0,Others,61.0,Others,Science,75.5,Sci&Tech,Yes,70.0,Mkt&Fin,68.2,Placed
|
| 129 |
+
128,F,72.0,Others,60.0,Others,Science,69.0,Comm&Mgmt,No,55.5,Mkt&HR,58.4,Placed
|
| 130 |
+
129,M,80.4,Central,73.4,Central,Science,77.72,Sci&Tech,Yes,81.2,Mkt&HR,76.26,Placed
|
| 131 |
+
130,M,76.7,Central,89.7,Others,Commerce,66.0,Comm&Mgmt,Yes,90.0,Mkt&Fin,68.55,Placed
|
| 132 |
+
131,M,62.0,Central,65.0,Others,Commerce,60.0,Comm&Mgmt,No,84.0,Mkt&Fin,64.15,Not Placed
|
| 133 |
+
132,F,74.9,Others,57.0,Others,Science,62.0,Others,Yes,80.0,Mkt&Fin,60.78,Placed
|
| 134 |
+
133,M,67.0,Others,68.0,Others,Commerce,64.0,Comm&Mgmt,Yes,74.4,Mkt&HR,53.49,Placed
|
| 135 |
+
134,M,73.0,Central,64.0,Others,Commerce,77.0,Comm&Mgmt,Yes,65.0,Mkt&HR,60.98,Placed
|
| 136 |
+
135,F,77.44,Central,92.0,Others,Commerce,72.0,Comm&Mgmt,Yes,94.0,Mkt&Fin,67.13,Placed
|
| 137 |
+
136,F,72.0,Central,56.0,Others,Science,69.0,Comm&Mgmt,No,55.6,Mkt&HR,65.63,Placed
|
| 138 |
+
137,F,47.0,Central,59.0,Central,Arts,64.0,Comm&Mgmt,No,78.0,Mkt&Fin,61.58,Not Placed
|
| 139 |
+
138,M,67.0,Others,63.0,Central,Commerce,72.0,Comm&Mgmt,No,56.0,Mkt&HR,60.41,Placed
|
| 140 |
+
139,F,82.0,Others,64.0,Others,Science,73.0,Sci&Tech,Yes,96.0,Mkt&Fin,71.77,Placed
|
| 141 |
+
140,M,77.0,Central,70.0,Central,Commerce,59.0,Comm&Mgmt,Yes,58.0,Mkt&Fin,54.43,Placed
|
| 142 |
+
141,M,65.0,Central,64.8,Others,Commerce,69.5,Comm&Mgmt,Yes,56.0,Mkt&Fin,56.94,Placed
|
| 143 |
+
142,M,66.0,Central,64.0,Central,Science,60.0,Comm&Mgmt,No,60.0,Mkt&HR,61.9,Not Placed
|
| 144 |
+
143,M,85.0,Central,60.0,Others,Science,73.43,Sci&Tech,Yes,60.0,Mkt&Fin,61.29,Placed
|
| 145 |
+
144,M,77.67,Others,64.89,Others,Commerce,70.67,Comm&Mgmt,No,89.0,Mkt&Fin,60.39,Placed
|
| 146 |
+
145,M,52.0,Others,50.0,Others,Arts,61.0,Comm&Mgmt,No,60.0,Mkt&Fin,58.52,Not Placed
|
| 147 |
+
146,M,89.4,Others,65.66,Others,Science,71.25,Sci&Tech,No,72.0,Mkt&HR,63.23,Placed
|
| 148 |
+
147,M,62.0,Central,63.0,Others,Science,66.0,Comm&Mgmt,No,85.0,Mkt&HR,55.14,Placed
|
| 149 |
+
148,M,70.0,Central,74.0,Central,Commerce,65.0,Comm&Mgmt,No,83.0,Mkt&Fin,62.28,Placed
|
| 150 |
+
149,F,77.0,Central,86.0,Central,Arts,56.0,Others,No,57.0,Mkt&Fin,64.08,Placed
|
| 151 |
+
150,M,44.0,Central,58.0,Central,Arts,55.0,Comm&Mgmt,Yes,64.25,Mkt&HR,58.54,Not Placed
|
| 152 |
+
151,M,71.0,Central,58.66,Central,Science,58.0,Sci&Tech,Yes,56.0,Mkt&Fin,61.3,Placed
|
| 153 |
+
152,M,65.0,Central,65.0,Central,Commerce,75.0,Comm&Mgmt,No,83.0,Mkt&Fin,58.87,Placed
|
| 154 |
+
153,F,75.4,Others,60.5,Central,Science,84.0,Sci&Tech,No,98.0,Mkt&Fin,65.25,Placed
|
| 155 |
+
154,M,49.0,Others,59.0,Others,Science,65.0,Sci&Tech,Yes,86.0,Mkt&Fin,62.48,Placed
|
| 156 |
+
155,M,53.0,Central,63.0,Others,Science,60.0,Comm&Mgmt,Yes,70.0,Mkt&Fin,53.2,Placed
|
| 157 |
+
156,M,51.57,Others,74.66,Others,Commerce,59.9,Comm&Mgmt,Yes,56.15,Mkt&HR,65.99,Not Placed
|
| 158 |
+
157,M,84.2,Central,69.4,Central,Science,65.0,Sci&Tech,Yes,80.0,Mkt&HR,52.72,Placed
|
| 159 |
+
158,M,66.5,Central,62.5,Central,Commerce,60.9,Comm&Mgmt,No,93.4,Mkt&Fin,55.03,Placed
|
| 160 |
+
159,M,67.0,Others,63.0,Others,Science,64.0,Sci&Tech,No,60.0,Mkt&Fin,61.87,Not Placed
|
| 161 |
+
160,M,52.0,Central,49.0,Others,Commerce,58.0,Comm&Mgmt,No,62.0,Mkt&HR,60.59,Not Placed
|
| 162 |
+
161,M,87.0,Central,74.0,Central,Science,65.0,Sci&Tech,Yes,75.0,Mkt&HR,72.29,Placed
|
| 163 |
+
162,M,55.6,Others,51.0,Others,Commerce,57.5,Comm&Mgmt,No,57.63,Mkt&HR,62.72,Not Placed
|
| 164 |
+
163,M,74.2,Central,87.6,Others,Commerce,77.25,Comm&Mgmt,Yes,75.2,Mkt&Fin,66.06,Placed
|
| 165 |
+
164,M,63.0,Others,67.0,Others,Science,64.0,Sci&Tech,No,75.0,Mkt&Fin,66.46,Placed
|
| 166 |
+
165,F,67.16,Central,72.5,Central,Commerce,63.35,Comm&Mgmt,No,53.04,Mkt&Fin,65.52,Placed
|
| 167 |
+
166,F,63.3,Central,78.33,Others,Commerce,74.0,Comm&Mgmt,No,80.0,Mkt&Fin,74.56,Not Placed
|
| 168 |
+
167,M,62.0,Others,62.0,Others,Commerce,60.0,Comm&Mgmt,Yes,63.0,Mkt&HR,52.38,Placed
|
| 169 |
+
168,M,67.9,Others,62.0,Others,Science,67.0,Sci&Tech,Yes,58.1,Mkt&Fin,75.71,Not Placed
|
| 170 |
+
169,F,48.0,Central,51.0,Central,Commerce,58.0,Comm&Mgmt,Yes,60.0,Mkt&HR,58.79,Not Placed
|
| 171 |
+
170,M,59.96,Others,42.16,Others,Science,61.26,Sci&Tech,No,54.48,Mkt&HR,65.48,Not Placed
|
| 172 |
+
171,F,63.4,Others,67.2,Others,Commerce,60.0,Comm&Mgmt,No,58.06,Mkt&HR,69.28,Not Placed
|
| 173 |
+
172,M,80.0,Others,80.0,Others,Commerce,72.0,Comm&Mgmt,Yes,63.79,Mkt&Fin,66.04,Placed
|
| 174 |
+
173,M,73.0,Others,58.0,Others,Commerce,56.0,Comm&Mgmt,No,84.0,Mkt&HR,52.64,Placed
|
| 175 |
+
174,F,52.0,Others,52.0,Others,Science,55.0,Sci&Tech,No,67.0,Mkt&HR,59.32,Not Placed
|
| 176 |
+
175,M,73.24,Others,50.83,Others,Science,64.27,Sci&Tech,Yes,64.0,Mkt&Fin,66.23,Placed
|
| 177 |
+
176,M,63.0,Others,62.0,Others,Science,65.0,Sci&Tech,No,87.5,Mkt&HR,60.69,Not Placed
|
| 178 |
+
177,F,59.0,Central,60.0,Others,Commerce,56.0,Comm&Mgmt,No,55.0,Mkt&HR,57.9,Placed
|
| 179 |
+
178,F,73.0,Central,97.0,Others,Commerce,79.0,Comm&Mgmt,Yes,89.0,Mkt&Fin,70.81,Placed
|
| 180 |
+
179,M,68.0,Others,56.0,Others,Science,68.0,Sci&Tech,No,73.0,Mkt&HR,68.07,Placed
|
| 181 |
+
180,F,77.8,Central,64.0,Central,Science,64.2,Sci&Tech,No,75.5,Mkt&HR,72.14,Not Placed
|
| 182 |
+
181,M,65.0,Central,71.5,Others,Commerce,62.8,Comm&Mgmt,Yes,57.0,Mkt&Fin,56.6,Placed
|
| 183 |
+
182,M,62.0,Central,60.33,Others,Science,64.21,Sci&Tech,No,63.0,Mkt&HR,60.02,Not Placed
|
| 184 |
+
183,M,52.0,Others,65.0,Others,Arts,57.0,Others,Yes,75.0,Mkt&Fin,59.81,Not Placed
|
| 185 |
+
184,M,65.0,Central,77.0,Central,Commerce,69.0,Comm&Mgmt,No,60.0,Mkt&HR,61.82,Placed
|
| 186 |
+
185,F,56.28,Others,62.83,Others,Commerce,59.79,Comm&Mgmt,No,60.0,Mkt&HR,57.29,Not Placed
|
| 187 |
+
186,F,88.0,Central,72.0,Central,Science,78.0,Others,No,82.0,Mkt&HR,71.43,Placed
|
| 188 |
+
187,F,52.0,Central,64.0,Central,Commerce,61.0,Comm&Mgmt,No,55.0,Mkt&Fin,62.93,Not Placed
|
| 189 |
+
188,M,78.5,Central,65.5,Central,Science,67.0,Sci&Tech,Yes,95.0,Mkt&Fin,64.86,Placed
|
| 190 |
+
189,M,61.8,Others,47.0,Others,Commerce,54.38,Comm&Mgmt,No,57.0,Mkt&Fin,56.13,Not Placed
|
| 191 |
+
190,F,54.0,Central,77.6,Others,Commerce,69.2,Comm&Mgmt,No,95.65,Mkt&Fin,66.94,Not Placed
|
| 192 |
+
191,F,64.0,Others,70.2,Central,Commerce,61.0,Comm&Mgmt,No,50.0,Mkt&Fin,62.5,Not Placed
|
| 193 |
+
192,M,67.0,Others,61.0,Central,Science,72.0,Comm&Mgmt,No,72.0,Mkt&Fin,61.01,Placed
|
| 194 |
+
193,M,65.2,Central,61.4,Central,Commerce,64.8,Comm&Mgmt,Yes,93.4,Mkt&Fin,57.34,Placed
|
| 195 |
+
194,F,60.0,Central,63.0,Central,Arts,56.0,Others,Yes,80.0,Mkt&HR,56.63,Placed
|
| 196 |
+
195,M,52.0,Others,55.0,Others,Commerce,56.3,Comm&Mgmt,No,59.0,Mkt&Fin,64.74,Not Placed
|
| 197 |
+
196,M,66.0,Central,76.0,Central,Commerce,72.0,Comm&Mgmt,Yes,84.0,Mkt&HR,58.95,Placed
|
| 198 |
+
197,M,72.0,Others,63.0,Others,Science,77.5,Sci&Tech,Yes,78.0,Mkt&Fin,54.48,Placed
|
| 199 |
+
198,F,83.96,Others,53.0,Others,Science,91.0,Sci&Tech,No,59.32,Mkt&HR,69.71,Placed
|
| 200 |
+
199,F,67.0,Central,70.0,Central,Commerce,65.0,Others,No,88.0,Mkt&HR,71.96,Not Placed
|
| 201 |
+
200,M,69.0,Others,65.0,Others,Commerce,57.0,Comm&Mgmt,No,73.0,Mkt&HR,55.8,Placed
|
| 202 |
+
201,M,69.0,Others,60.0,Others,Commerce,65.0,Comm&Mgmt,No,87.55,Mkt&Fin,52.81,Placed
|
| 203 |
+
202,M,54.2,Central,63.0,Others,Science,58.0,Comm&Mgmt,No,79.0,Mkt&HR,58.44,Not Placed
|
| 204 |
+
203,M,70.0,Central,63.0,Central,Science,66.0,Sci&Tech,No,61.28,Mkt&HR,60.11,Placed
|
| 205 |
+
204,M,55.68,Others,61.33,Others,Commerce,56.87,Comm&Mgmt,No,66.0,Mkt&HR,58.3,Placed
|
| 206 |
+
205,F,74.0,Others,73.0,Others,Commerce,73.0,Comm&Mgmt,Yes,80.0,Mkt&Fin,67.69,Placed
|
| 207 |
+
206,M,61.0,Others,62.0,Others,Commerce,65.0,Comm&Mgmt,No,62.0,Mkt&Fin,56.81,Placed
|
| 208 |
+
207,M,41.0,Central,42.0,Central,Science,60.0,Comm&Mgmt,No,97.0,Mkt&Fin,53.39,Not Placed
|
| 209 |
+
208,M,83.33,Central,78.0,Others,Commerce,61.0,Comm&Mgmt,Yes,88.56,Mkt&Fin,71.55,Placed
|
| 210 |
+
209,F,43.0,Central,60.0,Others,Science,65.0,Comm&Mgmt,No,92.66,Mkt&HR,62.92,Not Placed
|
| 211 |
+
210,M,62.0,Central,72.0,Central,Commerce,65.0,Comm&Mgmt,No,67.0,Mkt&Fin,56.49,Placed
|
| 212 |
+
211,M,80.6,Others,82.0,Others,Commerce,77.6,Comm&Mgmt,No,91.0,Mkt&Fin,74.49,Placed
|
| 213 |
+
212,M,58.0,Others,60.0,Others,Science,72.0,Sci&Tech,No,74.0,Mkt&Fin,53.62,Placed
|
| 214 |
+
213,M,67.0,Others,67.0,Others,Commerce,73.0,Comm&Mgmt,Yes,59.0,Mkt&Fin,69.72,Placed
|
| 215 |
+
214,F,74.0,Others,66.0,Others,Commerce,58.0,Comm&Mgmt,No,70.0,Mkt&HR,60.23,Placed
|
| 216 |
+
215,M,62.0,Central,58.0,Others,Science,53.0,Comm&Mgmt,No,89.0,Mkt&HR,60.22,Not Placed
|
app.py
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
# ==================================================
|
| 3 |
+
# app.py - Gradio App for Hugging Face Spaces
|
| 4 |
+
# Campus Placement Prediction
|
| 5 |
+
# ==================================================
|
| 6 |
+
|
| 7 |
+
import gradio as gr
|
| 8 |
+
import pandas as pd
|
| 9 |
+
import joblib
|
| 10 |
+
import numpy as np
|
| 11 |
+
import matplotlib.pyplot as plt # Only needed for figure type hint potentially
|
| 12 |
+
import seaborn as sns # Not directly used if images are pre-generated
|
| 13 |
+
import os
|
| 14 |
+
import warnings
|
| 15 |
+
|
| 16 |
+
warnings.filterwarnings('ignore')
|
| 17 |
+
|
| 18 |
+
# --- Configuration: Relative Paths for HF Spaces ---
|
| 19 |
+
# Ensure these files are uploaded to your HF Space repository
|
| 20 |
+
MODEL_FILENAME = 'placement_model_pipeline.joblib'
|
| 21 |
+
LABEL_ENCODER_FILENAME = 'placement_label_encoder.joblib'
|
| 22 |
+
FEATURES_FILENAME = 'placement_model_features.joblib'
|
| 23 |
+
DATA_FILE = 'Campus_Selection.csv' # Original data file
|
| 24 |
+
PLOT_DIR = 'plots' # Subdirectory for plots
|
| 25 |
+
FEATURE_IMPORTANCE_PLOT = os.path.join(PLOT_DIR, 'feature_importance.png')
|
| 26 |
+
PLACEMENT_PIE_CHART = os.path.join(PLOT_DIR, 'placement_distribution.png')
|
| 27 |
+
CORRELATION_HEATMAP = os.path.join(PLOT_DIR, 'correlation_heatmap.png')
|
| 28 |
+
|
| 29 |
+
# --- Global Variables to Hold Loaded Objects ---
|
| 30 |
+
pipeline = None
|
| 31 |
+
label_encoder = None
|
| 32 |
+
feature_names = None
|
| 33 |
+
df_original = None
|
| 34 |
+
df_head = pd.DataFrame() # Default empty dataframe
|
| 35 |
+
dataset_stats = "Dataset information not available."
|
| 36 |
+
|
| 37 |
+
# --- Load Model and Preprocessing Objects ---
|
| 38 |
+
print("Attempting to load model artifacts...")
|
| 39 |
+
try:
|
| 40 |
+
if os.path.exists(MODEL_FILENAME):
|
| 41 |
+
pipeline = joblib.load(MODEL_FILENAME)
|
| 42 |
+
print(f"- Loaded: {MODEL_FILENAME}")
|
| 43 |
+
else:
|
| 44 |
+
print(f"Error: Model file not found at {MODEL_FILENAME}")
|
| 45 |
+
# gr.Error(f"Model file '{MODEL_FILENAME}' not found. Cannot make predictions.") # Use if you want error banner on load
|
| 46 |
+
|
| 47 |
+
if os.path.exists(LABEL_ENCODER_FILENAME):
|
| 48 |
+
label_encoder = joblib.load(LABEL_ENCODER_FILENAME)
|
| 49 |
+
print(f"- Loaded: {LABEL_ENCODER_FILENAME}")
|
| 50 |
+
else:
|
| 51 |
+
print(f"Error: Label encoder file not found at {LABEL_ENCODER_FILENAME}")
|
| 52 |
+
# gr.Error(f"Label encoder file '{LABEL_ENCODER_FILENAME}' not found.")
|
| 53 |
+
|
| 54 |
+
if os.path.exists(FEATURES_FILENAME):
|
| 55 |
+
feature_names = joblib.load(FEATURES_FILENAME)
|
| 56 |
+
print(f"- Loaded: {FEATURES_FILENAME}")
|
| 57 |
+
else:
|
| 58 |
+
print(f"Error: Feature names file not found at {FEATURES_FILENAME}")
|
| 59 |
+
# gr.Error(f"Feature names file '{FEATURES_FILENAME}' not found.")
|
| 60 |
+
|
| 61 |
+
if pipeline and label_encoder and feature_names:
|
| 62 |
+
print("All essential model artifacts loaded successfully.")
|
| 63 |
+
else:
|
| 64 |
+
print("Warning: One or more essential model artifacts failed to load. Prediction functionality may be limited.")
|
| 65 |
+
|
| 66 |
+
except Exception as e:
|
| 67 |
+
print(f"Error loading model artifacts: {e}")
|
| 68 |
+
# Optionally raise a Gradio error to be visible in the UI on load
|
| 69 |
+
# gr.Error(f"Failed to load model artifacts: {e}")
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
# --- Load Original Data for Overview Tab ---
|
| 73 |
+
print("Attempting to load original dataset...")
|
| 74 |
+
try:
|
| 75 |
+
if os.path.exists(DATA_FILE):
|
| 76 |
+
df_original = pd.read_csv(DATA_FILE)
|
| 77 |
+
df_head = df_original.head(10)
|
| 78 |
+
dataset_stats = f"**Number of Records:** {len(df_original)}\n\n**Columns:** {len(df_original.columns)}"
|
| 79 |
+
print(f"- Loaded: {DATA_FILE}")
|
| 80 |
+
else:
|
| 81 |
+
print(f"Warning: Original data file '{DATA_FILE}' not found for overview tab.")
|
| 82 |
+
dataset_stats = f"Original dataset file '{DATA_FILE}' not found."
|
| 83 |
+
|
| 84 |
+
except Exception as e:
|
| 85 |
+
print(f"Error loading original dataset: {e}")
|
| 86 |
+
dataset_stats = f"Error loading original dataset: {e}"
|
| 87 |
+
|
| 88 |
+
# --- Check if Plot Files Exist (for warnings in UI) ---
|
| 89 |
+
plots_exist = {
|
| 90 |
+
"feature_importance": os.path.exists(FEATURE_IMPORTANCE_PLOT),
|
| 91 |
+
"pie_chart": os.path.exists(PLACEMENT_PIE_CHART),
|
| 92 |
+
"heatmap": os.path.exists(CORRELATION_HEATMAP)
|
| 93 |
+
}
|
| 94 |
+
print(f"Plot file existence check: {plots_exist}")
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
# --- Define Prediction Function ---
|
| 98 |
+
def predict_placement(*args):
|
| 99 |
+
"""
|
| 100 |
+
Predicts placement status based on input features.
|
| 101 |
+
Returns:
|
| 102 |
+
- Profile Summary (Markdown)
|
| 103 |
+
- Prediction Result (Markdown)
|
| 104 |
+
- Probability Plot (Matplotlib Figure or None)
|
| 105 |
+
"""
|
| 106 |
+
# Check if essential objects are loaded
|
| 107 |
+
if pipeline is None or label_encoder is None or feature_names is None:
|
| 108 |
+
message = "β οΈ **Error:** Model artifacts not loaded correctly. Cannot perform prediction."
|
| 109 |
+
print(message)
|
| 110 |
+
return (message, "", None) # Return error message and no plot
|
| 111 |
+
|
| 112 |
+
# Create a DataFrame from the inputs with correct column names
|
| 113 |
+
try:
|
| 114 |
+
input_data = pd.DataFrame([args], columns=feature_names)
|
| 115 |
+
except ValueError as e:
|
| 116 |
+
message = f"β οΈ **Error:** Input data mismatch with expected features. Details: {e}"
|
| 117 |
+
print(message)
|
| 118 |
+
return (message, "", None)
|
| 119 |
+
|
| 120 |
+
# Prepare Profile Summary String
|
| 121 |
+
profile_md = "### π§βπ Student Profile Summary\n" + "-"*25 + "\n"
|
| 122 |
+
for i, feature in enumerate(feature_names):
|
| 123 |
+
label = feature.replace('_p', ' %').replace('_b', ' Board').replace('_s', ' Stream').replace('_t', ' Type').replace('workex', 'Work Experience').replace('etest', 'Employability Test').replace('ssc', 'SSC').replace('hsc', 'HSC').replace('mba', 'MBA').replace('degree','Degree').replace('specialisation','Specialisation').replace('gender','Gender').replace('_',' ').title()
|
| 124 |
+
profile_md += f"**{label}:** {args[i]}\n"
|
| 125 |
+
|
| 126 |
+
# Convert numerical inputs (sliders/numbers) to numeric types
|
| 127 |
+
numerical_cols_in_features = [
|
| 128 |
+
'ssc_p', 'hsc_p', 'degree_p', 'etest_p', 'mba_p'
|
| 129 |
+
]
|
| 130 |
+
try:
|
| 131 |
+
for col in numerical_cols_in_features:
|
| 132 |
+
if col in input_data.columns:
|
| 133 |
+
input_data[col] = pd.to_numeric(input_data[col])
|
| 134 |
+
except ValueError as e:
|
| 135 |
+
error_msg = f"Error: Invalid numeric value provided. Details: {e}"
|
| 136 |
+
print(error_msg)
|
| 137 |
+
return (profile_md, f"β οΈ **Prediction Error:**\n{error_msg}", None)
|
| 138 |
+
|
| 139 |
+
# Make prediction probability
|
| 140 |
+
try:
|
| 141 |
+
pred_proba = pipeline.predict_proba(input_data)[0]
|
| 142 |
+
predicted_class_index = np.argmax(pred_proba)
|
| 143 |
+
predicted_status = label_encoder.inverse_transform([predicted_class_index])[0]
|
| 144 |
+
confidence = pred_proba[predicted_class_index]
|
| 145 |
+
|
| 146 |
+
# Format prediction result
|
| 147 |
+
if predicted_status == 'Placed':
|
| 148 |
+
result_md = f"## β
Prediction: PLACED\n**Confidence:** {confidence:.2%}"
|
| 149 |
+
else:
|
| 150 |
+
result_md = f"## β Prediction: NOT PLACED\n**Confidence:** {confidence:.2%}"
|
| 151 |
+
|
| 152 |
+
# Create probability bar chart
|
| 153 |
+
fig, ax = plt.subplots(figsize=(5, 3)) # Smaller plot for UI
|
| 154 |
+
statuses = label_encoder.classes_
|
| 155 |
+
probabilities = pred_proba
|
| 156 |
+
colors = ['#ff9999', '#66b3ff'] # Ensure colors match labels if needed
|
| 157 |
+
# Ensure correct color mapping if classes aren't always ['Not Placed', 'Placed']
|
| 158 |
+
status_color_map = {label_encoder.classes_[0]: colors[0], label_encoder.classes_[1]: colors[1]}
|
| 159 |
+
bar_colors = [status_color_map[status] for status in statuses]
|
| 160 |
+
|
| 161 |
+
bars = ax.bar(statuses, probabilities, color=bar_colors)
|
| 162 |
+
ax.set_ylim(0, 1)
|
| 163 |
+
ax.set_ylabel('Probability')
|
| 164 |
+
ax.set_title('Placement Probability')
|
| 165 |
+
for bar in bars:
|
| 166 |
+
height = bar.get_height()
|
| 167 |
+
ax.text(bar.get_x() + bar.get_width()/2., height, f'{height:.2%}',
|
| 168 |
+
ha='center', va='bottom', fontsize=9)
|
| 169 |
+
plt.tight_layout()
|
| 170 |
+
|
| 171 |
+
# IMPORTANT: Close the plot to prevent it from displaying in logs or consuming memory
|
| 172 |
+
# We return the figure object for Gradio to render
|
| 173 |
+
# plt.close(fig) # DO NOT CLOSE HERE - Gradio needs the figure object
|
| 174 |
+
|
| 175 |
+
return profile_md, result_md, fig # Return figure object
|
| 176 |
+
|
| 177 |
+
except Exception as e:
|
| 178 |
+
error_msg = f"An error occurred during prediction: {e}"
|
| 179 |
+
print(f"Error during prediction: {e}")
|
| 180 |
+
print(f"Input data:\n{input_data.to_string()}")
|
| 181 |
+
print(f"Input data types:\n{input_data.dtypes}")
|
| 182 |
+
# Ensure plot is closed if an error occurs before returning
|
| 183 |
+
try: plt.close(fig)
|
| 184 |
+
except NameError: pass # fig might not be defined if error happened early
|
| 185 |
+
return (profile_md, f"β οΈ **Prediction Error:**\n{error_msg}", None)
|
| 186 |
+
|
| 187 |
+
|
| 188 |
+
# --- Build Gradio Interface using Blocks ---
|
| 189 |
+
app_title = "π Campus Placement Predictor"
|
| 190 |
+
app_description = """
|
| 191 |
+
Predict student placement based on academic performance, background, work experience, and MBA specialization.
|
| 192 |
+
Input the details below and click 'Predict'. Explore other tabs for insights.
|
| 193 |
+
"""
|
| 194 |
+
|
| 195 |
+
css = """
|
| 196 |
+
.gradio-container { font-family: 'IBM Plex Sans', sans-serif; max-width: 1200px; margin: auto; }
|
| 197 |
+
.gr-button { color: white; border-color: #007bff; background: #007bff; }
|
| 198 |
+
footer { visibility: hidden; }
|
| 199 |
+
.gr-label { font-weight: bold; }
|
| 200 |
+
h1 { text-align: center; }
|
| 201 |
+
"""
|
| 202 |
+
|
| 203 |
+
# Define default values (can be adjusted)
|
| 204 |
+
default_ssc_p = 70.0
|
| 205 |
+
default_hsc_p = 70.0
|
| 206 |
+
default_degree_p = 70.0
|
| 207 |
+
default_etest_p = 70.0
|
| 208 |
+
default_mba_p = 65.0
|
| 209 |
+
|
| 210 |
+
# Start Gradio Blocks UI Definition
|
| 211 |
+
app_ui = gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.blue, secondary_hue=gr.themes.colors.sky), title=app_title, css=css)
|
| 212 |
+
|
| 213 |
+
with app_ui:
|
| 214 |
+
gr.Markdown(f"<h1>{app_title}</h1>")
|
| 215 |
+
gr.Markdown(app_description)
|
| 216 |
+
|
| 217 |
+
# Define Input Components (organized)
|
| 218 |
+
input_components_map = {}
|
| 219 |
+
with gr.Row():
|
| 220 |
+
with gr.Column(scale=1):
|
| 221 |
+
gr.Markdown("**Personal & Secondary**")
|
| 222 |
+
input_components_map['gender'] = gr.Radio(label="Gender", choices=['M', 'F'], value='M')
|
| 223 |
+
input_components_map['ssc_p'] = gr.Slider(label="SSC Percentage", minimum=0.0, maximum=100.0, step=0.1, value=default_ssc_p)
|
| 224 |
+
input_components_map['ssc_b'] = gr.Dropdown(label="SSC Board", choices=['Central', 'Others'], value='Central')
|
| 225 |
+
with gr.Column(scale=1):
|
| 226 |
+
gr.Markdown("**Higher Secondary**")
|
| 227 |
+
input_components_map['hsc_p'] = gr.Slider(label="HSC Percentage", minimum=0.0, maximum=100.0, step=0.1, value=default_hsc_p)
|
| 228 |
+
input_components_map['hsc_b'] = gr.Dropdown(label="HSC Board", choices=['Central', 'Others'], value='Central')
|
| 229 |
+
input_components_map['hsc_s'] = gr.Dropdown(label="HSC Stream", choices=['Commerce', 'Science', 'Arts'], value='Commerce')
|
| 230 |
+
with gr.Column(scale=1):
|
| 231 |
+
gr.Markdown("**Degree & Experience**")
|
| 232 |
+
input_components_map['degree_p'] = gr.Slider(label="Degree Percentage", minimum=0.0, maximum=100.0, step=0.1, value=default_degree_p)
|
| 233 |
+
input_components_map['degree_t'] = gr.Dropdown(label="Degree Type", choices=['Comm&Mgmt', 'Sci&Tech', 'Others'], value='Comm&Mgmt')
|
| 234 |
+
input_components_map['workex'] = gr.Radio(label="Work Experience", choices=['No', 'Yes'], value='No')
|
| 235 |
+
with gr.Column(scale=1):
|
| 236 |
+
gr.Markdown("**Employability & MBA**")
|
| 237 |
+
input_components_map['etest_p'] = gr.Slider(label="Employability Test %", minimum=0.0, maximum=100.0, step=0.1, value=default_etest_p)
|
| 238 |
+
input_components_map['specialisation'] = gr.Dropdown(label="MBA Specialization", choices=['Mkt&Fin', 'Mkt&HR'], value='Mkt&Fin')
|
| 239 |
+
input_components_map['mba_p'] = gr.Slider(label="MBA Percentage", minimum=0.0, maximum=100.0, step=0.1, value=default_mba_p)
|
| 240 |
+
|
| 241 |
+
# --- Order Input Components based on loaded feature_names ---
|
| 242 |
+
ordered_input_components = []
|
| 243 |
+
if feature_names:
|
| 244 |
+
missing_features = []
|
| 245 |
+
for name in feature_names:
|
| 246 |
+
component = input_components_map.get(name)
|
| 247 |
+
if component:
|
| 248 |
+
ordered_input_components.append(component)
|
| 249 |
+
else:
|
| 250 |
+
missing_features.append(name)
|
| 251 |
+
print(f"Warning: UI component for feature '{name}' not defined in input_components_map.")
|
| 252 |
+
if missing_features:
|
| 253 |
+
gr.Warning(f"Missing UI components for features: {', '.join(missing_features)}. Predictions might fail.")
|
| 254 |
+
elif len(ordered_input_components) != len(feature_names):
|
| 255 |
+
gr.Warning("Mismatch between number of UI components and expected features.")
|
| 256 |
+
else:
|
| 257 |
+
# Fallback if feature_names couldn't load - order might be wrong!
|
| 258 |
+
ordered_input_components = list(input_components_map.values())
|
| 259 |
+
gr.Warning("Feature names file not loaded. Input order may be incorrect, predictions might fail.")
|
| 260 |
+
|
| 261 |
+
|
| 262 |
+
predict_button = gr.Button("π Predict Placement Status")
|
| 263 |
+
|
| 264 |
+
# Define Output Components within Tabs
|
| 265 |
+
with gr.Tabs():
|
| 266 |
+
with gr.TabItem("π Prediction Results"):
|
| 267 |
+
with gr.Row():
|
| 268 |
+
out_profile = gr.Markdown(label="Input Summary")
|
| 269 |
+
with gr.Column():
|
| 270 |
+
out_prediction = gr.Markdown(label="Prediction")
|
| 271 |
+
out_plot = gr.Plot(label="Probability Distribution") # Displays the matplotlib fig
|
| 272 |
+
|
| 273 |
+
with gr.TabItem("π‘ Feature Importance"):
|
| 274 |
+
gr.Markdown("## Feature Importance Analysis")
|
| 275 |
+
gr.Markdown("Shows which factors most influence the placement prediction (based on the trained model). Higher values indicate greater influence.")
|
| 276 |
+
if plots_exist["feature_importance"]:
|
| 277 |
+
gr.Image(FEATURE_IMPORTANCE_PLOT, label="Feature Importance Plot", show_label=False)
|
| 278 |
+
else:
|
| 279 |
+
gr.Warning(f"Feature importance plot not found at '{FEATURE_IMPORTANCE_PLOT}'. Please ensure it was generated and uploaded.")
|
| 280 |
+
gr.Markdown("""
|
| 281 |
+
*Insights based on typical results for this type of problem:*
|
| 282 |
+
- **Academic Performance:** SSC %, HSC %, and Degree % are often strong predictors.
|
| 283 |
+
- **Employability Test:** Performance in standardized tests (etest_p) is usually critical.
|
| 284 |
+
- **Work Experience:** Can provide a significant advantage.
|
| 285 |
+
- **MBA Performance:** MBA % reinforces the importance of consistent academic achievement.
|
| 286 |
+
""")
|
| 287 |
+
|
| 288 |
+
with gr.TabItem("π Dataset Overview"):
|
| 289 |
+
gr.Markdown("## Dataset Overview")
|
| 290 |
+
gr.Markdown("A quick look at the data used to train the model.")
|
| 291 |
+
with gr.Row():
|
| 292 |
+
with gr.Column(scale=2): # Give more space to dataframe
|
| 293 |
+
gr.Markdown("**Data Sample**")
|
| 294 |
+
if df_original is not None:
|
| 295 |
+
gr.DataFrame(df_head, label="First 10 Rows", row_count=(10, "fixed"), wrap=True, interactive=False)
|
| 296 |
+
else:
|
| 297 |
+
gr.Warning(f"Original dataset '{DATA_FILE}' not found.")
|
| 298 |
+
gr.Markdown("**Basic Stats**")
|
| 299 |
+
gr.Markdown(dataset_stats)
|
| 300 |
+
with gr.Column(scale=1):
|
| 301 |
+
gr.Markdown("**Placement Distribution**")
|
| 302 |
+
if plots_exist["pie_chart"]:
|
| 303 |
+
gr.Image(PLACEMENT_PIE_CHART, label="Placement Distribution", show_label=False)
|
| 304 |
+
else:
|
| 305 |
+
gr.Warning(f"Placement distribution plot not found at '{PLACEMENT_PIE_CHART}'.")
|
| 306 |
+
gr.Markdown("**Correlation Analysis**")
|
| 307 |
+
if plots_exist["heatmap"]:
|
| 308 |
+
gr.Image(CORRELATION_HEATMAP, label="Correlation Heatmap", show_label=False)
|
| 309 |
+
else:
|
| 310 |
+
gr.Warning(f"Correlation heatmap not found at '{CORRELATION_HEATMAP}'.")
|
| 311 |
+
|
| 312 |
+
# --- Link Button Click to Function ---
|
| 313 |
+
predict_button.click(
|
| 314 |
+
fn=predict_placement,
|
| 315 |
+
inputs=ordered_input_components, # Use the ordered list
|
| 316 |
+
outputs=[out_profile, out_prediction, out_plot]
|
| 317 |
+
)
|
| 318 |
+
|
| 319 |
+
# --- Add Examples ---
|
| 320 |
+
# Ensure example values match the order and type of ordered_input_components
|
| 321 |
+
if feature_names: # Only add examples if we know the correct feature order
|
| 322 |
+
example_list = [
|
| 323 |
+
# M, ssc_p, ssc_b, hsc_p, hsc_b, hsc_s, degree_p, degree_t, workex, etest_p, specialisation, mba_p -> default order if no feature_names
|
| 324 |
+
['M', 67.0, 'Others', 91.0, 'Others', 'Commerce', 58.0, 'Sci&Tech', 'No', 55.0, 'Mkt&HR', 58.8], # Row 1 (Placed)
|
| 325 |
+
['M', 56.0, 'Central', 52.0, 'Central', 'Science', 52.0, 'Sci&Tech', 'No', 66.0, 'Mkt&HR', 59.43], # Row 4 (Not Placed)
|
| 326 |
+
['F', 77.0, 'Central', 87.0, 'Central', 'Commerce', 59.0, 'Comm&Mgmt', 'No', 68.0, 'Mkt&Fin', 68.63], # Row 14 (Placed)
|
| 327 |
+
['F', 52.0, 'Central', 64.0, 'Central', 'Commerce', 61.0, 'Comm&Mgmt', 'No', 55.0, 'Mkt&Fin', 62.93], # Row 187 (Not Placed)
|
| 328 |
+
['M', 84.0, 'Others', 90.9, 'Others', 'Science', 64.5, 'Sci&Tech', 'No', 86.04, 'Mkt&Fin', 59.42] # Row 79 (Placed)
|
| 329 |
+
]
|
| 330 |
+
# Remap examples based on actual feature_names order if necessary (though the default order matches here)
|
| 331 |
+
# This step is complex if the order differs significantly. Assuming the order defined in UI matches feature_names for simplicity now.
|
| 332 |
+
final_examples = example_list
|
| 333 |
+
|
| 334 |
+
gr.Examples(
|
| 335 |
+
examples=final_examples,
|
| 336 |
+
inputs=ordered_input_components,
|
| 337 |
+
outputs=[out_profile, out_prediction, out_plot],
|
| 338 |
+
fn=predict_placement,
|
| 339 |
+
cache_examples=False # Caching might be ok if function is pure
|
| 340 |
+
)
|
| 341 |
+
|
| 342 |
+
# --- Launch the App ---
|
| 343 |
+
# This is the standard way to launch in HF Spaces (app variable must be defined)
|
| 344 |
+
# app_ui.launch() # No debug=True for production on Spaces
|
| 345 |
+
|
| 346 |
+
# If running locally for testing before pushing to HF:
|
| 347 |
+
if __name__ == "__main__":
|
| 348 |
+
print("Launching Gradio app locally...")
|
| 349 |
+
app_ui.launch(debug=True) # Use debug=True for local testing
|
| 350 |
+
# app_ui.launch() # Use this for standard local deployment without debug prints
|
placement_label_encoder.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:293ca22841bc71424e29aa564477f7838d5ea1f99ce0a9791133d2400247b040
|
| 3 |
+
size 548
|
placement_model.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e86773278a91fee2d8c96912ae3c190954734744467d8db47c05033a4f40514d
|
| 3 |
+
size 991
|
placement_model_features.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5b0397b5ca69073900be0b3940b6241d5b0aabd8f551603d001bc80cf8527275
|
| 3 |
+
size 131
|
placement_model_pipeline.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:27303df4f844fde4c773df601aef7abf7aa6b525aecaa5caa3f29cd036439a9b
|
| 3 |
+
size 479560
|
placement_preprocessor.joblib
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d2eb5a1cec93d1030a5fe043b1f3c6fda78b8a68a5e35b6f83e990a1e16174b1
|
| 3 |
+
size 4998
|
plots/correlation_heatmap.png
ADDED
|
plots/feature_importance.png
ADDED
|
plots/placement_distribution.png
ADDED
|
requirements.txt.txt
ADDED
|
File without changes
|