from variables import * import plotly_express as px from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator import matplotlib.pyplot as plt import streamlit as st import numpy as np import pandas as pd import textwrap st.set_option('deprecation.showPyplotGlobalUse', False) #st.set_page_config(page_title="Earnings Sentiment Analysis", page_icon="📈") st.sidebar.header("Sentiment Analysis Visualization") st.markdown("## Sentiment Analysis and Density Graphs") max_word = st.sidebar.slider(label= "WordCloud Max Words", min_value=20, max_value=500, value=50) max_font = st.sidebar.slider(label = "WordCloud Max Font", min_value=50, max_value=350, value=50) stopwords = set(STOPWORDS) stopwords.update(['us', 'one', 'will', 'said', 'now', 'well', 'man', 'may', 'little', 'say', 'must', 'way', 'long', 'yet', 'mean', 'put', 'seem', 'asked', 'made', 'half', 'much', 'certainly', 'might', 'came','RT','amp']) def cloud(text, max_word, max_font, random): '''Generate Word Cloud''' wc = WordCloud(background_color="white", colormap="hot", max_words=max_word, stopwords=stopwords, max_font_size=max_font, random_state=random).generate(text) return wc try: if 'tdf' in st.session_state: df = st.session_state['tdf'] # df['creation_date'] = pd.to_datetime(df['creation_date'], # format='%Y-%m-%d %H:%M:%S-%Z', # errors='coerce').dt.date with st.container(): st.subheader('Sentiment Scatter Plot') ## Display negative sentence locations ht = df.tweet.apply(lambda txt: '
'.join(textwrap.wrap(txt, width=70))) fig = px.scatter(df, y='sentiment', x='creation_time', color='sentiment', size='sentiment_confidence', hover_data=[ht,'topic','username'], \ color_discrete_map={"Bearish":"firebrick","Neutral":"navajowhite","Bullish":"darkgreen"}, \ title='Sentiment Score Distribution') fig.update_layout( showlegend=False, autosize=True, width=900, height=500, margin=dict( b=5, t=50, pad=2 ) ) st.plotly_chart(fig) with st.container(): st.subheader('Topic Distribution Scatter Plot') ## Display negative sentence locations ht = df.tweet.apply(lambda txt: '
'.join(textwrap.wrap(txt, width=70))) fig = px.scatter(df, y='topic', x='creation_time', color='sentiment', size='topic_confidence', hover_data=[ht,'topic','username'],\ color_discrete_map={"Bearish":"firebrick","Neutral":"navajowhite","Bullish":"darkgreen"},\ title='Topic Score Distribution') fig.update_layout( showlegend=False, autosize=True, width=900, height=500, margin=dict( b=5, t=50, pad=2 ) ) st.plotly_chart(fig) with st.container(): st.subheader('Sentiment WordCloud') cleaned_tweets = "".join(df['tweet'].tolist()) wc = cloud(cleaned_tweets, max_word, max_font, 35) plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() st.pyplot() except (AttributeError, KeyError) as e: print(e) st.error('Tweets Error, please navigate to Home page and refresh tweet stream', icon="🚨")