Replicate the app from the image.
To upload files, please first save the app
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
# Set page config
st.set_page_config(layout="wide")
# Generate sample data
@st.cache_data
def generate_data():
np.random.seed(42)
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
categories = ['A', 'B', 'C', 'D']
data = {
'date': np.repeat(dates, len(categories)),
'category': categories * len(dates),
'value': np.random.randn(len(dates) * len(categories)).cumsum(),
'region': np.random.choice(['North', 'South', 'East', 'West'],
size=len(dates) * len(categories))
}
return pd.DataFrame(data)
# Load data
df = generate_data()
# Create layout
st.title('Interactive Dashboard')
# Sidebar filters
st.sidebar.header('Filters')
# Date range filter
date_range = st.sidebar.date_input(
'Select Date Range',
value=(df['date'].min(), df['date'].max()),
min_value=df['date'].min(),
max_value=df['date'].max()
)
# Category filter
categories = st.sidebar.multiselect(
'Select Categories',
options=df['category'].unique(),
default=df['category'].unique()
)
# Region filter
regions = st.sidebar.multiselect(
'Select Regions',
options=df['region'].unique(),
default=df['region'].unique()
)
# Filter data based on selections
mask = (
(df['date'].dt.date >= date_range[0]) &
(df['date'].dt.date <= date_range[1]) &
(df['category'].isin(categories)) &
(df['region'].isin(regions))
)
filtered_df = df[mask]
# Create chart
fig = px.line(
filtered_df,
x='date',
y='value',
color='category',
title='Time Series by Category',
labels={'value': 'Value', 'date': 'Date'},
height=600
)
# Update layout
fig.update_layout(
plot_bgcolor='white',
legend=dict(
yanchor="top",
y=0.99,
xanchor="left",
x=0.01
)
)
# Display chart
st.plotly_chart(fig, use_container_width=True)
# Show filtered data
st.subheader('Filtered Data')
st.dataframe(filtered_df)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?