File size: 4,053 Bytes
44867fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import streamlit as st
import pandas as pd
import requests
import os
from io import StringIO
import datetime

# Set page configuration
st.set_page_config(page_title="Predict", page_icon="🔮",  layout="wide")


st.title("Predict Sepsis")


def select_model():
    col1, col2 = st.columns(2)
    with col1:
        choice = st.selectbox('Select a model', options=['xgboost', 'random_forest'], key='select_model')
    with col2:
        pass

    # if st.session_state['selected_model'] == 'Xgboost':
    #     pipeline = xgboost_pipeline()
    # else:
    #     pipeline = load_random_forest_pipeline()

    # encoder = joblib.load('models/encoder.joblib')
    return choice


def make_prediction(): 
    selected_model = st.session_state['select_model']
    age = st.session_state['age']
    insurance = 1 if st.session_state['insurance'] == 'Yes' else 0
    m11 = st.session_state['m11']
    pr = st.session_state['pr']
    prg = st.session_state['prg']
    ts = st.session_state['ts']
    pl = st.session_state['pl']
    sk = st.session_state['sk']
    bd2 = st.session_state['bd2']

    base_url = 'https://gabcares-team-curium.hf.space/'
    url =  base_url + f"{ 'xgboost_prediction' if selected_model=='xgboost' else 'random_forest_prediction'}"


    data = {'PRG': prg, 'PL': pl, 'PR': pr,'SK': sk, 'TS': ts, 'M11': m11, 'BD2': bd2, 'Age': age, 'Insurance': insurance}
    # Send POST request with JSON data using the json parameter
    response_status = requests.get(base_url)

    if (response_status.status_code == 200):
        response = requests.post(url, json=data,timeout=30)
        pred_prob = (response.json()['result'])
        prediction = pred_prob['prediction']
        probability = pred_prob['probability']

        st.session_state['prediction'] = prediction
        st.session_state['probability'] = probability
    else:
        st.write('Unable to connect to the server.')


# Creating the form
def display_form():
    select_model()

    with st.form('input_features'):

        col1, col2 = st.columns(2)
        with col1:
            st.write('### Patient Demographics')
            age = st.number_input('Age', min_value=0, max_value=100, step=1, key = 'age')
            insurance = st.selectbox('Insurance', options = ['Yes', 'No'], key = 'insurance')

            st.write('### Vital Signs')
            m11 = st.number_input('BMI', min_value=10.0, format="%.2f",step = 1.00, key = 'm11')
            pr = st.number_input('Blood Pressure', min_value=10.0, format="%.2f",step = 1.00, key = 'pr')
            prg = st.number_input('PRG(plasma glucose)', min_value=10.0, format="%.2f",step = 1.00, key = 'prg')

        with col2:
            st.write('### Blood Work')
            pl = st.number_input('PL(Blood Work Result 1)', min_value=10.0, format="%.2f",step = 1.00, key = 'pl')
            sk = st.number_input('SK(Blood Work Result 2)', min_value=10.0, format="%.2f",step = 1.00, key = 'sk')
            ts = st.number_input('TS(Blood Work Result 3)', min_value=10.0, format="%.2f",step = 1.00, key = 'ts')
            bd2 = st.number_input('BD2(Blood Work Result 4)', min_value=10.0, format="%.2f",step = 1.00, key = 'bd2')
        
        st.form_submit_button('Submit', on_click=make_prediction)
    

if __name__ == '__main__':

    display_form()

    final_prediction = st.session_state.get('prediction')
    final_probability = st.session_state.get('probability')

    if final_prediction is None:
        st.write('Predictions show here!')
        st.divider()
    else:
        if final_prediction.lower() == 'positive':
            st.markdown(f'### Patient is likely to develop sepsis😞.')
            st.markdown(f'## Probability: {final_probability:.2f}%')
            
        else:
            # st.markdown(f'## Sepsis: {final_prediction}')
            st.markdown(f'### Patient is unlikely to develop sepsis😊.')
            st.markdown(f'## Probability: {final_probability:.2f}%')