Spaces:
Build error
Build error
mohitrajdeo
refactor(app.py): remove commented-out code and unused sections for cleaner codebase
40aa75e
| # st.markdown(""" | |
| # ## Welcome to the **Early Prediction of Health & Lifestyle Diseases**! | |
| # This tool provides **early prediction and analysis** for various health conditions using **Machine Learning & NLP**. | |
| # ### π₯ Available Features: | |
| # - **π©Έ Disease Predictors**: | |
| # - Diabetes Prediction | |
| # - Hypertension Prediction | |
| # - Cardiovascular Disease Prediction | |
| # - Stroke Prediction | |
| # - Asthma Prediction | |
| # - Sleep Health Analysis | |
| # # - **β Checkbox-based Lifestyle Disease Predictor** using **BiomedNLP-PubMedBERT** | |
| # - **π€ Medical Consultant** (Ask health-related questions) | |
| # # - **π§ Mental Health Assessment** | |
| # - **π Data Visualizer** (Analyze trends in health conditions) | |
| # π Select an option from the sidebar to proceed! | |
| # """) | |
| # with st.expander("π Quick Start Guide"): | |
| # st.write(""" | |
| # 1. Select a **health prediction model** from the sidebar. | |
| # 2. Enter your details in the input fields. | |
| # 3. Click **Predict** to get your result. | |
| # 4. View personalized **health insights & recommendations**. | |
| # """) | |
| # # Disclaimer Section | |
| # st.markdown("---") | |
| # # st.markdown(""" | |
| # # **β οΈ Disclaimer:** This application has been developed using **real-world healthcare datasets** sourced from Kaggle: | |
| # # - [Stroke Prediction Dataset](http://kaggle.com/code/chanchal24/stroke-prediction-using-python/input?select=healthcare-dataset-stroke-data.csv) | |
| # # - [Asthma Analysis & Prediction](https://www.kaggle.com/code/bryamblasrimac/asthma-eda-prediction-f2score-85/input) | |
| # # - [Diabetes Dataset](https://www.kaggle.com/datasets/mathchi/diabetes-data-set) | |
| # # - [Cardiovascular Disease Dataset](https://www.kaggle.com/datasets/sulianova/cardiovascular-disease-dataset) | |
| # # - [Sentiment Analysis for Mental Health](https://www.kaggle.com/datasets/suchintikasarkar/sentiment-analysis-for-mental-health) | |
| # # - [Sleep Health Analysis](https://www.kaggle.com/datasets/uom190346a/sleep-health-and-lifestyle-dataset) | |
| # # \ | |
| # st.markdown(""" | |
| # The predictions are generated using **machine learning models** trained on these datasets, incorporating **evaluation metrics and graphical insights** to enhance interpretability. | |
| # However, this tool has **not undergone clinical validation** and should be used **for informational and educational purposes only**. It is not intended to serve as a substitute for professional medical diagnosis or treatment. Always consult a qualified healthcare provider for medical advice. | |
| # """) | |
| # if selected == 'Medical Consultant': | |
| # st.title("π©Ί Medical Consultant Chatbot") | |
| # st.markdown("### Discuss Your Health Concerns with Our AI-powered Chatbot") | |
| # st.write("Ask about **Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health.**") | |
| # genai.configure(api_key="AIzaSyAwyi9c5OdvLoWrv5lFi1jZDEYwuprQAKE") | |
| # # Custom Styling | |
| # st.markdown(""" | |
| # <style> | |
| # .prompt-box { | |
| # background-color: #000000; | |
| # padding: 12px; | |
| # border-radius: 8px; | |
| # font-size: 14px; | |
| # font-family: sans-serif; | |
| # margin-bottom: 10px; | |
| # border: 1px solid #dee2e6; | |
| # text-align: center; | |
| # } | |
| # </style> | |
| # """, unsafe_allow_html=True) | |
| # st.markdown("#### π‘ Common Health Queries") | |
| # prompt_options = [ | |
| # ("Diabetes β Diet", "What foods should I eat if I have diabetes?"), | |
| # ("Diabetes β Exercise", "What type of workouts help control blood sugar levels?"), | |
| # ("Asthma β Triggers", "What are common asthma triggers?"), | |
| # ("Asthma β Treatment", "What are the best medications for asthma?"), | |
| # ("Stroke β Symptoms", "What are the early warning signs of a stroke?"), | |
| # ("Stroke β Prevention", "How can I reduce my risk of stroke?"), | |
| # ("Cardiovascular β Heart Health", "How can I reduce my risk of heart disease?"), | |
| # ("Cardiovascular β Blood Pressure", "What lifestyle changes can lower high blood pressure?"), | |
| # ("Mental Health β Stress Management", "How can I manage stress effectively?"), | |
| # ("Mental Health β Sleep Disorders", "What are the causes and treatments for sleep disorders?") | |
| # ] | |
| # # Display prompts in two columns (2 prompts per row) | |
| # cols = st.columns(2) | |
| # for i in range(0, len(prompt_options), 2): | |
| # with cols[0]: | |
| # if i < len(prompt_options): | |
| # label, prompt = prompt_options[i] | |
| # st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True) | |
| # with cols[1]: | |
| # if i+1 < len(prompt_options): | |
| # label, prompt = prompt_options[i+1] | |
| # st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True) | |
| # # Initialize chat history if not present | |
| # if "chat_history" not in st.session_state: | |
| # st.session_state.chat_history = [] | |
| # # Display previous chat history | |
| # for message in st.session_state.chat_history: | |
| # with st.chat_message(message["role"]): | |
| # st.markdown(message["content"]) | |
| # # User input field | |
| # user_prompt = st.chat_input("Ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health...") | |
| # # List of allowed topics | |
| # allowed_keywords = ["diabetes", "asthma", "stroke", "cardiovascular", "heart", "blood pressure", | |
| # "mental health", "depression", "stress", "cholesterol", "sleep disorders"] | |
| # if user_prompt: | |
| # # Display user message | |
| # st.chat_message("user").markdown(user_prompt) | |
| # st.session_state.chat_history.append({"role": "user", "content": user_prompt}) | |
| # # Restriction: Only process if related to health topics | |
| # if any(keyword in user_prompt.lower() for keyword in allowed_keywords): | |
| # model = genai.GenerativeModel("gemini-2.0-flash") | |
| # response = model.generate_content(user_prompt) | |
| # if response and hasattr(response, "text"): | |
| # assistant_response = response.text | |
| # else: | |
| # assistant_response = "I'm sorry, I couldn't generate a response." | |
| # st.session_state.chat_history.append({"role": "assistant", "content": assistant_response}) | |
| # # Display assistant's response | |
| # with st.chat_message("assistant"): | |
| # st.markdown(assistant_response) | |
| # else: | |
| # # Restriction message | |
| # restriction_msg = "**β οΈ This chatbot only responds to health-related topics.**\nPlease ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health." | |
| # st.session_state.chat_history.append({"role": "assistant", "content": restriction_msg}) | |
| # with st.chat_message("assistant"): | |
| # st.markdown(restriction_msg) | |
| # if selected == 'Checkbox-to-disease-predictor': | |
| # # Load transformer model | |
| # classifier = pipeline("zero-shot-classification", model="microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract") | |
| # # Use a pipeline as a high-level helper | |
| # # from transformers import pipeline | |
| # # pipe = pipeline("fill-mask", model="microsoft/BiomedNLP-BiomedBERT-base-uncased-abstract-fulltext") | |
| # # Define symptoms for each disease | |
| # diseases = { | |
| # "Diabetes": ["Frequent urination", "Increased thirst", "Unexplained weight loss", "Fatigue", "Blurred vision"], | |
| # "Hypertension": ["Headache", "Dizziness", "Chest pain", "Shortness of breath", "Nosebleeds"], | |
| # "Obesity": ["Excess body fat", "Breathlessness", "Joint pain", "Increased sweating", "Low energy levels"], | |
| # "Cardiovascular Disease": ["Chest pain", "Shortness of breath", "Dizziness", "Irregular heartbeat", "Fatigue"], | |
| # "COPD": ["Chronic cough", "Shortness of breath", "Wheezing", "Chest tightness", "Frequent respiratory infections"], | |
| # "Liver Disease": ["Jaundice", "Abdominal pain", "Swelling in legs", "Chronic fatigue", "Nausea"], | |
| # "Kidney Disease": ["Swelling in legs", "Fatigue", "Loss of appetite", "Changes in urination", "Muscle cramps"], | |
| # "Metabolic Syndrome": ["High blood sugar", "High blood pressure", "Increased waist size", "High cholesterol", "Fatigue"], | |
| # "Osteoarthritis": ["Joint pain", "Stiffness", "Swelling", "Reduced flexibility", "Bone spurs"], | |
| # "Gastroesophageal Reflux Disease": ["Heartburn", "Acid reflux", "Difficulty swallowing", "Chronic cough", "Sore throat"], | |
| # "Depression": ["Persistent sadness", "Loss of interest", "Sleep disturbances", "Fatigue", "Difficulty concentrating"], | |
| # "Sleep Apnea": ["Loud snoring", "Pauses in breathing", "Daytime drowsiness", "Morning headaches", "Irritability"], | |
| # } | |
| # # Streamlit UI | |
| # st.title("π©Ί Hybrid Symptom Checker") | |
| # st.write("Select your symptoms and get AI-powered predictions!") | |
| # selected_symptoms = [] | |
| # # Create symptom selection with markdown separation and three columns | |
| # disease_keys = list(diseases.keys()) | |
| # for i in range(0, len(disease_keys), 3): | |
| # cols = st.columns(3) | |
| # for j in range(3): | |
| # if i + j < len(disease_keys): | |
| # disease = disease_keys[i + j] | |
| # with cols[j]: | |
| # st.markdown(f"### {disease}") | |
| # for symptom in diseases[disease]: | |
| # if st.checkbox(symptom, key=f"{disease}_{symptom}"): | |
| # selected_symptoms.append(symptom) | |
| # if st.button("π Predict Disease"): | |
| # if selected_symptoms: | |
| # user_input = ", ".join(selected_symptoms) # Convert symptoms to text | |
| # # 1οΈβ£ Custom Symptom Matching Approach | |
| # disease_scores = {disease: 0 for disease in diseases.keys()} | |
| # for disease, symptoms in diseases.items(): | |
| # matches = sum(symptom in selected_symptoms for symptom in symptoms) | |
| # disease_scores[disease] = matches / len(symptoms) # Normalize by symptom count | |
| # # Normalize to percentage | |
| # symptom_match_scores = {d: round(score * 100, 2) for d, score in disease_scores.items()} | |
| # # 2οΈβ£ AI Model Prediction | |
| # ai_results = classifier(user_input, list(diseases.keys())) | |
| # ai_scores = {ai_results["labels"][i]: round(ai_results["scores"][i] * 100, 2) for i in range(len(ai_results["labels"]))} | |
| # # 3οΈβ£ Hybrid Score Calculation (Average of Both Scores) | |
| # final_scores = {} | |
| # for disease in diseases.keys(): | |
| # symptom_score = symptom_match_scores.get(disease, 0) | |
| # ai_score = ai_scores.get(disease, 0) | |
| # final_scores[disease] = round((symptom_score + ai_score) / 2, 2) # Averaging | |
| # # Sort by final score | |
| # sorted_final_scores = sorted(final_scores.items(), key=lambda x: x[1], reverse=True) | |
| # # Display results | |
| # st.write("### π¬ Possible Conditions (Hybrid Model Prediction):") | |
| # for disease, score in sorted_final_scores: | |
| # if score > 0: | |
| # st.write(f"π©Ί {disease}: {score}% match") | |
| # else: | |
| # st.write("β οΈ Please select at least one symptom.") | |