josh-dcosta commited on
Commit
e43bff4
Β·
verified Β·
1 Parent(s): 098f228

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -12
app.py CHANGED
@@ -43,15 +43,38 @@ for model_name, pickle_file in model_paths.items():
43
  print(f"Model file for {model_name} not found.")
44
 
45
  def predict_cancer(age, gender, T, N, Focality, Response):
46
- if not (1 <= age <= 100):
47
- return "πŸ”΄ **Error:** Age must be between 1 and 100."
48
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  gender_val = 0 if gender == "Female" else 1
50
  response_val = int(Response)
51
  T_val = int(T)
52
  N_val = int(N)
53
  Focality_val = int(Focality)
54
 
 
55
  features = pd.DataFrame({
56
  'Age': [age],
57
  'Gender': [gender_val],
@@ -61,6 +84,7 @@ def predict_cancer(age, gender, T, N, Focality, Response):
61
  'Response': [response_val]
62
  })
63
 
 
64
  scaler_file = "model/pjas-thyroid-Scaler.pkl"
65
  if not os.path.exists(scaler_file):
66
  return "πŸ”΄ **Error:** Scaler file not found. Please contact the administrator."
@@ -68,13 +92,14 @@ def predict_cancer(age, gender, T, N, Focality, Response):
68
  scaler = joblib.load(scaler_file)
69
  features[['Age']] = scaler.transform(features[['Age']])
70
 
 
71
  sorted_model_names = sorted(
72
  model_performance.keys(),
73
  key=lambda m: model_performance[m]['Model Sensitivity'],
74
  reverse=True
75
  )
76
 
77
- # HTML table header with colored columns
78
  table_header = """
79
  <table>
80
  <thead>
@@ -88,9 +113,8 @@ def predict_cancer(age, gender, T, N, Focality, Response):
88
  <tbody>
89
  """
90
  table_rows = []
91
-
92
- can_recur_emoji = "πŸ”΄" # "can recur"
93
- cannot_recur_emoji = "🟒" # "cannot-recur"
94
 
95
  for model_name in sorted_model_names:
96
  model = loaded_models.get(model_name)
@@ -102,11 +126,7 @@ def predict_cancer(age, gender, T, N, Focality, Response):
102
  try:
103
  prediction = model.predict(features)
104
  pred_value = prediction[0]
105
-
106
- if pred_value == 1:
107
- pred_text = f"{can_recur_emoji} Can recur"
108
- else:
109
- pred_text = f"{cannot_recur_emoji} Cannot-recur"
110
 
111
  sensitivity = model_performance[model_name]['Model Sensitivity']
112
  specificity = model_performance[model_name]['Model Specificity']
 
43
  print(f"Model file for {model_name} not found.")
44
 
45
  def predict_cancer(age, gender, T, N, Focality, Response):
46
+ # Validate age
47
+ if age is None or not (1 <= age <= 100):
48
+ return "πŸ”΄ **Error:** Age must be a number between 1 and 100."
49
+
50
+ # Validate gender
51
+ if gender not in ["Female", "Male"]:
52
+ return "πŸ”΄ **Error:** Please select a valid gender."
53
+
54
+ # Validate T (Tumor Size)
55
+ if T is None:
56
+ return "πŸ”΄ **Error:** Please select a valid T (Tumor Size) option."
57
+
58
+ # Validate N (Lymph Node Spread)
59
+ if N is None:
60
+ return "πŸ”΄ **Error:** Please select a valid N (Lymph Node Spread) option."
61
+
62
+ # Validate Focality
63
+ if Focality is None:
64
+ return "πŸ”΄ **Error:** Please select a valid Focality option."
65
+
66
+ # Validate Response
67
+ if Response is None:
68
+ return "πŸ”΄ **Error:** Please select a valid Response option."
69
+
70
+ # Process gender and other fields
71
  gender_val = 0 if gender == "Female" else 1
72
  response_val = int(Response)
73
  T_val = int(T)
74
  N_val = int(N)
75
  Focality_val = int(Focality)
76
 
77
+ # Prepare features
78
  features = pd.DataFrame({
79
  'Age': [age],
80
  'Gender': [gender_val],
 
84
  'Response': [response_val]
85
  })
86
 
87
+ # Validate scaler file
88
  scaler_file = "model/pjas-thyroid-Scaler.pkl"
89
  if not os.path.exists(scaler_file):
90
  return "πŸ”΄ **Error:** Scaler file not found. Please contact the administrator."
 
92
  scaler = joblib.load(scaler_file)
93
  features[['Age']] = scaler.transform(features[['Age']])
94
 
95
+ # Sort models based on sensitivity
96
  sorted_model_names = sorted(
97
  model_performance.keys(),
98
  key=lambda m: model_performance[m]['Model Sensitivity'],
99
  reverse=True
100
  )
101
 
102
+ # Generate HTML table
103
  table_header = """
104
  <table>
105
  <thead>
 
113
  <tbody>
114
  """
115
  table_rows = []
116
+ can_recur_emoji = "πŸ”΄"
117
+ cannot_recur_emoji = "🟒"
 
118
 
119
  for model_name in sorted_model_names:
120
  model = loaded_models.get(model_name)
 
126
  try:
127
  prediction = model.predict(features)
128
  pred_value = prediction[0]
129
+ pred_text = f"{can_recur_emoji} Can recur" if pred_value == 1 else f"{cannot_recur_emoji} Cannot-recur"
 
 
 
 
130
 
131
  sensitivity = model_performance[model_name]['Model Sensitivity']
132
  specificity = model_performance[model_name]['Model Specificity']