pkiage's picture
Update
6f68aed
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
# zero 0-lag autocorrelation = True
# fft
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)