Spaces:
Sleeping
Sleeping
import streamlit as st | |
import plotly.express as px | |
import numpy as np | |
import plotly.graph_objects as go | |
from sklearn.metrics import r2_score | |
from collections import OrderedDict | |
import pickle | |
import json | |
import streamlit as st | |
import plotly.express as px | |
import numpy as np | |
import plotly.graph_objects as go | |
from sklearn.metrics import r2_score | |
import pickle | |
import json | |
import pandas as pd | |
import statsmodels.api as sm | |
from sklearn.metrics import mean_absolute_percentage_error | |
import sys | |
from utilities import (set_header, | |
initialize_data, | |
load_local_css, | |
create_channel_summary, | |
create_contribution_pie, | |
create_contribuion_stacked_plot, | |
create_channel_spends_sales_plot, | |
format_numbers, | |
channel_name_formating, | |
load_authenticator) | |
def plot_actual_vs_predicted(date, y, predicted_values, model): | |
fig = go.Figure() | |
fig.add_trace(go.Scatter(x=date, y=y, mode='lines', name='Actual', line=dict(color='#6c757d'))) | |
fig.add_trace(go.Scatter(x=date, y=predicted_values, mode='lines', name='Predicted', line=dict(color='#FF3A3B'))) | |
# Calculate MAPE | |
mape = mean_absolute_percentage_error(y, predicted_values) | |
# Calculate AdjR2 # Assuming X is your feature matrix | |
adjr2 = model.rsquared_adj | |
# Create a table to display the metrics | |
metrics_table = pd.DataFrame({ | |
'Metric': ['MAPE', 'R-squared', 'AdjR-squared'], | |
'Value': [mape, model.rsquared, adjr2] | |
}) | |
fig.update_layout( | |
xaxis=dict(title='Date'), | |
yaxis=dict(title='Value'), | |
xaxis_tickangle=-30 | |
) | |
#metrics_table.set_index(['Metric'],inplace=True) | |
return metrics_table, fig | |
X=pd.read_csv('actual_data.csv') | |
y=X['total_prospect_id'] | |
date=X['date'] | |
X=X.drop(['total_prospect_id','date','Unnamed: 0'],axis=1) | |
print(X.columns) | |
original_stdout = sys.stdout | |
sys.stdout = open('temp_stdout.txt', 'w') | |
# Perform linear regression | |
model = sm.OLS(y, X).fit() | |
sys.stdout.close() | |
sys.stdout = original_stdout | |
st.set_page_config(layout='wide') | |
load_local_css('styles.css') | |
set_header() | |
st.title('Analysis of Result') | |
st.write(model.summary(yname='Prospects')) | |
st.subheader('Actual vs Predicted Plot') | |
metrics_table,fig = plot_actual_vs_predicted(date, y, model.predict(X), model) | |
st.plotly_chart(fig,use_container_width=True) | |
#st.plotly_chart(fig) | |
# Display the metrics table | |
metrics_table=np.round(metrics_table,2) | |
metrics_table_html = metrics_table.to_html(index=False, escape=False) | |
# Display the metrics table in Streamlit as HTML | |
#st.subheader('Model Metrics') | |
#st.markdown(metrics_table_html, unsafe_allow_html=True) | |
# st.subheader('Model Metrics') | |
# st.table(metrics_table) | |
custom_css = """ | |
<style> | |
table { | |
width: 80%; /* Adjust the table width as needed */ | |
border-collapse: collapse; | |
} | |
th, td { | |
padding: 8px; | |
text-align: left; | |
border-bottom: 1px solid #ddd; | |
} | |
</style> | |
""" | |
# Display the metrics table in Streamlit as HTML with custom CSS | |
st.subheader('Model Metrics') | |
st.markdown(custom_css, unsafe_allow_html=True) | |
st.markdown(metrics_table_html, unsafe_allow_html=True) | |