Spaces:
Sleeping
Sleeping
File size: 4,657 Bytes
6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e 6d53774 17a665e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import streamlit as st
import pandas as pd
import nltk
import matplotlib.pyplot as plt
import seaborn as sns
from textblob import TextBlob
from transformers import pipeline
from wordcloud import WordCloud
import os
# Ensure necessary NLTK datasets are downloaded
nltk.download('punkt')
# Load pre-trained NLP model for classification
classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")
# Function to analyze sentiment
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment.polarity # Returns sentiment score (-1 to 1)
# Function to categorize microaggressions using AI
def classify_microaggression(text):
result = classifier(text)[0]
return result["label"], result["score"]
# Streamlit UI
st.title("MicroAggression Insight Tool π")
st.write("Analyze, categorize, and visualize reported microaggressions using AI and psychological research methods.")
# **Ethical Research Consent Notice**
st.markdown("### Ethical Considerations")
st.write("By submitting your responses, you agree to participate in this study anonymously. Your data will be stored securely for research purposes.")
# **Experimental Study: Perception & Acceptability Ratings**
st.subheader("Microaggression Perception Experiment")
st.write("How acceptable do you find the following statement?")
# User Input for Microaggression Statement
user_input = st.text_area("Enter a microaggression example:")
rating = st.slider("Rate on a scale of 1 (Not Acceptable) to 5 (Completely Acceptable)", 1, 5)
emotional_impact = st.slider("How emotionally impactful is this? (1 = Not at all, 5 = Very Strong)", 1, 5)
if st.button("Analyze"):
if user_input:
sentiment_score = analyze_sentiment(user_input)
category, confidence = classify_microaggression(user_input)
# Display results
st.write(f"**Predicted Category:** {category} (Confidence: {confidence:.2f})")
st.write(f"**Sentiment Score:** {sentiment_score:.2f} (Negative: -1, Neutral: 0, Positive: 1)")
st.write(f"**Perceived Acceptability:** {rating}/5")
st.write(f"**Emotional Impact:** {emotional_impact}/5")
# Store input in a dataframe
df = pd.DataFrame([[user_input, category, sentiment_score, rating, emotional_impact]],
columns=["Text", "Category", "Sentiment", "Acceptability", "Impact"])
# Save data to CSV
file_path = "data.csv"
if not os.path.exists(file_path):
df.to_csv(file_path, index=False)
else:
df.to_csv(file_path, mode='a', header=False, index=False)
# **Focus Group & Open-ended Research Input**
st.subheader("π’ Focus Group: Share Your Perspective")
response = st.text_area("Describe how this statement made you feel:")
if st.button("Submit Response"):
if response:
with open("qualitative_responses.csv", "a") as f:
f.write(response + "\n")
st.success("Response recorded! β
")
# **Data Analysis & Visualization**
st.subheader("π Data Insights & Visualizations")
try:
data = pd.read_csv("data.csv")
if not data.empty:
# Show category distribution
st.write("### Microaggression Category Distribution")
category_counts = data["Category"].value_counts()
fig, ax = plt.subplots()
category_counts.plot(kind='bar', ax=ax)
st.pyplot(fig)
# Generate a word cloud
st.write("### Common Words in Microaggressions")
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(" ".join(data["Text"]))
fig, ax = plt.subplots()
ax.imshow(wordcloud, interpolation="bilinear")
ax.axis("off")
st.pyplot(fig)
# **Correlation Heatmap**
st.write("### Correlation Between Sentiment, Acceptability, and Impact")
plt.figure(figsize=(6, 4))
sns.heatmap(data[["Sentiment", "Acceptability", "Impact"]].corr(), annot=True, cmap="coolwarm", fmt=".2f")
st.pyplot(plt)
# **Show Data Table**
if st.checkbox("Show Data Table"):
st.dataframe(data)
except FileNotFoundError:
st.write("No data available yet. Submit responses to populate insights.")
# **Download Data Option for Researchers**
st.subheader("π₯ Download Data for Research")
if os.path.exists("data.csv"):
with open("data.csv", "rb") as file:
st.download_button(label="Download CSV Data", data=file, file_name="microaggression_data.csv", mime="text/csv")
st.write("π¬ Developed as a research tool for understanding microaggressions in social psychology.") |