import re
import datetime
import plotly.express as px
import datetime
def clean_text(text):
new_text = text
for rgx_match in ['[A-Z ]+:']:
new_text = re.sub(rgx_match, '', new_text)
return new_text
def prepare_df(df, category):
try:
df.drop(columns=['Unnamed: 0'], inplace=True)
except:
pass
if category == 'Crude Oil':
news_data = df[(df['topic_verification'] == 'Crude Oil') | (df['topic_verification'] == 'Macroeconomic & Geopolitics')]
if category == 'Light Ends':
news_data = df[(df['topic_verification'] == 'Light Ends')]
if category == 'Middle Distillates':
news_data = df[(df['topic_verification'] == 'Middle Distillates')]
if category == 'Heavy Distillates':
news_data = df[(df['topic_verification'] == 'Heavy Distillates')]
actual_day = datetime.date.today() - datetime.timedelta(days=1)
pattern_del = actual_day.strftime('%b').upper()
filter = news_data['headline'].str.contains(pattern_del)
news_data = news_data[~filter]
return news_data
def plot_3dgraph(news_data):
fig = px.scatter_3d(news_data,
x='neutral_score',
y='negative_score',
z='positive_score',
color='positive_score',
hover_name ='headline',
color_continuous_scale='RdBu',
size_max=40,
size='negative_score',
text='headline',
hover_data='topic_verification')
fig.update_layout(
height=800,
title=dict(text=f"Platts News Sentiments ({datetime.datetime.now().strftime('%d/%m/%y')})
Hover cursor on a datapoint to show news title", font=dict(size=35), automargin=False)
)
fig.update_traces(textfont_size=8)
return fig