|
import pandas as pd |
|
import streamlit as st |
|
import plotly.express as px |
|
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf |
|
from statsmodels.graphics.tsaplots import acf, pacf |
|
import numpy as np |
|
import plotly.graph_objects as go |
|
|
|
|
|
def streamlit_2columns_metrics_df_shape(df: pd.DataFrame): |
|
( |
|
column1name, |
|
column2name, |
|
) = st.columns(2) |
|
|
|
with column1name: |
|
st.metric( |
|
label="Rows", |
|
value=df.shape[0], |
|
delta=None, |
|
delta_color="normal", |
|
) |
|
|
|
with column2name: |
|
st.metric( |
|
label="Columns", |
|
value=df.shape[1], |
|
delta=None, |
|
delta_color="normal", |
|
) |
|
|
|
|
|
def show_inputted_dataframe(data): |
|
with st.expander("Input Dataframe:"): |
|
st.dataframe(data) |
|
streamlit_2columns_metrics_df_shape(data) |
|
|
|
|
|
def time_series_line_plot(data): |
|
fig = px.line( |
|
data |
|
) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def time_series_scatter_plot(data): |
|
fig = px.scatter(data, trendline="ols") |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def time_series_box_plot(data): |
|
fig = px.box(data, hover_data=['Date'], points="all") |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def time_series_violin_and_box_plot(graph_data): |
|
fig = px.histogram(graph_data, |
|
marginal="violin") |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def streamlit_chart_setting_height_width( |
|
title: str, |
|
default_widthvalue: int, |
|
default_heightvalue: int, |
|
widthkey: str, |
|
heightkey: str, |
|
|
|
|
|
): |
|
with st.expander(title): |
|
|
|
lbarx_col, lbary_col = st.columns(2) |
|
|
|
with lbarx_col: |
|
width_size = st.number_input( |
|
label="Width in inches:", |
|
value=default_widthvalue, |
|
key=widthkey, |
|
) |
|
|
|
with lbary_col: |
|
height_size = st.number_input( |
|
label="Height in inches:", |
|
value=default_heightvalue, |
|
key=heightkey, |
|
) |
|
return width_size, height_size |
|
|
|
|
|
|
|
|
|
|
|
|
|
def streamlit_autocorrelation_plot_settings(): |
|
with st.expander('Autocorrelation Plot Settings:'): |
|
lag_col, alpha_col = st.columns(2) |
|
|
|
with lag_col: |
|
lags_selected = st.number_input( |
|
label="Lags:", |
|
value=15) |
|
|
|
with alpha_col: |
|
alpha_selected = st.number_input( |
|
label="Alpha:", |
|
value=0.05) |
|
|
|
zero_include_selected = st.radio( |
|
label="Include the 0-lag autocorrelation:", |
|
options=('True', 'False')) |
|
|
|
zero_include_selected = zero_include_selected == 'True' |
|
|
|
return [lags_selected, |
|
alpha_selected, |
|
zero_include_selected] |
|
|
|
|
|
def streamlit_acf_plot_settings(): |
|
fft_compute_selected = st.radio( |
|
label="Compute the ACF via FFT:", |
|
options=('False', 'True')) |
|
|
|
fft_compute_selected = fft_compute_selected == 'True' |
|
|
|
return fft_compute_selected |
|
|
|
|
|
def plotly_corr(corr_array, upper_y, lower_y): |
|
fig = go.Figure() |
|
[fig.add_scatter(x=(x, x), y=(0, corr_array[0][x]), mode='lines', line_color='#3f3f3f') |
|
for x in range(len(corr_array[0]))] |
|
fig.add_scatter(x=np.arange(len(corr_array[0])), y=corr_array[0], mode='markers', marker_color='#1f77b4', |
|
marker_size=12) |
|
fig.add_scatter(x=np.arange( |
|
len(corr_array[0])), y=upper_y, mode='lines', line_color='rgba(255,255,255,0)') |
|
fig.add_scatter(x=np.arange(len(corr_array[0])), y=lower_y, mode='lines', fillcolor='rgba(32, 146, 230,0.3)', |
|
fill='tonexty', line_color='rgba(255,255,255,0)') |
|
fig.update_traces(showlegend=False) |
|
fig.update_yaxes(zerolinecolor='#000000') |
|
return fig |
|
|
|
|
|
def create_standard_corr_plot(series, plot_pacf=False): |
|
corr_array = pacf(series.dropna(), alpha=0.05) if plot_pacf else acf( |
|
series.dropna(), alpha=0.05) |
|
lower_y = corr_array[1][:, 0] - corr_array[0] |
|
upper_y = corr_array[1][:, 1] - corr_array[0] |
|
|
|
fig = plotly_corr(corr_array, upper_y, lower_y) |
|
|
|
title = 'Partial Autocorrelation' if plot_pacf else 'Autocorrelation' |
|
fig.update_layout(title=title) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def create_acf_plot(data_series, |
|
alpha_selected, |
|
acf_nlags_selected_plot, |
|
acf_fft_selected_plot): |
|
|
|
corr_array = acf(data_series, |
|
alpha=alpha_selected, |
|
nlags=acf_nlags_selected_plot, |
|
fft=acf_fft_selected_plot) |
|
|
|
lower = corr_array[1][:, 0] - corr_array[0] |
|
upper = corr_array[1][:, 1] - corr_array[0] |
|
fig = plotly_corr(corr_array, upper, lower) |
|
title = 'Autocorrelation' |
|
fig.update_layout(title=title) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
def create_pacf_plot(data_series, |
|
alpha_selected, |
|
acf_nlags_selected, |
|
pacf_calculation_method): |
|
|
|
corr_array = pacf(data_series, |
|
alpha=alpha_selected, |
|
nlags=acf_nlags_selected, |
|
method=pacf_calculation_method) |
|
lower = corr_array[1][:, 0] - corr_array[0] |
|
upper = corr_array[1][:, 1] - corr_array[0] |
|
fig = plotly_corr(corr_array, upper, lower) |
|
title = 'Partial Autocorrelation' |
|
fig.update_layout(title=title) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|