import streamlit as st import pandas as pd import time st.header("Plotting Time Series Data") st.markdown("Users can load their time-series data in **.csv** format and select a particular feature and plot-type.\ Go ahead and use the sidebar on the left to upload your data files to start visualizing it!") tab1, tab2 = st.tabs(["Main", "Demo"]) # Load and config with st.sidebar: plot = st.radio("Select the kind of visualization:",('Feature collection', 'Users comparison', 'Data distribution')) file = st.file_uploader("Load CSV file", accept_multiple_files = False) if file: df_p = pd.read_csv(file, index_col = False) # df_p.index = df_p['Unnamed: 0'].tolist() try: del df_p['Unnamed: 0'] except KeyError: pass if 'df_p' not in st.session_state: st.session_state['df_p'] = df_p st.success("Your data has been successfully loaded! 🤗") with tab1: if 'df_p' in st.session_state: st.caption("Your uploaded data:") st.dataframe(st.session_state.df_p) elif 'df_right' in st.session_state: st.caption("Your data:") st.dataframe(st.session_state.df_right) if 'df_p' not in st.session_state: df_p = st.session_state.df_right st.session_state['df_p'] = df_p else: df_p = st.session_state.df_right st.session_state.df_p = df_p else: st.caption("Upload your data using the sidebar and select a plot-type to start :sunglasses:") df_base = st.session_state.df_p if 'df_p' in st.session_state else pd.DataFrame() n = len(df_base) col1, col2 = st.columns(2) # Prepare data if not df_base.empty and n: with col1: st.info(f"Your data has {n} samples.") slider_range = list(range(n)) n_plot = st.slider("How many samples do you want to plot in the same graph", slider_range[0]+1, slider_range[-1]+1, 5) plot_it = st.button("Plot now! 📊") if plot_it: st.snow() feature = "relative_pupil_dilation" df_plot = df_base.head(n_plot) try: df_plot = [ini_list.strip('][').split(',') for ini_list in df_plot[feature]] except AttributeError: df_plot = [ini_list for ini_list in df_plot[feature]] df_plot = pd.DataFrame(df_plot) df_plot.columns = [str(column) for column in range(len(df_plot.columns))] if 'df_plot' not in st.session_state: st.session_state['df_plot'] = df_plot # Draw plot if 'df_plot' in st.session_state: with st.spinner(f"Drawing plot to visualize {plot.lower()}"): st.caption("Your visualization:") df_plot_t = df_plot.copy(deep=True).transpose() df_plot_t.columns = [str(column) for column in range(len(df_plot_t.columns))] st.line_chart(df_plot_t, y=list(df_plot_t.columns), height=450, width=600) # st.dataframe(df_plot_t) with st.expander("See explanation"): st.caption("The chart above shows...") elif df_base.empty and file: st.warning("Consider running outlier detection to clean your data!", icon="⚠️") # st.caption(f"developer:: session_state keys: {list(st.session_state.keys())}") # st.caption(f"what is the meaning of the x-axis, add to explanation") # st.caption(f"add sample data demo in another tab") # demo with tab2: st.caption("demo under construction 🚧")