DreamStream-1 commited on
Commit
f0184d5
·
verified ·
1 Parent(s): 4ca2b05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -46
app.py CHANGED
@@ -57,17 +57,17 @@ def load_data():
57
  try:
58
  df = pd.read_csv("Training.csv")
59
  tr = pd.read_csv("Testing.csv")
60
- except FileNotFoundError:
61
- raise RuntimeError("Data files not found. Please ensure `Training.csv` and `Testing.csv` are uploaded correctly.")
62
 
63
  # Encode diseases
64
  disease_dict = {
65
  'Fungal infection': 0, 'Allergy': 1, 'GERD': 2, 'Chronic cholestasis': 3, 'Drug Reaction': 4,
66
- 'Peptic ulcer diseae': 5, 'AIDS': 6, 'Diabetes ': 7, 'Gastroenteritis': 8, 'Bronchial Asthma': 9,
67
- 'Hypertension ': 10, 'Migraine': 11, 'Cervical spondylosis': 12, 'Paralysis (brain hemorrhage)': 13,
68
- 'Jaundice': 14, 'Malaria': 15, 'Chicken pox': 16, 'Dengue': 17, 'Typhoid': 18, 'hepatitis A': 19,
69
  'Hepatitis B': 20, 'Hepatitis C': 21, 'Hepatitis D': 22, 'Hepatitis E': 23, 'Alcoholic hepatitis': 24,
70
- 'Tuberculosis': 25, 'Common Cold': 26, 'Pneumonia': 27, 'Dimorphic hemmorhoids(piles)': 28,
71
  'Heart attack': 29, 'Varicose veins': 30, 'Hypothyroidism': 31, 'Hyperthyroidism': 32,
72
  'Hypoglycemia': 33, 'Osteoarthritis': 34, 'Arthritis': 35,
73
  '(vertigo) Paroxysmal Positional Vertigo': 36, 'Acne': 37, 'Urinary tract infection': 38,
@@ -81,23 +81,21 @@ def load_data():
81
  print("Unique values in prognosis after mapping:", df['prognosis'].unique())
82
 
83
  # Ensure prognosis is purely numerical after mapping
84
- if df['prognosis'].dtype == 'object': # Check for unmapped entries
85
  raise ValueError(f"The prognosis contains unmapped values: {df['prognosis'].unique()}")
86
 
87
- df['prognosis'] = df['prognosis'].astype(int) # Convert to integer
88
- df = df.infer_objects() # Remove 'copy' argument
89
 
90
  # Similar process for the testing data
91
  tr.replace({'prognosis': disease_dict}, inplace=True)
92
-
93
- # Check unique values in testing data
94
  print("Unique values in prognosis for testing data after mapping:", tr['prognosis'].unique())
95
 
96
- if tr['prognosis'].dtype == 'object': # Check for unmapped entries
97
  raise ValueError(f"Testing data prognosis contains unmapped values: {tr['prognosis'].unique()}")
98
 
99
- tr['prognosis'] = tr['prognosis'].astype(int) # Convert to integer if necessary
100
- tr = tr.infer_objects() # Remove 'copy' argument
101
 
102
  return df, tr, disease_dict
103
 
@@ -110,9 +108,9 @@ y_test = tr['prognosis']
110
 
111
  # Encode the target variable with LabelEncoder if still in string format
112
  le = LabelEncoder()
113
- y_encoded = le.fit_transform(y) # Encode string labels into integers
114
 
115
- def train_models():
116
  models = {
117
  "Decision Tree": DecisionTreeClassifier(),
118
  "Random Forest": RandomForestClassifier(),
@@ -120,12 +118,15 @@ def train_models():
120
  }
121
  trained_models = {}
122
  for model_name, model_obj in models.items():
123
- model_obj.fit(X, y_encoded) # Use encoded labels
124
- acc = accuracy_score(y_test, model_obj.predict(X_test))
125
- trained_models[model_name] = (model_obj, acc)
 
 
 
126
  return trained_models
127
 
128
- trained_models = train_models()
129
 
130
  def predict_disease(model, symptoms):
131
  input_test = np.zeros(len(l1))
@@ -205,11 +206,39 @@ def detect_emotion(user_input):
205
  return emotion_map.get(emotion, "Unknown 🤔"), emotion
206
 
207
  def generate_suggestions(emotion):
 
208
  emotion_key = emotion.lower()
209
  suggestions = {
210
- # Define suggestions based on the detected emotion
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  }
212
-
213
  formatted_suggestions = [
214
  [title, f'<a href="{link}" target="_blank">{link}</a>'] for title, link in suggestions.get(emotion_key, [["No specific suggestions available.", "#"]])
215
  ]
@@ -234,9 +263,10 @@ def get_health_professionals_and_map(location, query):
234
  popup=f"{place['name']}"
235
  ).add_to(map_)
