msgasu commited on
Commit
8416eb2
·
verified ·
1 Parent(s): 92a348b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +125 -120
app.py CHANGED
@@ -1,121 +1,126 @@
1
- import joblib
2
- import pandas as pd
3
- import numpy as np
4
- import gradio as gr
5
-
6
- # Load your trained model
7
- model = joblib.load('trained_model.joblib')
8
-
9
- # Define grade to numeric conversion (same as before)
10
- def grade_to_numeric(grade):
11
- if pd.isna(grade) or grade == "":
12
- return np.nan
13
- grade_map = {
14
- "A1": 1, "B2": 2, "B3": 3, "C4": 4, "C5": 5, "C6": 6,
15
- "D7": 7, "E8": 8, "F9": 9
16
- }
17
- return grade_map.get(grade, np.nan)
18
-
19
- # Define your preprocessing function
20
- def preprocess_input(desired_career, aggregate, english, core_maths, science,
21
- social_studies, electives, elective_maths=None,
22
- business_management=None, government=None, chemistry=None,
23
- physics=None, economics=None, visual_arts=None, geography=None,
24
- e_ict=None, literature=None, biology=None):
25
-
26
- # Create a dictionary with all inputs
27
- input_data = {
28
- "Desired_Career": desired_career,
29
- "Aggregate": aggregate,
30
- "English": english,
31
- "Core Maths": core_maths,
32
- "Science": science,
33
- "Social Studies": social_studies,
34
- "Electives": electives,
35
- "Elective Maths": elective_maths,
36
- "Business Management": business_management,
37
- "Government": government,
38
- "Chemistry": chemistry,
39
- "Physics": physics,
40
- "Economics": economics,
41
- "Visual Arts": visual_arts,
42
- "Geography": geography,
43
- "E-ICT": e_ict,
44
- "Literature": literature,
45
- "Biology": biology
46
- }
47
-
48
- # Convert to DataFrame
49
- student_df = pd.DataFrame([input_data])
50
-
51
- # Convert grades to numerical
52
- grade_cols = ['English', 'Core Maths', 'Science', 'Social Studies',
53
- 'Elective Maths', 'Business Management', 'Government',
54
- 'Chemistry', 'Physics', 'Economics', 'Visual Arts',
55
- 'Geography', 'E-ICT', 'Literature', 'Biology']
56
-
57
- for col in grade_cols:
58
- if col in student_df.columns:
59
- student_df[col] = student_df[col].apply(grade_to_numeric)
60
-
61
- return student_df
62
-
63
- def predict_career(desired_career, aggregate, english, core_maths, science,
64
- social_studies, electives, elective_maths=None,
65
- business_management=None, government=None, chemistry=None,
66
- physics=None, economics=None, visual_arts=None, geography=None,
67
- e_ict=None, literature=None, biology=None):
68
-
69
- # Preprocess input
70
- processed_input = preprocess_input(
71
- desired_career, aggregate, english, core_maths, science,
72
- social_studies, electives, elective_maths, business_management,
73
- government, chemistry, physics, economics, visual_arts, geography,
74
- e_ict, literature, biology
75
- )
76
-
77
- # Make prediction
78
- prediction = model.predict(processed_input)
79
- probabilities = model.predict_proba(processed_input)[0]
80
-
81
- # Get top 3 recommendations
82
- class_indices = np.argsort(probabilities)[::-1][:3]
83
- classes = model.classes_
84
- recommendations = [
85
- (classes[idx], float(probabilities[idx]))
86
- for idx in class_indices
87
- ]
88
-
89
- # Format output
90
- output = "\n".join(
91
- [f"{course}: {prob*100:.1f}%" for course, prob in recommendations]
92
- )
93
-
94
- return output
95
-
96
- # Create Gradio interface
97
- inputs = [
98
- gr.Dropdown(["Medicine", "Pharmacy", "Law", "Computer Science", "Engineering",
99
- "Business", "Nursing", "Agriculture", "Journalism", "Education"],
100
- label="Desired Career"),
101
- gr.Number(label="Aggregate Score"),
102
- gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="English"),
103
- gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Core Maths"),
104
- gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Science"),
105
- gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Social Studies"),
106
- gr.Textbox(label="Electives (comma separated)"),
107
- gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9", None], label="Elective Maths (optional)"),
108
- # Add other optional subjects similarly
109
- ]
110
-
111
- outputs = gr.Textbox(label="Recommended Courses")
112
-
113
- interface = gr.Interface(
114
- fn=predict_career,
115
- inputs=inputs,
116
- outputs=outputs,
117
- title="Career Path Recommender",
118
- description="Enter your academic information to get career recommendations"
119
- )
120
-
 
 
 
 
 
121
  interface.launch()
 
