Update app.py
Browse files
app.py
CHANGED
|
@@ -84,11 +84,22 @@ def create_sentiment_distribution_chart(df):
|
|
| 84 |
|
| 85 |
# Visualization for Correlation between Sentiment and Discrimination
|
| 86 |
def create_sentiment_discrimination_grouped_chart(df):
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
# Function for Top Domains with Negative Sentiment Chart
|
| 94 |
def create_top_negative_sentiment_domains_chart(df):
|
|
@@ -161,7 +172,11 @@ def render_dashboard(page, df_filtered):
|
|
| 161 |
with col3:
|
| 162 |
st.plotly_chart(create_sentiment_distribution_chart(df_filtered))
|
| 163 |
with col4:
|
| 164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
|
| 166 |
elif page == "Sentiment Analysis":
|
| 167 |
st.title("Sentiment Analysis Dashboard")
|
|
@@ -191,5 +206,6 @@ def render_dashboard(page, df_filtered):
|
|
| 191 |
with col2:
|
| 192 |
st.plotly_chart(create_channel_discrimination_chart(df_filtered))
|
| 193 |
|
|
|
|
| 194 |
# Render the selected dashboard page
|
| 195 |
render_dashboard(page, df_filtered)
|
|
|
|
| 84 |
|
| 85 |
# Visualization for Correlation between Sentiment and Discrimination
|
| 86 |
def create_sentiment_discrimination_grouped_chart(df):
|
| 87 |
+
# Creating a crosstab of 'Sentiment' and 'Discrimination'
|
| 88 |
+
crosstab_df = pd.crosstab(df['Sentiment'], df['Discrimination'])
|
| 89 |
+
|
| 90 |
+
# Check if 'Yes' and 'No' are in the columns after the crosstab operation
|
| 91 |
+
value_vars = crosstab_df.columns.intersection(['Yes', 'No']).tolist()
|
| 92 |
+
|
| 93 |
+
# If 'No' is not in columns, it will not be included in melting
|
| 94 |
+
melted_df = pd.melt(crosstab_df.reset_index(), id_vars='Sentiment', value_vars=value_vars, var_name='Discrimination', value_name='Count')
|
| 95 |
+
|
| 96 |
+
# Proceeding to plot only if we have data to plot
|
| 97 |
+
if not melted_df.empty:
|
| 98 |
+
fig = px.bar(melted_df, x='Sentiment', y='Count', color='Discrimination', barmode='group', title="Sentiment vs. Discrimination")
|
| 99 |
+
fig.update_layout(margin=dict(l=20, r=20, t=40, b=20), xaxis_title="Sentiment", yaxis_title="Count", font=dict(size=12))
|
| 100 |
+
return fig
|
| 101 |
+
else:
|
| 102 |
+
return "No data to display for the selected filters."
|
| 103 |
|
| 104 |
# Function for Top Domains with Negative Sentiment Chart
|
| 105 |
def create_top_negative_sentiment_domains_chart(df):
|
|
|
|
| 172 |
with col3:
|
| 173 |
st.plotly_chart(create_sentiment_distribution_chart(df_filtered))
|
| 174 |
with col4:
|
| 175 |
+
chart = create_sentiment_discrimination_grouped_chart(df_filtered)
|
| 176 |
+
if isinstance(chart, str):
|
| 177 |
+
st.write(chart)
|
| 178 |
+
else:
|
| 179 |
+
st.plotly_chart(chart)
|
| 180 |
|
| 181 |
elif page == "Sentiment Analysis":
|
| 182 |
st.title("Sentiment Analysis Dashboard")
|
|
|
|
| 206 |
with col2:
|
| 207 |
st.plotly_chart(create_channel_discrimination_chart(df_filtered))
|
| 208 |
|
| 209 |
+
|
| 210 |
# Render the selected dashboard page
|
| 211 |
render_dashboard(page, df_filtered)
|