236
  return professionals, map_._repr_html_()
237
- return [], "" # Return empty list if no professionals found
238
  except Exception as e:
239
- return [], "" # Return empty list on exception
 
240
 
241
  # Main Application Logic
242
  def app_function(user_input, location, query, symptoms, history):
@@ -261,10 +291,9 @@ def app_function(user_input, location, query, symptoms, history):
261
  custom_css = """
262
  body {
263
  font-family: 'Roboto', sans-serif;
264
- background-color: #3c6487; /* Set the background color */
265
  color: white;
266
  }
267
-
268
  h1 {
269
  background: #ffffff;
270
  color: #000000;
@@ -274,7 +303,6 @@ h1 {
274
  text-align: center;
275
  font-size: 2.5rem;
276
  }
277
-
278
  textarea, input {
279
  background: transparent;
280
  color: black;
@@ -285,14 +313,12 @@ textarea, input {
285
  outline: none;
286
  border-radius: 8px;
287
  }
288
-
289
  textarea:focus, input:focus {
290
  background: transparent;
291
  color: black;
292
  border: 2px solid orange;
293
  outline: none;
294
  }
295
-
296
  .df-container {
297
  background: white;
298
  color: black;
@@ -304,26 +330,21 @@ textarea:focus, input:focus {
304
  height: auto;
305
  overflow-y: auto;
306
  }
307
-
308
  #suggestions-title {
309
- text-align: center !important; /* Ensure the centering is applied */
310
- font-weight: bold !important; /* Ensure bold is applied */
311
- color: white !important; /* Ensure color is applied */
312
- font-size: 4.2rem !important; /* Ensure font size is applied */
313
- margin-bottom: 20px !important; /* Ensure margin is applied */
314
  }
315
-
316
- /* Style for the submit button */
317
  .gr-button {
318
- background-color: #ae1c93; /* Set the background color to #ae1c93 */
319
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);
320
  transition: background-color 0.3s ease;
321
  }
322
-
323
  .gr-button:hover {
324
  background-color: #8f167b;
325
  }
326
-
327
  .gr-button:active {
328
  background-color: #7f156b;
329
  }
@@ -334,9 +355,9 @@ with gr.Blocks(css=custom_css) as app:
334
  gr.HTML("<h1>🌟 Well-Being Companion</h1>")
335
 
336
  with gr.Row():
337
- user_input = gr.Textbox(label="Please Enter Your Message Here")
338
- location = gr.Textbox(label="Your Current Location Here")
339
- query = gr.Textbox(label="Search Health Professionals Nearby")
340
 
341
  with gr.Row():
342
  symptom1 = gr.Dropdown(choices=["None"] + l1, label="Symptom 1")
@@ -353,10 +374,10 @@ with gr.Blocks(css=custom_css) as app:
353
 
354
  gr.Markdown("Suggestions", elem_id="suggestions-title")
355
 
356
- suggestions = gr.DataFrame(headers=["Title", "Link"]) # Suggestions DataFrame
357
- professionals = gr.DataFrame(label="Nearby Health Professionals", headers=["Name", "Address"]) # Professionals DataFrame
358
  map_html = gr.HTML(label="Interactive Map")
359
- disease_predictions = gr.Textbox(label="Disease Predictions") # For Disease Prediction Results
360
 
361
  submit.click(
362
  app_function,
 
57
  try:
58
  df = pd.read_csv("Training.csv")
59
  tr = pd.read_csv("Testing.csv")
60
+ except FileNotFoundError as e:
61
+ raise RuntimeError("Data files not found. Please ensure `Training.csv` and `Testing.csv` are uploaded correctly.") from e
62
 
63
  # Encode diseases
64
  disease_dict = {
65
  'Fungal infection': 0, 'Allergy': 1, 'GERD': 2, 'Chronic cholestasis': 3, 'Drug Reaction': 4,
66
+ 'Peptic ulcer disease': 5, 'AIDS': 6, 'Diabetes': 7, 'Gastroenteritis': 8, 'Bronchial Asthma': 9,
67
+ 'Hypertension': 10, 'Migraine': 11, 'Cervical spondylosis': 12, 'Paralysis (brain hemorrhage)': 13,
68
+ 'Jaundice': 14, 'Malaria': 15, 'Chicken pox': 16, 'Dengue': 17, 'Typhoid': 18, 'Hepatitis A': 19,
69
  'Hepatitis B': 20, 'Hepatitis C': 21, 'Hepatitis D': 22, 'Hepatitis E': 23, 'Alcoholic hepatitis': 24,
70
+ 'Tuberculosis': 25, 'Common Cold': 26, 'Pneumonia': 27, 'Dimorphic hemorrhoids(piles)': 28,
71
  'Heart attack': 29, 'Varicose veins': 30, 'Hypothyroidism': 31, 'Hyperthyroidism': 32,
72
  'Hypoglycemia': 33, 'Osteoarthritis': 34, 'Arthritis': 35,
73
  '(vertigo) Paroxysmal Positional Vertigo': 36, 'Acne': 37, 'Urinary tract infection': 38,
 
81
  print("Unique values in prognosis after mapping:", df['prognosis'].unique())
82
 
83
  # Ensure prognosis is purely numerical after mapping
84
+ if df['prognosis'].dtype == 'object':
85
  raise ValueError(f"The prognosis contains unmapped values: {df['prognosis'].unique()}")
86
 
87
+ df['prognosis'] = df['prognosis'].astype(int)
88
+ df = df.infer_objects()
89
 
90
  # Similar process for the testing data
91
  tr.replace({'prognosis': disease_dict}, inplace=True)
 
 
92
  print("Unique values in prognosis for testing data after mapping:", tr['prognosis'].unique())
93
 
94
+ if tr['prognosis'].dtype == 'object':
95
  raise ValueError(f"Testing data prognosis contains unmapped values: {tr['prognosis'].unique()}")
96
 
97
+ tr['prognosis'] = tr['prognosis'].astype(int)
98
+ tr = tr.infer_objects()
99
 
100
  return df, tr, disease_dict
101
 
 
108
 
109
  # Encode the target variable with LabelEncoder if still in string format
110
  le = LabelEncoder()
111
+ y_encoded = le.fit_transform(y)
112
 
113
+ def train_models(X, y_encoded, X_test, y_test):
114
  models = {
115
  "Decision Tree": DecisionTreeClassifier(),
116
  "Random Forest": RandomForestClassifier(),
 
118
  }
119
  trained_models = {}
120
  for model_name, model_obj in models.items():
121
+ try:
122
+ model_obj.fit(X, y_encoded) # Fit the model
123
+ acc = accuracy_score(y_test, model_obj.predict(X_test))
124
+ trained_models[model_name] = (model_obj, acc)
125
+ except Exception as e:
126
+ print(f"Failed to train {model_name}: {e}")
127
  return trained_models
128
 
129
+ trained_models = train_models(X, y_encoded, X_test, y_test)
130
 
131
  def predict_disease(model, symptoms):
132
  input_test = np.zeros(len(l1))
 
206
  return emotion_map.get(emotion, "Unknown 🤔"), emotion
207
 
208
  def generate_suggestions(emotion):
209
+ """Return relevant suggestions based on detected emotions."""
210
  emotion_key = emotion.lower()
211
  suggestions = {
212
+ "joy": [
213
+ ["Relaxation Techniques", "https://www.helpguide.org/mental-health/meditation/mindful-breathing-meditation"],
214
+ ["Dealing with Stress", "https://www.helpguide.org/mental-health/anxiety/tips-for-dealing-with-anxiety"],
215
+ ["Emotional Wellness Toolkit", "https://www.nih.gov/health-information/emotional-wellness-toolkit"],
216
+ ["Relaxation Video", "https://youtu.be/m1vaUGtyo-A"],
217
+ ],
218
+ "anger": [
219
+ ["Emotional Wellness Toolkit", "https://www.nih.gov/health-information/emotional-wellness-toolkit"],
220
+ ["Stress Management Tips", "https://www.health.harvard.edu/health-a-to-z"],
221
+ ["Dealing with Anger", "https://www.helpguide.org/mental-health/anxiety/tips-for-dealing-with-anxiety"],
222
+ ["Relaxation Video", "https://youtu.be/MIc299Flibs"],
223
+ ],
224
+ "fear": [
225
+ ["Mindfulness Practices", "https://www.helpguide.org/mental-health/meditation/mindful-breathing-meditation"],
226
+ ["Coping with Anxiety", "https://www.helpguide.org/mental-health/anxiety/tips-for-dealing-with-anxiety"],
227
+ ["Emotional Wellness Toolkit", "https://www.nih.gov/health-information/emotional-wellness-toolkit"],
228
+ ["Relaxation Video", "https://youtu.be/yGKKz185M5o"],
229
+ ],
230
+ "sadness": [
231
+ ["Emotional Wellness Toolkit", "https://www.nih.gov/health-information/emotional-wellness-toolkit"],
232
+ ["Dealing with Anxiety", "https://www.helpguide.org/mental-health/anxiety/tips-for-dealing-with-anxiety"],
233
+ ["Relaxation Video", "https://youtu.be/-e-4Kx5px_I"],
234
+ ],
235
+ "surprise": [
236
+ ["Managing Stress", "https://www.health.harvard.edu/health-a-to-z"],
237
+ ["Coping Strategies", "https://www.helpguide.org/mental-health/anxiety/tips-for-dealing-with-anxiety"],
238
+ ["Relaxation Video", "https://youtu.be/m1vaUGtyo-A"],
239
+ ],
240
  }
241
+
242
  formatted_suggestions = [
243
  [title, f'<a href="{link}" target="_blank">{link}</a>'] for title, link in suggestions.get(emotion_key, [["No specific suggestions available.", "#"]])
244
  ]
 
263
  popup=f"{place['name']}"
264
  ).add_to(map_)
265
  return professionals, map_._repr_html_()
266
+ return [], ""
267
  except Exception as e:
268
+ print(f"Failed to fetch healthcare professionals: {e}")
269
+ return [], ""
270
 
271
  # Main Application Logic
272
  def app_function(user_input, location, query, symptoms, history):
 
291
  custom_css = """