1
+ import joblib
2
+ import pandas as pd
3
+ import numpy as np
4
+ import gradio as gr
5
+ import sys
6
+
7
+ # Workaround for numpy._core issue
8
+ if not hasattr(np, '_core'):
9
+ sys.modules['numpy._core'] = np.core
10
+
11
+ # Load your trained model
12
+ model = joblib.load('trained_model.joblib')
13
+
14
+ # Define grade to numeric conversion (same as before)
15
+ def grade_to_numeric(grade):
16
+ if pd.isna(grade) or grade == "":
17
+ return np.nan
18
+ grade_map = {
19
+ "A1": 1, "B2": 2, "B3": 3, "C4": 4, "C5": 5, "C6": 6,
20
+ "D7": 7, "E8": 8, "F9": 9
21
+ }
22
+ return grade_map.get(grade, np.nan)
23
+
24
+ # Define your preprocessing function
25
+ def preprocess_input(desired_career, aggregate, english, core_maths, science,
26
+ social_studies, electives, elective_maths=None,
27
+ business_management=None, government=None, chemistry=None,
28
+ physics=None, economics=None, visual_arts=None, geography=None,
29
+ e_ict=None, literature=None, biology=None):
30
+
31
+ # Create a dictionary with all inputs
32
+ input_data = {
33
+ "Desired_Career": desired_career,
34
+ "Aggregate": aggregate,
35
+ "English": english,
36
+ "Core Maths": core_maths,
37
+ "Science": science,
38
+ "Social Studies": social_studies,
39
+ "Electives": electives,
40
+ "Elective Maths": elective_maths,
41
+ "Business Management": business_management,
42
+ "Government": government,
43
+ "Chemistry": chemistry,
44
+ "Physics": physics,
45
+ "Economics": economics,
46
+ "Visual Arts": visual_arts,
47
+ "Geography": geography,
48
+ "E-ICT": e_ict,
49
+ "Literature": literature,
50
+ "Biology": biology
51
+ }
52
+
53
+ # Convert to DataFrame
54
+ student_df = pd.DataFrame([input_data])
55
+
56
+ # Convert grades to numerical
57
+ grade_cols = ['English', 'Core Maths', 'Science', 'Social Studies',
58
+ 'Elective Maths', 'Business Management', 'Government',
59
+ 'Chemistry', 'Physics', 'Economics', 'Visual Arts',
60
+ 'Geography', 'E-ICT', 'Literature', 'Biology']
61
+
62
+ for col in grade_cols:
63
+ if col in student_df.columns:
64
+ student_df[col] = student_df[col].apply(grade_to_numeric)
65
+
66
+ return student_df
67
+
68
+ def predict_career(desired_career, aggregate, english, core_maths, science,
69
+ social_studies, electives, elective_maths=None,
70
+ business_management=None, government=None, chemistry=None,
71
+ physics=None, economics=None, visual_arts=None, geography=None,
72
+ e_ict=None, literature=None, biology=None):
73
+
74
+ # Preprocess input
75
+ processed_input = preprocess_input(
76
+ desired_career, aggregate, english, core_maths, science,
77
+ social_studies, electives, elective_maths, business_management,
78
+ government, chemistry, physics, economics, visual_arts, geography,
79
+ e_ict, literature, biology
80
+ )
81
+
82
+ # Make prediction
83
+ prediction = model.predict(processed_input)
84
+ probabilities = model.predict_proba(processed_input)[0]
85
+
86
+ # Get top 3 recommendations
87
+ class_indices = np.argsort(probabilities)[::-1][:3]
88
+ classes = model.classes_
89
+ recommendations = [
90
+ (classes[idx], float(probabilities[idx]))
91
+ for idx in class_indices
92
+ ]
93
+
94
+ # Format output
95
+ output = "\n".join(
96
+ [f"{course}: {prob*100:.1f}%" for course, prob in recommendations]
97
+ )
98
+
99
+ return output
100
+
101
+ # Create Gradio interface
102
+ inputs = [
103
+ gr.Dropdown(["Medicine", "Pharmacy", "Law", "Computer Science", "Engineering",
104
+ "Business", "Nursing", "Agriculture", "Journalism", "Education"],
105
+ label="Desired Career"),
106
+ gr.Number(label="Aggregate Score"),
107
+ gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="English"),
108
+ gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Core Maths"),
109
+ gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Science"),
110
+ gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9"], label="Social Studies"),
111
+ gr.Textbox(label="Electives (comma separated)"),
112
+ gr.Dropdown(["A1", "B2", "B3", "C4", "C5", "C6", "D7", "E8", "F9", None], label="Elective Maths (optional)"),
113
+ # Add other optional subjects similarly
114
+ ]
115
+
116
+ outputs = gr.Textbox(label="Recommended Courses")
117
+
118
+ interface = gr.Interface(
119
+ fn=predict_career,
120
+ inputs=inputs,
121
+ outputs=outputs,
122
+ title="Career Path Recommender",
123
+ description="Enter your academic information to get career recommendations"
124
+ )
125
+
126
  interface.launch()