ranimeree commited on
Commit
d3164b9
·
verified ·
1 Parent(s): fb1eda8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -49
app.py CHANGED
@@ -1,28 +1,32 @@
1
  import gradio as gr
2
- import dill
3
  import pandas as pd
4
- import xgboost as xgb
5
  import numpy as np
6
- import pickle
7
 
8
- def decode_file(file_path):
9
- with open(file_path, 'rb') as file:
10
- obj = pickle.load(file)
11
- return obj
12
 
13
- model = decode_file('model.pkl')
14
-
15
-
16
- def predict(gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type):
17
 
18
  gender_mapping = {'Male': 1, 'Female': 0}
19
  hypertension_mapping = {'Yes': 1, 'No': 0}
20
  ever_married_mapping = {'Yes': 1, 'No': 0}
21
- work_type_mapping = {'Private': 2, 'Self-employed': 4, 'Govt_job': 3, 'children': 1, 'Never_worked': 0}
 
 
 
 
 
 
22
  heart_disease_mapping = {'Yes': 1, 'No': 0}
23
- smoking_status_mapping = {'formerly smoked': 3, 'smokes': 1, 'never smoked': 2, 'Unknown': 0}
 
 
 
 
 
24
  Residence_type_mapping = {'Urban': 1, 'Rural': 0}
25
 
 
26
  gender = gender_mapping[gender]
27
  hypertension = hypertension_mapping[hypertension]
28
  ever_married = ever_married_mapping[ever_married]
@@ -31,47 +35,55 @@ def predict(gender, age, hypertension, ever_married, work_type, heart_disease, a
31
  smoking_status = smoking_status_mapping[smoking_status]
32
  Residence_type = Residence_type_mapping[Residence_type]
33
 
34
- inputs = [gender, age, hypertension, ever_married, work_type, heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type]
35
- input_labels = ['gender', 'age', 'hypertension', 'ever_married', 'work_type', 'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type']
36
-
37
-
38
- input_df = pd.DataFrame([inputs], columns=input_label)
39
-
40
- prediction = model.predict_proba(input_df)[0][1]
41
-
42
-
43
- result = "The probability to have a stroke{:.2f}%".format(prediction * 100) # to give a percentage
44
- return result
45
-
46
-
47
-
48
-
49
-
50
-
51
- input_labels = [
52
- 'gender', 'age', 'hypertension', 'ever_married', 'work_type',
53
- 'heart_disease', 'avg_glucose_level', 'bmi', 'smoking_status', 'Residence_type'
54
- ]
55
-
56
- #The Interface
57
- iface = gr.Interface(
 
 
58
  fn=predict,
59
  inputs=[
60
- gr.components.Radio(choices=['Female', 'Male'], label="Gender"),
61
- gr.components.Slider(label="Age"),
62
- gr.components.Radio(choices=['Yes', 'No'], label="Hypertension"),
63
- gr.components.Radio(choices=['Yes', 'No'], label="Ever Married"),
64
- gr.components.Radio(choices=['Private', 'Self-employed', 'Govt_job', 'children', 'Never_worked'], label="Work Type"),
65
- gr.components.Radio(choices=['Yes', 'No'], label="Heart Disease"),
66
- gr.components.Number(label="Average Glucose Level"),
67
- gr.components.Slider(label="BMI"),
68
- gr.components.Radio(choices=['formerly smoked', 'never smoked', 'smokes', 'Unknown'], label="Smoking Status"),
69
- gr.components.Radio(choices=['Urban', 'Rural'], label="Residence Type")
 
 
 
 
 
 
70
  ],
71
  outputs='text',
72
  title='Stroke Probability Predictor',
73
  description='Predicts the probability of having a stroke based on input features.'
74
  )
75
 
76
-
77
- iface.launch()
 
1
  import gradio as gr
 
2
  import pandas as pd
 
3
  import numpy as np
4
+ import joblib
5
 
6
+ def predict(gender, age, hypertension, ever_married, work_type,
7
+ heart_disease, avg_glucose_level, bmi, smoking_status, Residence_type):
 
 
8
 
 
 
 
 
9
 
10
  gender_mapping = {'Male': 1, 'Female': 0}
11
  hypertension_mapping = {'Yes': 1, 'No': 0}
12
  ever_married_mapping = {'Yes': 1, 'No': 0}
13
+ work_type_mapping = {
14
+ 'Private': 2,
15
+ 'Self-employed': 4,
16
+ 'Govt_job': 3,
17
+ 'children': 1,
18
+ 'Never_worked': 0
19
+ }
20
  heart_disease_mapping = {'Yes': 1, 'No': 0}
21
+ smoking_status_mapping = {
22
+ 'formerly smoked': 3,
23
+ 'smokes': 1,
24
+ 'never smoked': 2,
25
+ 'Unknown': 0
26
+ }
27
  Residence_type_mapping = {'Urban': 1, 'Rural': 0}
28
 
29
+
30
  gender = gender_mapping[gender]
31
  hypertension = hypertension_mapping[hypertension]
32
  ever_married = ever_married_mapping[ever_married]
 
35
  smoking_status = smoking_status_mapping[smoking_status]
36
  Residence_type = Residence_type_mapping[Residence_type]
37
 
38
+ input_data = {
39
+ 'gender': [gender],
40
+ 'age': [age],
41
+ 'hypertension': [hypertension],
42
+ 'ever_married': [ever_married],
43
+ 'work_type': [work_type],
44
+ 'heart_disease': [heart_disease],
45
+ 'avg_glucose_level': [avg_glucose_level],
46
+ 'bmi': [bmi],
47
+ 'smoking_status': [smoking_status],
48
+ 'Residence_type': [Residence_type]
49
+ }
50
+
51
+ input_df = pd.DataFrame(input_data)
52
+
53
+ try:
54
+ model = joblib.load('model.pkl')
55
+
56
+ prediction = model.predict_proba(input_df)[0][1]
57
+
58
+ result = f"The probability to have a stroke: {prediction:.2%}"
59
+ return result
60
+ except Exception as e:
61
+ return f"Error making prediction: {str(e)}"
62
+
63
+ interface = gr.Interface(
64
  fn=predict,
65
  inputs=[
66
+ gr.Radio(choices=['Female', 'Male'], label="Gender"),
67
+ gr.Slider(minimum=0, maximum=100, label="Age"),
68
+ gr.Radio(choices=['Yes', 'No'], label="Hypertension"),
69
+ gr.Radio(choices=['Yes', 'No'], label="Ever Married"),
70
+ gr.Radio(
71
+ choices=['Private', 'Self-employed', 'Govt_job', 'children', 'Never_worked'],
72
+ label="Work Type"
73
+ ),
74
+ gr.Radio(choices=['Yes', 'No'], label="Heart Disease"),
75
+ gr.Number(label="Average Glucose Level"),
76
+ gr.Slider(minimum=10, maximum=50, label="BMI"),
77
+ gr.Radio(
78
+ choices=['formerly smoked', 'never smoked', 'smokes', 'Unknown'],
79
+ label="Smoking Status"
80
+ ),
81
+ gr.Radio(choices=['Urban', 'Rural'], label="Residence Type")
82
  ],
83
  outputs='text',
84
  title='Stroke Probability Predictor',
85
  description='Predicts the probability of having a stroke based on input features.'
86
  )
87
 
88
+ if __name__ == "__main__":
89
+ interface.launch()