import streamlit as st
from textblob import TextBlob
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import os
# CSV to store journal data
DATA_FILE = "journal_data.csv"
# Function to analyze sentiment
def analyze_sentiment(text):
blob = TextBlob(text)
return blob.sentiment.polarity # -1 to 1
# Load data
def load_data():
if os.path.exists(DATA_FILE):
return pd.read_csv(DATA_FILE, parse_dates=['date'])
else:
return pd.DataFrame(columns=["date", "entry", "sentiment"])
# Save data
def save_data(entry, sentiment):
new_data = pd.DataFrame({
"date": [datetime.now().date()],
"entry": [entry],
"sentiment": [sentiment]
})
data = load_data()
data = pd.concat([data, new_data], ignore_index=True)
data.to_csv(DATA_FILE, index=False)
# Weekly sentiment plot
def plot_sentiment(data):
recent = data[data['date'] >= (datetime.now().date() - timedelta(days=6))]
daily_avg = recent.groupby('date')['sentiment'].mean().reset_index()
plt.figure(figsize=(10, 4))
plt.plot(daily_avg['date'], daily_avg['sentiment'], marker='o', linestyle='-')
plt.title("🧠Weekly Mental Wellness Trend")
plt.xlabel("Date")
plt.ylabel("Sentiment Score")
plt.ylim(-1, 1)
plt.axhline(0, color='gray', linestyle='--')
plt.grid(True)
st.pyplot(plt)
# ---------------- STREAMLIT APP ----------------
st.set_page_config(page_title="Mental Health Journal Analyzer", layout="centered")
st.title("🧠Mental Health Journal Analyzer")
st.markdown("Write your daily mood journal and analyze your wellness trend.")
# Input
journal_entry = st.text_area("Write today's journal entry:", height=150)
if st.button("Analyze & Save"):
if journal_entry.strip():
sentiment = analyze_sentiment(journal_entry)
save_data(journal_entry, sentiment)
st.success(f"Entry saved! Sentiment Score: {sentiment:.2f}")
else:
st.warning("Please write something in your journal.")
# Load and plot
data = load_data()
if not data.empty:
st.subheader("📊 Weekly Sentiment Trend")
plot_sentiment(data)
No comments:
Post a Comment