--- a +++ b/app.py @@ -0,0 +1,254 @@ +import pickle +from sklearn.preprocessing import LabelEncoder +import pandas as pd +import streamlit as st +import requests +from streamlit_lottie import st_lottie +from PIL import Image + + +st.set_page_config(page_title="Preventive Healthcare System ", page_icon="", layout="wide") + +def load_lottie_url(url): + r = requests.get(url) + if r.status_code != 200: + return None + return r.json() + +#Use Local CSS + + +def local_css(file_name): + with open(file_name) as f: + st.markdown(f"<style>{f.read()}</style>",unsafe_allow_html=True) + +local_css("style/style.css") + +def load_pickle_model(file_path): + try: + with open(file_path, 'rb') as file: + model = pickle.load(file) + print(f"Model loaded successfully from {file_path}") + return model + except FileNotFoundError: + print(f"Error: The file {file_path} was not found.") + except Exception as e: + print(f"An error occurred while loading the model: {e}") + +def get_risk_level(prob): + if prob < 0.3: + return "Low" + elif 0.3 <= prob < 0.7: + return "Moderate" + else: + return "High" + +def generate_feedback(diabetes_prob, heart_disease_prob): + feedback = {} + + # Risk assessment + feedback['diabetes'] = f"Diabetes Risk: {get_risk_level(diabetes_prob)}. Probability: {diabetes_prob:.2f}" + feedback['heart_disease'] = f"Heart Disease Risk: {get_risk_level(heart_disease_prob)}. Probability: {heart_disease_prob:.2f}" + + # Suggestions based on risk levels + if get_risk_level(diabetes_prob) == 'High': + feedback['diabetes_advice'] = "You are at a high risk for diabetes. Consider regular checkups, maintaining a balanced diet, and exercising regularly." + elif get_risk_level(diabetes_prob) == 'Moderate': + feedback['diabetes_advice'] = "You have a moderate risk of diabetes. It's recommended to monitor your sugar intake and stay active." + + if get_risk_level(heart_disease_prob) == 'High': + feedback['heart_disease_advice'] = "You are at a high risk for heart disease. Regular cardiovascular exercise and a heart-healthy diet are recommended." + + return feedback + + +# --- Load assets --- +lottie_coding = load_lottie_url("https://lottie.host/d03b4e9d-a139-4df4-8f84-fb4c358891e9/gRBlHPnlpx.json") +img_contact_form = Image.open("images\\healthcare.webp") +# img_lottie_animation = Image.open("images\\pic3.jpeg") + + +# --- Header section --- +with st.container(): + st.title("Test How Healthy You Are ! ") + st.title("Let's check with us ") + st.write("") + st.write("") + +# --- What I Do --- +with st.container(): + st.write("---") + left_column, right_column = st.columns(2) + + with left_column: + st.header("AI Power Predictive healthcare System ") + st.write("##") + st.write(""" + An AI-powered solution that proactively identifies individuals at risk +of developing chronic diseases such as diabetes, heart disease, or obesity. +The system should provide personalized recommendations for preventive +care based on genetic, lifestyle, and medical data. + """) + + + with right_column: + st_lottie(lottie_coding, height=300, key="coding") + +#---services--- + +with st.container(): + st.write("---") + st.header("Our Services") + st.write("##") + image_column, text_column = st.columns((1, 2)) + # image_column,text_column=st.columns((1,2)) + with image_column: + st.image(img_contact_form) + with text_column: + st.subheader("We Specialize In Managing Chronic Diseases and Promoting Healthy Lifestyles") + st.write( + """ + Our healthcare services focus on helping you manage and prevent chronic diseases while promoting a healthy lifestyle. Our areas of specialization include: + - **Diabetes Management**: Comprehensive care to monitor and control blood sugar levels. + - **Heart Disease Prevention**: Lifestyle recommendations and medical interventions to reduce heart disease risk. + - **Obesity Management**: Personalized plans to achieve and maintain a healthy weight. + - **Lifestyle Modifications**: Guidance on exercise, diet, and wellness to promote overall health and well-being. + """ + ) + + + + +# with text_column: +# st.subheader("Integrate lottie animations inside your streamlit app") +# st.write( +# """ +# jhxsyfdahF +# HDJGhfkhFyyfTF +# IJHDGGFDyJFklgj +# HDYUGFEUHF +# JgdfdHKD +# gwyuqwjkJdgd + +# """ +# ) +# st.markdown("[Watch Video...](https://youtu.be/TXS0itGoINE)") + +# ---container--- + +# with st.container(): +# st.write("---") +# st.header("Get in Touch with us") +# st.write("#") + +# contact_form=""" + +# <form action="https://formsubmit.co/nimishajain2206@email.com" method="POST"> +# <input type ="hidden " name ="_captcha" value=""> +# <input type="text" name="name" palceholder ="Your Name"required> +# <input type="email" name="email" placeholder ="Your Email" required> +# <textarea name ="message " placeholder ="Your message here" required></textarea> +# <button type="submit">Send</button> +# </form> +# """ + +# left_column,right_column=st.columns(2) +# with left_column: +# st.markdown(contact_form,unsafe_allow_html=True) +# with right_column: +# st.empty() + + +lbl_encoders = load_pickle_model('model\\label_encoders.pkl') +lr_dt = load_pickle_model('model\\lr_dt.pkl') +lr_ht = load_pickle_model('model\\lr_ht.pkl') +lr_ob = load_pickle_model('model\\lr_ob.pkl') + +# Define categorical columns +categorical_columns = ['General_Health', 'Checkup', 'Exercise', 'Depression', + 'Arthritis', 'Sex', 'Age_Category', 'Smoking_History'] + +# Define the columns +columns = ['General_Health', 'Checkup', 'Exercise', 'Depression', 'Arthritis', + 'Sex', 'Age_Category', 'Height_(cm)', 'Weight_(kg)', 'BMI', + 'Smoking_History', 'Alcohol_Consumption', 'Fruit_Consumption', + 'Green_Vegetables_Consumption', 'FriedPotato_Consumption'] + +# Create the form in Streamlit +st.title("Health Data Prediction Form") + +with st.form(key="input_form"): + # Collect input values from the user + general_health = st.selectbox('General Health', ['Poor', 'Fair', 'Good', 'Very Good', 'Excellent']) + checkup = st.selectbox('Checkup', ['Within the past year', 'Within the past 2 years', '5 or more years ago', 'Never']) + exercise = st.selectbox('Exercise', ['Yes', 'No']) + depression = st.selectbox('Depression', ['Yes', 'No']) + arthritis = st.selectbox('Arthritis', ['Yes', 'No']) + sex = st.selectbox('Sex', ['Male', 'Female']) + age_category = st.selectbox('Age Category', ['18-24', '25-29', '30-34', '35-39', '40-44', '45-49', '50-54', + '55-59', '60-64', '65-69', '70-74', '75-79', '80 or older']) + height = st.number_input('Height (cm)', min_value=100.0, max_value=250.0, step=1.0) + weight = st.number_input('Weight (kg)', min_value=20.0, max_value=200.0, step=0.1) + bmi = st.number_input('BMI', min_value=10.0, max_value=60.0, step=0.1) + smoking_history = st.selectbox('Smoking History', ['Yes', 'No']) + alcohol_consumption = st.number_input('Alcohol Consumption', min_value=0.0, max_value=100.0, step=0.1) + fruit_consumption = st.number_input('Fruit Consumption (grams/day)', min_value=0.0, max_value=500.0, step=1.0) + green_vegetables_consumption = st.number_input('Green Vegetables Consumption (grams/day)', min_value=0.0, max_value=500.0, step=1.0) + fried_potato_consumption = st.number_input('Fried Potato Consumption (grams/day)', min_value=0.0, max_value=500.0, step=1.0) + + # Submit button + submit_button = st.form_submit_button(label="Submit") + +if submit_button: + # Define the input values + input_values = { + 'General_Health': general_health, + 'Checkup': checkup, + 'Exercise': exercise, + 'Depression': depression, + 'Arthritis': arthritis, + 'Sex': sex, + 'Age_Category': age_category, + 'Height_(cm)': height, + 'Weight_(kg)': weight, + 'BMI': bmi, + 'Smoking_History': smoking_history, + 'Alcohol_Consumption': alcohol_consumption, + 'Fruit_Consumption': fruit_consumption, + 'Green_Vegetables_Consumption': green_vegetables_consumption, + 'FriedPotato_Consumption': fried_potato_consumption + } + + # Create a DataFrame from the input values + + input_df = pd.DataFrame([input_values]) + + # Encode categorical columns using the stored LabelEncoders + for column in categorical_columns: + if column in input_df.columns: + input_df[column] = lbl_encoders[column].transform(input_df[column].astype(str)) + + # Display the input DataFrame after encoding + # st.write("Encoded Input DataFrame:") + # st.write(input_df) + + # Predict using the model + pred_dt = lr_dt.predict_proba(input_df)[0] + pred_ht = lr_ht.predict_proba(input_df)[0] + pred_ob = lr_ob.predict(input_df) + print(pred_dt) + print(pred_ht) + print(pred_ob) + + # Display the prediction result + st.write(f"Diabetes: {pred_dt[0]}") + st.write(f"Hearts Decises: {pred_ht[0]}") + st.write(f"Obesitiy: {pred_ob[0]}") + st.title("Health Risk Assessment") + feedback = feedback = generate_feedback(pred_dt[0], pred_ht[0]) + + # Display the feedback + for key, value in feedback.items(): + st.write(value) + +