azuremlint / app.py
aadii14's picture
Update app.py
f1aae5f verified
import streamlit as st
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import os
import matplotlib
matplotlib.use("Agg") # headless safe backend
os.environ["STREAMLIT_SERVER_HEADLESS"] = "true"
os.environ["STREAMLIT_SERVER_PORT"] = "8501"
matplotlib.use("Agg") # headless safe backend
os.environ["STREAMLIT_SERVER_HEADLESS"] = "true"
os.environ["STREAMLIT_SERVER_PORT"] = "8501"
# Load data
@st.cache_data
def load_data():
df = pd.read_csv("processed_data.csv") # replace with your dataset
return df
# Create Streamlit app
def app():
st.set_page_config(page_title="Pizza Sales Data Analysis Dashboard", layout="wide")
st.title("๐Ÿ• Pizza Sales Data Analysis Dashboard")
df = load_data()
# Calculate key metrics
total_orders = df['order_id'].nunique()
total_revenue = df['total_price'].sum()
most_popular_size = df['pizza_size'].value_counts().idxmax()
most_frequent_category = df['pizza_category'].value_counts().idxmax()
total_pizzas_sold = df['quantity'].sum()
# Sidebar with key metrics
st.sidebar.header("Key Metrics")
st.sidebar.metric("Total Orders", total_orders)
st.sidebar.metric("Total Revenue", f"${total_revenue:,.2f}")
st.sidebar.metric("Most Popular Size", most_popular_size)
st.sidebar.metric("Most Popular Category", most_frequent_category)
st.sidebar.metric("Total Pizzas Sold", total_pizzas_sold)
plots = [
{"title": "Top Selling Pizzas (by Quantity)", "x": "pizza_name", "y": "quantity", "top": 5},
{"title": "Quantity of Pizzas Sold by Category and Time of the Day", "x": "time_of_day", "hue": "pizza_category"},
{"title": "Quantity of Pizzas Sold by Size and Time of the Day", "x": "time_of_day", "hue": "pizza_size"},
{"title": "Monthly Revenue Trends by Pizza Category", "x": "order_month", "y": "total_price", "hue": "pizza_category", "estimator": "sum", "marker": "o"},
]
for plot in plots:
st.header(plot["title"])
fig, ax = plt.subplots(figsize=(8, 4))
if "Top Selling Pizzas" in plot["title"]:
data_aux = (
df.groupby(plot["x"])[plot["y"]]
.sum()
.reset_index()
.sort_values(by=plot["y"], ascending=False)
.head(plot["top"])
)
ax.bar(data_aux[plot["x"]].values.tolist(), data_aux[plot["y"]].values.tolist())
elif "Quantity of Pizzas" in plot["title"]:
sns.countplot(data=df, x=plot["x"], hue=plot["hue"], ax=ax)
elif "Monthly Revenue" in plot["title"]:
sns.lineplot(
data=df,
x=plot["x"],
y=plot["y"],
hue=plot["hue"],
estimator=plot["estimator"],
errorbar=None,
marker=plot["marker"],
ax=ax,
)
ax.set_xlabel(" ".join(plot["x"].split("_")).capitalize())
ax.set_ylabel(plot.get("y", "Quantity").replace("_", " ").capitalize())
ax.legend(bbox_to_anchor=(1, 1))
st.pyplot(fig)
if __name__ == "__main__":
app()