292
  body {
293
  font-family: 'Roboto', sans-serif;
294
+ background-color: #3c6487;
295
  color: white;
296
  }
 
297
  h1 {
298
  background: #ffffff;
299
  color: #000000;
 
303
  text-align: center;
304
  font-size: 2.5rem;
305
  }
 
306
  textarea, input {
307
  background: transparent;
308
  color: black;
 
313
  outline: none;
314
  border-radius: 8px;
315
  }
 
316
  textarea:focus, input:focus {
317
  background: transparent;
318
  color: black;
319
  border: 2px solid orange;
320
  outline: none;
321
  }
 
322
  .df-container {
323
  background: white;
324
  color: black;
 
330
  height: auto;
331
  overflow-y: auto;
332
  }
 
333
  #suggestions-title {
334
+ text-align: center !important;
335
+ font-weight: bold !important;
336
+ color: white !important;
337
+ font-size: 4.2rem !important;
338
+ margin-bottom: 20px !important;
339
  }
 
 
340
  .gr-button {
341
+ background-color: #ae1c93;
342
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);
343
  transition: background-color 0.3s ease;
344
  }
 
345
  .gr-button:hover {
346
  background-color: #8f167b;
347
  }
 
348
  .gr-button:active {
349
  background-color: #7f156b;
350
  }
 
355
  gr.HTML("<h1>🌟 Well-Being Companion</h1>")
356
 
357
  with gr.Row():
358
+ user_input = gr.Textbox(label="Please Enter Your Message Here", placeholder="Type your message...")
359
+ location = gr.Textbox(label="Your Current Location Here", placeholder="Enter location...")
360
+ query = gr.Textbox(label="Search Health Professionals Nearby", placeholder="What are you looking for...")
361
 
362
  with gr.Row():
363
  symptom1 = gr.Dropdown(choices=["None"] + l1, label="Symptom 1")
 
374
 
375
  gr.Markdown("Suggestions", elem_id="suggestions-title")
376
 
377
+ suggestions = gr.DataFrame(headers=["Title", "Link"])
378
+ professionals = gr.DataFrame(label="Nearby Health Professionals", headers=["Name", "Address"])
379
  map_html = gr.HTML(label="Interactive Map")
380
+ disease_predictions = gr.Textbox(label="Disease Predictions")
381
 
382
  submit.click(
383
  app_function,