Spaces:
Sleeping
Sleeping
| import os | |
| import streamlit as st | |
| import pandas as pd | |
| import requests | |
| news_api_key = "fe1e6bcbbf384b3e9220a7a1138805e0" # Replace with your News API key | |
| def load_data(file): | |
| return pd.read_csv(file) | |
| def fetch_health_articles(query): | |
| # Fetch mental health articles related to the query | |
| url = f"https://newsapi.org/v2/everything?q={query}&apiKey={news_api_key}" | |
| response = requests.get(url) | |
| if response.status_code == 200: | |
| articles = response.json().get('articles', []) | |
| return articles[:5] # Return the top 5 articles | |
| else: | |
| st.error("Failed to fetch news articles. Please check your API key or try again later.") | |
| return [] | |
| def provide_advice_from_articles(data): | |
| advice = [] | |
| # Use user data to fetch relevant health advice based on depression, anxiety, stress, etc. | |
| if data['depression'] > 7: | |
| advice.append("Searching for articles related to high depression...") | |
| articles = fetch_health_articles("high depression") | |
| for article in articles: | |
| advice.append(f"**{article['title']}**\n{article['description']}\n[Read more]({article['url']})") | |
| elif data['anxiety_level'] > 7: | |
| advice.append("Searching for articles related to high anxiety...") | |
| articles = fetch_health_articles("high anxiety") | |
| for article in articles: | |
| advice.append(f"**{article['title']}**\n{article['description']}\n[Read more]({article['url']})") | |
| elif data['stress_level'] > 7: | |
| advice.append("Searching for articles related to high stress...") | |
| articles = fetch_health_articles("high stress") | |
| for article in articles: | |
| advice.append(f"**{article['title']}**\n{article['description']}\n[Read more]({article['url']})") | |
| else: | |
| advice.append("Searching for general health advice articles...") | |
| articles = fetch_health_articles("mental health") | |
| for article in articles: | |
| advice.append(f"**{article['title']}**\n{article['description']}\n[Read more]({article['url']})") | |
| return advice | |
| def main(): | |
| # Set page config for a professional look | |
| st.set_page_config( | |
| page_title="Student Well-being Advisor", | |
| page_icon="π", | |
| layout="wide", | |
| initial_sidebar_state="expanded", | |
| ) | |
| # Sidebar | |
| st.sidebar.title("Navigation") | |
| st.sidebar.write("Use the sidebar to navigate through the app.") | |
| st.sidebar.markdown("### π Upload Data") | |
| st.sidebar.write("Start by uploading your dataset for analysis.") | |
| st.sidebar.markdown("### π Analysis & Advice") | |
| st.sidebar.write("Get detailed insights and personalized advice.") | |
| # Main Content | |
| st.title("π Student Well-being Advisor") | |
| st.subheader("Analyze data and provide professional mental health recommendations.") | |
| st.write( | |
| """ | |
| This app helps identify areas of concern in students' well-being and provides personalized advice based on their responses. | |
| """ | |
| ) | |
| # File Upload | |
| st.markdown("## π Upload Your Dataset") | |
| uploaded_file = st.file_uploader("Upload your dataset (CSV)", type=["csv"]) | |
| if uploaded_file: | |
| df = load_data(uploaded_file) | |
| st.success("Dataset uploaded successfully!") | |
| st.write("### Dataset Preview:") | |
| st.dataframe(df.head()) | |
| # Validate dataset columns | |
| required_columns = [ | |
| 'anxiety_level', 'self_esteem', 'mental_health_history', 'depression', | |
| 'headache', 'blood_pressure', 'sleep_quality', 'breathing_problem', | |
| 'noise_level', 'living_conditions', 'safety', 'basic_needs', | |
| 'academic_performance', 'study_load', 'teacher_student_relationship', | |
| 'future_career_concerns', 'social_support', 'peer_pressure', | |
| 'extracurricular_activities', 'bullying', 'stress_level' | |
| ] | |
| missing_columns = [col for col in required_columns if col not in df.columns] | |
| if missing_columns: | |
| st.error(f"The uploaded dataset is missing the following required columns: {', '.join(missing_columns)}") | |
| else: | |
| # Handle missing values in the dataset | |
| if df.isnull().values.any(): | |
| st.warning("The dataset contains missing values. Rows with missing values will be skipped.") | |
| df = df.dropna() | |
| # Tabs for better organization | |
| tab1, tab2, tab3 = st.tabs(["π Home", "π Analysis", "π° Resources"]) | |
| with tab1: | |
| st.write("### Welcome to the Well-being Advisor!") | |
| st.write( | |
| """ | |
| Use the tabs to explore data, generate advice, and access mental health resources. | |
| """ | |
| ) | |
| with tab2: | |
| st.markdown("### π Select a Row for Analysis") | |
| selected_row = st.selectbox( | |
| "Select a row (based on index) to analyze:", | |
| options=df.index, | |
| format_func=lambda x: f"Row {x} - Stress Level: {df.loc[x, 'stress_level']}, Anxiety: {df.loc[x, 'anxiety_level']} (Depression: {df.loc[x, 'depression']})", | |
| ) | |
| # Extract data for the selected row | |
| row_data = df.loc[selected_row].to_dict() | |
| # Show extracted details | |
| st.write("### Selected User Details:") | |
| st.json(row_data) | |
| # Fetch and display health advice from articles | |
| st.subheader("π Health Advice Based on Articles") | |
| advice = provide_advice_from_articles(row_data) | |
| if advice: | |
| for i, tip in enumerate(advice, 1): | |
| st.write(f"π **{i}.** {tip}") | |
| else: | |
| st.warning("No specific advice available based on this user's data.") | |
| with tab3: | |
| # Fetch and display mental health articles | |
| st.subheader("π° Mental Health Resources") | |
| articles = fetch_health_articles("mental health") | |
| if articles: | |
| for article in articles: | |
| st.write(f"**{article['title']}**") | |
| st.write(f"{article['description']}") | |
| st.write(f"[Read more]({article['url']})") | |
| else: | |
| st.write("No articles available at the moment.") | |
| if __name__ == "__main__": | |
| main() | |