Spaces:
Sleeping
Sleeping
| 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(""" | |
| <style> | |
| .main-header { | |
| font-size: 2.5rem; | |
| color: #1E88E5; | |
| } | |
| .sub-header { | |
| font-size: 1.5rem; | |
| color: #424242; | |
| } | |
| </style> | |
| """, unsafe_allow_html=True) | |
| # App title | |
| st.markdown('<p class="main-header">Interactive Streamlit Dashboard</p>', 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 | |
| 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('<p class="sub-header">Interactive Data Visualization</p>', 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('<p class="sub-header">Data Explorer</p>', 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('<p class="sub-header">About This App</p>', 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") | |