Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
from modules.data_preparation import prepare_df, plot_3dgraph | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from datetime import datetime | |
from modules.semantic import generateChartBar, generateWordCloud, filterPlace | |
st.title('Semantic Analysis for Price Trend Prediction - Crude Oil Futures') | |
st.header('Filter news based on categories and country/region') | |
# st.header(f'Data based on News Data') | |
# st.subheader(f'{datetime.now()}') | |
date_filter = st.slider( | |
"Date Filter", | |
value=(datetime(2024, 8, 4), datetime(2024,8,9)), | |
format="MM/DD/YY", | |
) | |
col1, col2 = st.columns(2) | |
with col1: | |
news_categories = st.multiselect("Select desired news categories", | |
["Macroeconomic & Geopolitics", "Crude Oil", "Light Ends", "Middle Distillates", "Heavy Distillates", "Other"], | |
["Macroeconomic & Geopolitics", "Crude Oil"]) | |
with col2: | |
news_location = st.selectbox("Select desired mentioned location", | |
["North America","United States", "Russia", "Asia", "Europe"]) | |
st.subheader('Tabular Data') | |
latest_news = prepare_df(pd.read_excel('evaluation.xlsx'), news_categories, date_filter) | |
df_news = pd.concat([latest_news], ignore_index=True).drop_duplicates(['headline']) | |
df_news = filterPlace(df_news, news_location) | |
df_mean = pd.DataFrame({ | |
'headline' : ['MEAN OF SELECTED NEWS'], | |
'negative_score' : [df_news['negative_score'].mean()], | |
'neutral_score' : [df_news['neutral_score'].mean()], | |
'positive_score' : [df_news['positive_score'].mean()], | |
'topic_verification' : [''] | |
}) | |
df_news_final = pd.concat([df_news, df_mean]) | |
df_news_final.index = np.arange(1, len(df_news_final) + 1) | |
st.dataframe(df_news_final.iloc[:, : 9]) | |
try: | |
st.plotly_chart(plot_3dgraph(df_news_final), use_container_width=True) | |
except: | |
st.subheader('Select news categories to plot 3D graph') | |
st.markdown('---') | |
viz1, viz2 = st.columns(2) | |
st.subheader('Top Word Frequency - Bar Chart') | |
bar_chart = generateChartBar(data=df_news,search_word='n', body=True) | |
st.plotly_chart(bar_chart) | |
st.markdown('---') | |
st.subheader('Top Word Frequency - Word Cloud') | |
wordcloud = generateWordCloud(data=df_news) | |
# Display the generated image: | |
fig, ax = plt.subplots() | |
ax.imshow(wordcloud, interpolation='bilinear') | |
ax.axis("off") | |
st.pyplot(fig) | |
st.markdown('---') | |
st.subheader('Other possible use cases:') | |
st.markdown('- Sentiments towards a company, country, or individual') | |