import streamlit as st import pandas as pd import numpy as np import plotly.express as px import random from datetime import datetime # Set page configuration st.set_page_config( page_title="Quick Streamlit Demo", page_icon="📊", layout="wide", initial_sidebar_state="expanded" ) # Add custom CSS st.markdown(""" """, unsafe_allow_html=True) # App title st.markdown('

Interactive Streamlit Dashboard

', unsafe_allow_html=True) st.markdown("This is a quick demo of Streamlit's capabilities.") # Sidebar st.sidebar.title("Controls") data_size = st.sidebar.slider("Data Points", 10, 500, 100) chart_height = st.sidebar.slider("Chart Height", 300, 800, 400) # Define color themes dictionary mapping to actual Plotly color sequences color_themes = { "blues": px.colors.sequential.Blues, "reds": px.colors.sequential.Reds, "greens": px.colors.sequential.Greens, "purples": px.colors.sequential.Purples, "oranges": px.colors.sequential.Oranges } color_theme = st.sidebar.selectbox("Color Theme", list(color_themes.keys())) # Generate random data @st.cache_data def generate_data(n_points): np.random.seed(42) dates = pd.date_range(start=datetime.now().date(), periods=n_points) df = pd.DataFrame({ 'date': dates, 'value': np.random.randn(n_points).cumsum(), 'category': np.random.choice(['A', 'B', 'C', 'D'], n_points), 'size': np.random.randint(10, 100, n_points) }) return df # Create tabs tab1, tab2, tab3 = st.tabs(["Chart", "Data Explorer", "About"]) with tab1: st.markdown('

Interactive Data Visualization

', unsafe_allow_html=True) # Generate and display data df = generate_data(data_size) # Create a line chart with Plotly fig = px.line( df, x='date', y='value', color='category', color_discrete_sequence=color_themes[color_theme], height=chart_height ) fig.update_layout( title="Time Series Data", xaxis_title="Date", yaxis_title="Value", legend_title="Category", hovermode="x unified" ) st.plotly_chart(fig, use_container_width=True) # Add some metrics col1, col2, col3, col4 = st.columns(4) with col1: st.metric("Max Value", f"{df['value'].max():.2f}", f"{random.uniform(-10, 10):.2f}%") with col2: st.metric("Min Value", f"{df['value'].min():.2f}", f"{random.uniform(-10, 10):.2f}%") with col3: st.metric("Average", f"{df['value'].mean():.2f}", f"{random.uniform(-10, 10):.2f}%") with col4: st.metric("Data Points", len(df), f"{data_size - 50}") with tab2: st.markdown('

Data Explorer

', unsafe_allow_html=True) # Filter options st.subheader("Filter Data") # Create columns for filters filter_col1, filter_col2 = st.columns(2) with filter_col1: selected_categories = st.multiselect( "Select Categories", options=df['category'].unique(), default=df['category'].unique() ) with filter_col2: min_val, max_val = st.slider( "Value Range", float(df['value'].min()), float(df['value'].max()), [float(df['value'].min()), float(df['value'].max())] ) # Filter the data filtered_df = df[ (df['category'].isin(selected_categories)) & (df['value'] >= min_val) & (df['value'] <= max_val) ] # Show the filtered dataframe st.subheader(f"Filtered Data ({len(filtered_df)} rows)") st.dataframe(filtered_df, use_container_width=True) # Download button csv = filtered_df.to_csv(index=False).encode('utf-8') st.download_button( "Download CSV", csv, "filtered_data.csv", "text/csv", key='download-csv' ) with tab3: st.markdown('

About This App

', unsafe_allow_html=True) st.markdown(""" This is a quick demo showcasing some of Streamlit's features: - **Interactive Charts**: Visualize data dynamically - **Data Filtering**: Filter and explore datasets - **Download Capabilities**: Export data as CSV - **Metrics & KPIs**: Display key performance indicators - **Custom Styling**: Enhance UI with custom CSS Streamlit makes it easy to create data apps with just a few lines of Python code. """) st.info("Made with ❤️ using Streamlit") # Footer st.markdown("---") st.markdown("Created as a quick Streamlit demo")