high77 commited on
Commit
a573ec3
·
verified ·
1 Parent(s): 3f0ded1

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +30 -19
src/streamlit_app.py CHANGED
@@ -1,12 +1,12 @@
1
  import streamlit as st
2
  import pandas as pd
3
  import joblib
4
- import numpy as np
5
  import os
6
 
7
- # Load model and scaler
8
- MODEL_PATH = os.path.join(os.path.dirname(__file__), "model", "xgb_model.joblib")
9
- SCALER_PATH = os.path.join(os.path.dirname(__file__), "model", "scaler.joblib")
 
10
 
11
  model = joblib.load(MODEL_PATH)
12
  scaler = joblib.load(SCALER_PATH)
@@ -26,27 +26,38 @@ st.markdown(
26
  """
27
  )
28
 
29
- # Input fields
30
  age = st.number_input("Age", min_value=0, max_value=120, value=30)
 
 
 
 
 
 
31
  gender = st.selectbox("Gender", options=["Male", "Female"])
32
- o2_saturation = st.slider("O2 Saturation (%)", min_value=50.0, max_value=100.0, value=98.0)
33
- bp_systolic = st.number_input("Systolic BP", min_value=50, max_value=200, value=120)
34
- bp_diastolic = st.number_input("Diastolic BP", min_value=30, max_value=130, value=80)
35
- respiratory_rate = st.number_input("Respiratory Rate (breaths/min)", min_value=5, max_value=60, value=18)
36
 
37
- # Map gender to numeric
38
- gender_num = 1 if gender == "Male" else 0
 
 
39
 
40
  input_df = pd.DataFrame([{
41
  "Age": age,
42
- "Gender": gender_num,
43
- "O2_Saturation": o2_saturation,
44
- "BP_Systolic": bp_systolic,
45
- "BP_Diastolic": bp_diastolic,
46
- "Respiratory_Rate": respiratory_rate
 
 
 
 
47
  }])
48
 
49
  if st.button("Predict Hemoglobin Level"):
50
- input_scaled = scaler.transform(input_df)
51
- prediction = model.predict(input_scaled)[0]
52
- st.success(f"Predicted Hemoglobin Level: {prediction:.2f} g/dL")
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import joblib
 
4
  import os
5
 
6
+ # Adjust these paths based on where your model/scaler are in the container
7
+ BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # one level up from src/
8
+ MODEL_PATH = os.path.join(BASE_DIR, "Hb_predict", "tuned_xgboost_model.pkl")
9
+ SCALER_PATH = os.path.join(BASE_DIR, "Hb_predict", "scaler.pkl")
10
 
11
  model = joblib.load(MODEL_PATH)
12
  scaler = joblib.load(SCALER_PATH)
 
26
  """
27
  )
28
 
29
+ # Input fields for features your model expects
30
  age = st.number_input("Age", min_value=0, max_value=120, value=30)
31
+ sbp = st.number_input("Systolic Blood Pressure (SBP)", min_value=50, max_value=200, value=120)
32
+ dbp = st.number_input("Diastolic Blood Pressure (DBP)", min_value=30, max_value=130, value=80)
33
+ heart_rate = st.number_input("Heart Rate", min_value=30, max_value=200, value=75)
34
+ respiratory_rate = st.number_input("Respiratory Rate", min_value=5, max_value=60, value=18)
35
+ temperature_c = st.number_input("Temperature (°C)", min_value=30.0, max_value=45.0, value=36.5)
36
+ oxygen_saturation = st.slider("Oxygen Saturation (%)", min_value=50.0, max_value=100.0, value=98.0)
37
  gender = st.selectbox("Gender", options=["Male", "Female"])
 
 
 
 
38
 
39
+ # Calculate derived features
40
+ gender_encoded = 1 if gender == "Male" else 0
41
+ gender_male = gender_encoded
42
+ pulse_pressure = sbp - dbp
43
 
44
  input_df = pd.DataFrame([{
45
  "Age": age,
46
+ "SBP": sbp,
47
+ "DBP": dbp,
48
+ "HeartRate": heart_rate,
49
+ "RespiratoryRate": respiratory_rate,
50
+ "TemperatureC": temperature_c,
51
+ "OxygenSaturation(%)": oxygen_saturation,
52
+ "Gender_Encoded": gender_encoded,
53
+ "Pulse_Pressure": pulse_pressure,
54
+ "Gender_Male": gender_male
55
  }])
56
 
57
  if st.button("Predict Hemoglobin Level"):
58
+ try:
59
+ input_scaled = scaler.transform(input_df)
60
+ prediction = model.predict(input_scaled)[0]
61
+ st.success(f"Predicted Hemoglobin Level: {prediction:.2f} g/dL")
62
+ except Exception as e:
63
+ st.error(f"Prediction failed: {e}")