import streamlit as st import pickle import pandas as pd import numpy as np # Page Title with Style # st.title("🩸 Sepsis Prediction App") # Page Title with Style (Centered) st.markdown( f"""

🩸 Sepsis Prediction App

""", unsafe_allow_html=True ) # Welcome Message with Style (Centered) st.markdown( f"""

👋 Welcome to the Sepsis Prediction App!

""", unsafe_allow_html=True ) # Sepsis Information st.markdown( """ **Sepsis** is a critical medical condition triggered by the body's extreme response to an infection. It can lead to organ failure and, if not detected early, poses a serious threat to life. """ ) # Link to WHO Fact Sheet on Sepsis st.markdown("🔗 **Learn more about sepsis from [World Health Organization (WHO)](https://www.who.int/news-room/fact-sheets/detail/sepsis#:~:text=Overview,problems%20are%20at%20higher%20risk.)**") st.markdown("---") st.image("https://dinizululawgroup.com/wp-content/uploads/2020/07/news.jpg", width=700) # Additional Information for Sample Prediction st.markdown("## Sample Prediction with Training Dataset Information") st.write("To make a sample prediction, you can refer to the training dataset information available in the sidebar.") st.write("Enter the medical data in the input fields below, then click 'Predict Sepsis', and get the patient's Sepsis prediction") # About Section with Style st.sidebar.title("â„šī¸ About") st.sidebar.info( "This app predicts sepsis onset using machine learning on medical data, aiding timely intervention by healthcare professionals. " "It utilizes a model trained on a sepsis dataset." ) # Load The Train Dataset train_df = pd.read_csv("Train.csv", index_col=None) # Training Dataset Information in the sidebar st.sidebar.markdown("📊 **Training Dataset Information:**") st.sidebar.write("The model is trained on a sepsis dataset. Here's an overview of the dataset:") st.sidebar.write(train_df.head()) # Load the model and key components with open('model_and_key_components.pkl', 'rb') as file: loaded_components = pickle.load(file) loaded_model = loaded_components['model'] loaded_scaler = loaded_components['scaler'] # Data Fields data_fields = { "**PRG**": "**Number of Pregnancies (applicable only to females)**\n - The total number of pregnancies a female patient has experienced.", "**PL**": "**Plasma Glucose Concentration (mg/dL)**\n - The concentration of glucose in the patient's blood). It provides insights into the patient's blood sugar levels.", "**PR**": "**Diastolic Blood Pressure (mm Hg)**\n - The diastolic blood pressure, representing the pressure in the arteries when the heart is at rest between beats.", "**SK**": "**Triceps Skinfold Thickness (mm)**\n - The thickness of the skinfold on the triceps, measured in millimeters (mm). This measurement is often used to assess body fat percentage.", "**TS**": "**2-hour Serum Insulin (mu U/ml)**\n - The level of insulin in the patient's blood two hours after a meal, measured in micro international units per milliliter (mu U/ml).", "**M11**": "**Body Mass Index (BMI) (weight in kg / {(height in m)}^2)**\n - BMI provides a standardized measure that helps assess the degree of body fat and categorizes individuals into different weight status categories, such as underweight, normal weight, overweight, and obesity.", "**BD2**": "**Diabetes pedigree function (mu U/ml)**\n - The function provides information about the patient's family history of diabetes.", "**Age**": "**Age of the Patient (years)**\n - Age is an essential factor in medical assessments and can influence various health outcomes." } # Organize input fields into two columns col1, col2 = st.columns(2) # Initialize input_data dictionary input_data = {} # Function to preprocess input data def preprocess_input_data(input_data): numerical_cols = ['PRG', 'PL', 'PR', 'SK', 'TS', 'M11', 'BD2', 'Age'] input_data_scaled = loaded_scaler.transform([list(input_data.values())]) return pd.DataFrame(input_data_scaled, columns=numerical_cols) # Function to make predictions def make_predictions(input_data_scaled_df): y_pred = loaded_model.predict(input_data_scaled_df) sepsis_mapping = {0: 'Negative', 1: 'Positive'} return sepsis_mapping[y_pred[0]] # Input Data Fields in two columns with col1: input_data["PRG"] = st.slider("PRG: Number of Pregnancies", 0, 20, 0) input_data["PL"] = st.number_input("PL: Plasma Glucose Concentration (mg/dL)", value=0.0) input_data["PR"] = st.number_input("PR: Diastolic Blood Pressure (mm Hg)", value=0.0) input_data["SK"] = st.number_input("SK: Triceps Skinfold Thickness (mm)", value=0.0) with col2: input_data["TS"] = st.number_input("TS: 2-Hour Serum Insulin (mu U/ml)", value=0.0) input_data["M11"] = st.number_input("M11: Body Mass Index (BMI)", value=0.0) input_data["BD2"] = st.number_input("BD2: Diabetes Pedigree Function (mu U/ml)", value=0.0) input_data["Age"] = st.slider("Age: Age of the patient (years)", 0, 100, 0) # Predict Button with Style if st.button("🔮 Predict Sepsis"): try: input_data_scaled_df = preprocess_input_data(input_data) sepsis_status = make_predictions(input_data_scaled_df) st.success(f"The predicted sepsis status is: {sepsis_status}") except Exception as e: st.error(f"An error occurred: {e}") # Display Data Fields and Descriptions st.sidebar.title("🔍 Data Fields") for field, description in data_fields.items(): st.sidebar.markdown(f"{field}: {description}")