create a dashboard for tracking production chemicla using only native streamlit chart
To upload files, please first save the app
import streamlit as st
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# Set page config
st.set_page_config(page_title="Chemical Production Dashboard", layout="wide")
# Generate sample data
def generate_sample_data():
dates = pd.date_range(end=datetime.now(), periods=100, freq='D')
chemicals = ['Ethanol', 'Methanol', 'Acetone', 'Benzene']
data = {
'Date': [],
'Chemical': [],
'Production_Volume': [],
'Quality_Score': [],
'Batch_Number': [],
'Temperature': []
}
batch = 1000
for date in dates:
for chemical in chemicals:
data['Date'].append(date)
data['Chemical'].append(chemical)
data['Production_Volume'].append(np.random.normal(1000, 100))
data['Quality_Score'].append(np.random.uniform(90, 100))
data['Batch_Number'].append(batch)
data['Temperature'].append(np.random.normal(25, 5))
batch += 1
return pd.DataFrame(data)
# Create sample data
df = generate_sample_data()
# Dashboard title
st.title("Chemical Production Dashboard")
# Date filter
st.sidebar.header("Filters")
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()
)
# Chemical selector
selected_chemical = st.sidebar.multiselect(
"Select Chemicals",
options=df['Chemical'].unique(),
default=df['Chemical'].unique()[0]
)
# Filter data based on selections
mask = (df['Date'].dt.date >= date_range[0]) & (df['Date'].dt.date <= date_range[1])
filtered_df = df[mask & df['Chemical'].isin(selected_chemical)]
# Layout with columns
col1, col2 = st.columns(2)
with col1:
st.subheader("Production Volume Over Time")
production_data = filtered_df.pivot(index='Date', columns='Chemical', values='Production_Volume')
st.line_chart(production_data)
with col2:
st.subheader("Quality Score Trends")
quality_data = filtered_df.pivot(index='Date', columns='Chemical', values='Quality_Score')
st.line_chart(quality_data)
# Second row
col3, col4 = st.columns(2)
with col3:
st.subheader("Temperature Distribution")
temp_data = filtered_df.pivot(index='Date', columns='Chemical', values='Temperature')
st.area_chart(temp_data)
with col4:
st.subheader("Recent Production Statistics")
recent_stats = filtered_df.groupby('Chemical').agg({
'Production_Volume': ['mean', 'min', 'max'],
'Quality_Score': 'mean',
'Temperature': 'mean'
}).round(2)
recent_stats.columns = ['Avg Volume', 'Min Volume', 'Max Volume', 'Avg Quality', 'Avg Temp']
st.dataframe(recent_stats)
# Key metrics in a row
st.subheader("Key Metrics")
metric1, metric2, metric3, metric4 = st.columns(4)
with metric1:
total_production = filtered_df['Production_Volume'].sum()
st.metric("Total Production", f"{total_production:,.0f} L")
with metric2:
avg_quality = filtered_df['Quality_Score'].mean()
st.metric("Average Quality Score", f"{avg_quality:.1f}%")
with metric3:
total_batches = filtered_df['Batch_Number'].nunique()
st.metric("Total Batches", total_batches)
with metric4:
avg_temp = filtered_df['Temperature'].mean()
st.metric("Average Temperature", f"{avg_temp:.1f}°C")
# Show raw data if requested
if st.checkbox("Show Raw Data"):
st.subheader("Raw Data")
st.dataframe(filtered_df)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?