Spaces:
Sleeping
Sleeping
| 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 | |
| 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() | |