Data Collection & Extraction
Data Cleaning & Preprocessing
Data Aggregation & Grouping
Time-Series Analysis
Exploratory Data Analysis (EDA)
Data Visualization
Key Performance Indicators (KPIs)
Insights Generation & Business Recommendations
The project was developed to address a real-world business challenge faced by a mid-sized pizza restaurant chain experiencing inconsistent sales performance and operational inefficiencies. The organization lacked a centralized analytical framework to monitor key performance metrics such as total revenue, product category performance, and customer purchase trends. The absence of structured insights hindered data-driven decision-making in marketing campaigns, staffing schedules, and inventory management.
To solve this problem, transactional data from the store’s point-of-sale (POS) system was extracted from the dataset pizza_sales.csv, which contained detailed records including order_id, pizza_id, pizza_name, quantity, total_price, date, time, pizza_category, and pizza_size. Data preprocessing was performed using Python (pandas, NumPy, datetime) to clean, standardize, and transform the dataset. Missing values were handled, duplicate records were removed, and time-based columns were converted into appropriate datetime formats to enable temporal analysis.
Following data preparation, a comprehensive exploratory data analysis (EDA) was conducted to uncover actionable insights. Aggregate metrics were calculated, such as:
Total Revenue: Sum of total_price across all transactions.
Total Pizzas Sold: Sum of quantity across all records.
Total Orders: Unique count of order_id.
Average Order Value (AOV): Ratio of total revenue to total orders.
Average Pizzas per Order: Ratio of total pizzas sold to total orders.
Multiple analytical perspectives were applied to evaluate business performance:
Category and Size Analysis: Aggregated revenue and quantity metrics were grouped by pizza_category and pizza_size to identify dominant product segments. Visualizations revealed that Classic pizzas generated the highest revenue, while Large (L) sizes were the most preferred.
Time-Based Trends: Sales data was resampled and aggregated to daily, hourly, and monthly frequencies to identify demand fluctuations. The analysis provided operational insights such as peak sales hours, weekday versus weekend trends, and seasonal revenue variations that informed staffing and marketing strategies.
Product Performance Analysis: The top five and bottom five pizzas were identified based on total sales and order volume. These results guided menu optimization by highlighting underperforming items and top contributors to revenue.
Data visualization played a critical role in communicating insights effectively. Using Matplotlib and Seaborn, multiple interactive charts were generated, including bar plots, pie charts, and line graphs. For instance, category-wise and size-wise revenue distributions were visualized using bar charts, while time-based sales patterns were represented using line plots to highlight temporal trends. Customizations such as color maps (tab20), annotations, and formatted labels enhanced the interpretability and presentation quality of each visualization.
From an analytical standpoint, the project demonstrated how structured data manipulation and visualization techniques can transform raw transactional data into strategic business intelligence. The final deliverables included a Jupyter Notebook containing the full analytical workflow, a Business Requirements Document (BRD) detailing insights and recommendations, and a presentation-ready set of visualizations for management review.
The outcome of this project provided a data-driven foundation for decision-making. The restaurant’s management could now:
Identify high-performing pizza categories and sizes for targeted promotions.
Optimize ingredient procurement based on demand patterns.
Adjust staffing levels according to daily and hourly sales peaks.
Reevaluate low-performing menu items to enhance profitability.
As part of the Exploratory Data Analysis (EDA) phase, I began by loading the dataset into a Pandas DataFrame within a Jupyter Notebook environment. Jupyter provides an interactive and reproducible workspace for executing code, visualizing data outputs, and documenting insights — making it an essential tool for modern data analysis workflows.
The dataset consisted of 48,620 rows and 12 columns, representing a comprehensive record of pizza sales transactions. Understanding the dataset’s size and structure was the first step in evaluating its suitability for analysis, data quality assessment, and performance considerations for downstream processing.
The dataset contained 12 attributes, including:
pizza_id, order_id, and pizza_name_id: Unique identifiers for pizzas and orders.
quantity, unit_price, and total_price: Numerical variables capturing sales metrics.
order_date and order_time: Temporal fields for time-series analysis.
pizza_size, pizza_category, pizza_ingredients, and pizza_name: Categorical and descriptive variables that define pizza characteristics.
This inspection step provided a clear picture of the dataset’s schema, helping identify relationships between variables and guiding the design of future aggregations, joins, and analyses.
A review of the dataset’s information summary revealed each column’s data type, the number of non-null entries, and overall memory usage. This allowed me to:
Verify that each feature had an appropriate data type (for example, converting date and time columns into datetime objects).
Identify any missing or inconsistent values requiring cleaning.
Estimate memory consumption to plan for efficient processing and scalability.
This stage laid the foundation for all subsequent analyses by:
Validating data integrity and completeness.
Highlighting potential preprocessing requirements (such as handling nulls or encoding categorical variables).
Helping establish analytical objectives aligned with the dataset’s structure.
Enabling informed decisions for visualization, statistical analysis, and model preparation.
This initial exploration provided a comprehensive understanding of the dataset’s structure, scope, and data quality. It served as the groundwork for further data cleaning, feature engineering, and exploratory visualization, ensuring the analysis was both data-driven and methodologically sound.
After understanding the dataset’s structure, the next step involved computing a set of key business metrics (KPIs) to summarize the performance of the pizza sales dataset. These metrics provide high-level insights into sales volume, customer behavior, and business profitability, forming the foundation for deeper analytical exploration.
This metric represents the sum of all sales transactions across the dataset. It was derived by aggregating the total price of all pizzas sold.
Purpose: Helps measure the overall financial performance of the business.
Insight Use: Serves as a benchmark for identifying sales trends, seasonality, and the impact of promotional campaigns.
This KPI captures the total quantity of pizzas sold across all orders.
Purpose: Quantifies total sales volume, indicating product demand.
Insight Use: Supports inventory management, operational planning, and product mix optimization.
The number of unique orders placed during the recorded time period.
Purpose: Reflects the total count of customer transactions.
Insight Use: Helps analyze customer activity levels and order frequency patterns.
This metric is calculated by dividing total revenue by the number of unique orders. It indicates how much a customer spends on average per order.
Purpose: Measures the average monetary value per transaction.
Insight Use: Useful for evaluating customer spending behavior, pricing effectiveness, and potential up-selling or cross-selling opportunities.
This represents the average number of pizzas purchased per order, obtained by dividing total pizzas sold by total orders.
Purpose: Measures customer purchasing behavior at an order level.
Insight Use: Helps identify whether customers tend to purchase single items or larger group orders, which can guide marketing and product bundling strategies.
These KPIs provide a concise summary of business performance over the observed period. Together, they allow for:
Rapid performance benchmarking.
Identification of key revenue drivers.
Foundation for time-series, category-level, and customer-segmentation analysis in later stages.
7. Outcome
This stage translated raw transactional data into meaningful business insights. It established a baseline for understanding overall sales performance and informed the focus areas for further exploratory data analysis (e.g., best-selling products, seasonal demand, or size-category profitability).
After establishing key performance metrics, the next analytical step focused on understanding the composition of pizzas based on their ingredients. This analysis was designed to identify the most common ingredients across the product range and quantify their occurrence within the dataset.
The goal of this step was to perform a frequency analysis of all pizza ingredients to uncover insights into:
Which ingredients are most frequently used in the menu items.
The overall distribution of ingredient popularity.
Potential opportunities for inventory optimization or menu diversification.
The pizza_ingredients column contained multiple ingredients in a comma-separated string format for each pizza. To analyze them effectively, the data was transformed through a multi-step process:
Splitting: Each ingredient list was separated into individual elements using the comma as a delimiter.
Exploding: The column was expanded so that each ingredient appeared in its own row (creating a one-to-many relationship).
Cleaning: Extra spaces were removed to ensure consistency in ingredient names.
Aggregation: The frequency of each unique ingredient was counted.
Renaming and Structuring: The resulting dataset was reformatted into two columns — one for the ingredient name and one for its total count.
This data manipulation technique enabled a granular, ingredient-level view of the pizza dataset, converting textual product descriptions into quantifiable variables suitable for analysis.
The frequency analysis revealed the most common pizza ingredients in the dataset. The top five were:
Garlic – appearing in over 27,000 pizzas.
Tomatoes – appearing in around 26,000 pizzas.
Red Onions – approximately 19,000 occurrences.
Red Peppers – approximately 16,000 occurrences.
Mozzarella Cheese – over 10,000 occurrences.
These results highlight the core ingredients that dominate the menu offerings, with a strong presence of vegetables and classic pizza toppings.
Inventory Management: Understanding ingredient frequency supports better inventory forecasting, minimizing waste and optimizing supply chains.
Menu Engineering: High-frequency ingredients represent customer preferences and can guide new product development.
Cost Optimization: Identifying the most used ingredients allows for bulk procurement strategies and cost efficiency.
Customer Insights: Popular ingredients reflect consumer taste trends that can inform marketing and promotional campaigns.
This ingredient-level analysis provided a data-driven understanding of product composition, helping bridge the gap between menu design and business operations. It set the stage for more advanced analysis such as ingredient co-occurrence (pairing patterns), menu diversity studies, or correlation between ingredients and sales performance.
Purpose: This section visualizes the total number of orders for each day of the week.
Steps:
The order_date column is converted to a datetime format, and the day of the week is extracted using dt.day_name().
A categorical variable weekday_order is created to ensure that the days are in the correct order (Monday to Sunday).
The data is grouped by Day_name, and the count of order_id is computed for each day of the week, representing the total number of orders for each day.
A bar plot is created using matplotlib with green bars and black edges to represent the total orders for each day.
The title and axis labels are set, and the chart is displayed with proper formatting (rotated x-axis labels, bold numbers displayed on top of each bar).
Chart Output:
A bar chart showing the total number of orders for each day of the week.
Purpose: This section visualizes the total revenue generated each day of the week.
Steps:
Similar to the first chart, the order_date is converted to a datetime format, and the day of the week is extracted.
Again, the weekday_order is used to ensure the days are in order.
The data is grouped by Day_name, and the total total_price is summed for each day, representing the total revenue for each day.
A bar plot is created using matplotlib with purple bars and pink edges to represent the total revenue for each day.
The title and axis labels are set, and the chart is displayed with proper formatting (rotated x-axis labels, bold numbers on top of each bar).
Chart Output:
A bar chart showing the total revenue generated for each day of the week.
Analysis Focus: The project focuses on analyzing trends in both the total number of orders and total revenue for each day of the week, helping to understand the sales pattern over the week.
Data Processing: The code demonstrates good data processing techniques such as converting date columns to the appropriate datetime format, grouping data, and aggregating values.
Visualization: The project makes use of bar plots to visually represent the data, which allows easy comparison between days.
Customization: The use of specific colors for bars and the addition of data labels on the bars help enhance the visual appeal and clarity of the charts.
After running the above analysis, two key visual insights were generated:
The bar chart displays the number of unique orders placed on each day of the week.
This visualization helps identify which days attract the most customer activity.
For instance, if the plot shows peaks on weekends (Saturday and Sunday), it indicates higher consumer engagement toward the end of the week.
Conversely, lower bars on weekdays may suggest reduced traffic, guiding potential marketing or promotional strategies to boost sales during those days.
The second chart shows the total revenue generated each day of the week.
Comparing this chart with the order count chart can reveal valuable insights:
Days with fewer orders but higher revenue could indicate higher-value purchases (e.g., bulk or premium product sales).
Days with many orders but lower revenue might suggest smaller or discounted transactions.
These insights help in pricing strategy adjustments, inventory planning, and marketing focus.
The analysis provides a clear weekly performance trend for both orders and revenue.
Business decisions can be made based on:
Peak sales days (for staffing and stock optimization)
Low-performing days (for targeted promotions)
Revenue patterns (for understanding customer purchasing behavior)
Purpose: This part of the analysis focuses on visualizing how the total number of orders fluctuates throughout the day.
Steps:
The order_time column is converted to extract the hour (%H:%M:%S format), representing the hour of the day.
The total number of unique orders (order_id) is counted for each hour.
A bar chart is created with maroon-colored bars to represent the number of orders, with the x-axis showing hours of the day.
The chart is labeled and the values are displayed above each bar for clarity.
Outcome:
Hourly Pattern: You can identify peak hours for orders during the day, which is useful for understanding customer activity patterns (e.g., if more orders occur during lunchtime or late evening).
Operational Insights: This data can help optimize staffing, inventory levels, and marketing efforts targeted at specific hours of the day.
Purpose: This analysis shows how total revenue varies throughout the day, helping to assess the financial performance during different times.
Steps:
The order_time column is again converted to extract the hour.
The total revenue (total_price) is calculated for each hour of the day.
A bar chart is created with blue bars to represent the total revenue, showing the revenue generated per hour.
Labels are added to show the exact revenue value above each bar for easy reference.
Outcome:
Revenue Insights: By comparing this chart with the order trend, you can identify hours that generate the most revenue. This could highlight the effectiveness of marketing efforts during certain times or the popularity of higher-value products at specific hours.
Business Strategy: Understanding which hours yield the highest revenue can inform decisions regarding pricing strategies or promotions tailored to peak revenue periods.
Purpose: This section focuses on analyzing the number of items (quantity) sold across different hours of the day.
Steps:
The order_time column is used to extract the hour, similar to the previous analyses.
The total quantity (quantity) is summed for each hour.
A bar chart is created with orange bars to represent the total quantity sold each hour.
Labels displaying the quantity are placed above each bar for clarity.
Outcome:
Sales Volume: The chart provides insights into when the highest volume of items is sold, which may not always correlate with revenue but gives an understanding of customer buying behavior.
Inventory Planning: This data can be useful for managing inventory levels, ensuring popular products are stocked during high-sales hours.
Purpose: This analysis visualizes the total quantity of items sold each month.
Steps:
The order_date is converted to extract the month from the date using dt.month_name().
The data is grouped by month, and the total quantity (quantity) is summed for each month.
A plot is created with black markers and an orange line to represent the trend in total quantity sold over the months.
The x-axis shows the months, and the values (total quantities) are displayed above each point for clarity.
Outcome:
Trend Insights: The chart visually highlights which months had higher sales volumes and which months had lower sales.
Seasonality Understanding: If there’s a peak in certain months, this may suggest seasonal trends or periods with high customer demand (e.g., holidays, special promotions).
Operational Planning: Understanding the months with the highest quantity sold can help businesses forecast inventory needs and adjust marketing strategies for those months.
Purpose: This analysis shows the total revenue generated each month, helping to assess financial performance over time.
Steps:
The order_date is again converted to extract the month.
The data is grouped by month, and the total revenue (total_price) is calculated for each month.
A similar plot is created with black markers and an orange line, but this time, the chart represents total revenue per month.
The x-axis shows the months, and the values (total revenue) are displayed above each point.
Outcome:
Revenue Insights: This chart highlights the months with the highest and lowest revenue, which may not always align with the quantity chart (e.g., some months may have high revenue with lower quantity due to high-value items being sold).
Business Strategy: By understanding revenue patterns, businesses can adjust pricing, promotions, or sales strategies for months where revenue is lagging or for months where additional revenue can be targeted through specific actions.
Data Grouping and Aggregation:
The code groups the data by the pizza_category column and calculates the total sales (total_price) for each category using .groupby() and .sum().
The sales for each category are then calculated as a percentage of the total sales, multiplying by 100 and rounding to one decimal place. This gives the relative contribution of each pizza category to the total sales.
Visualization:
A pie chart is plotted to visualize the percentage share of each pizza category. The plt.pie() function is used, with customizations such as:
autopct='%1.1f%%': Shows the percentage of sales on the pie chart.
startangle=90: Rotates the chart for better orientation.
colors: Defines the color palette for the pie slices using get_cmap('tab20').colors.
wedgeprops: Customizes the appearance of the pie slices, particularly the edge color and width.
Data Grouping and Aggregation:
Similar to the pizza category analysis, the code groups the data by the pizza_size column and calculates the total sales (total_price) for each size.
Visualization:
Another pie chart is plotted to show the percentage share of each pizza size in total sales, using a similar approach as the previous pie chart with slight adjustments to the color palette and customizations.
Pivot Table:
The code creates a pivot table using the pivot_table() function, which aggregates the total sales (total_price) by both pizza_category (as rows) and pizza_size (as columns). The aggregation function is set to 'sum', and any missing values are filled with 0.
Percentage Calculation:
The pivot table values are then normalized by calculating the percentage share of sales for each pizza category and size combination. This is done by dividing the sales for each combination by the total sales and multiplying by 100.
Heatmap Visualization:
A heatmap is used to visualize the percentage of sales across both pizza categories and sizes. The sns.heatmap() function from Seaborn is used for this, with customizations like:
annot=True: Annotates the cells with the actual values.
fmt=".1f": Formats the annotations to one decimal place.
cmap="YlOrRd": Uses a yellow-to-red color map for the heatmap.
linewidths=0.5: Adds a small line width between cells in the heatmap for better readability.
The outcome of this analysis provides valuable insights into the sales distribution across different Pizza Categories and Pizza Sizes, helping to identify trends, performance, and areas of opportunity. Here’s what the analysis reveals:
Outcome: The pie chart visually represents the sales distribution among different pizza categories (e.g., “Vegetarian”, “Meat”, “Cheese”, etc.).
Insight: The size of each slice indicates the relative contribution of each category to total sales. For example, if “Vegetarian” pizzas represent 40% of the sales, that segment would occupy 40% of the pie chart, helping to identify the most popular and profitable categories.
Outcome: A second pie chart shows how the total sales are distributed across various pizza sizes (e.g., “Small”, “Medium”, “Large”).
Insight: This chart helps identify which pizza sizes are most popular. For instance, if “Large” pizzas account for 60% of sales, it suggests that larger sizes are preferred, which could influence inventory, pricing, and marketing strategies.
Outcome: The heatmap presents a more detailed view of sales distribution, showing the relationship between both pizza categories and sizes. Each cell in the heatmap represents the percentage of sales for a specific category and size combination.
Insight: The heatmap highlights which combinations of category and size perform the best. For example, if “Large” pizzas from the “Vegetarian” category make up a significant percentage of total sales, it suggests a strong market preference for large vegetarian pizzas. This insight could drive targeted promotions or inventory focus on high-performing combinations.
Sales Trends: The pie charts give a quick overview of the sales breakdown by category and size. This helps businesses to easily spot which segments are driving the most revenue.
Product Focus: The heatmap adds a layer of detail, showing how specific categories and sizes perform together. This allows businesses to fine-tune their offerings, for example, promoting certain combinations or adjusting inventory based on demand.
Strategic Decision-Making: By visualizing the percentage of sales, businesses can make informed decisions about:
Inventory Management: Stocking up on the best-selling pizza sizes and categories.
Marketing Strategies: Tailoring marketing efforts towards high-performing products (e.g., discounts on “Large” pizzas or “Vegetarian” options).
Product Development: Identifying categories or sizes that may need more attention, such as introducing new flavors or pizza sizes.
Informed Business Strategies: These visualizations allow business owners or decision-makers to understand consumer preferences better, leading to more efficient strategies regarding marketing, promotions, and stock management.
Improved Profitability: Understanding the sales breakdown by category and size can help businesses optimize their operations, reduce waste, and maximize profits by focusing on high-demand products.
This analysis offers a comprehensive view of how sales are distributed across different pizza categories and sizes. The pie charts show the contribution of each category and size to total sales, while the heatmap provides a more detailed view of sales percentages by both category and size.
Objective: This analysis identifies the top 5 pizzas based on the number of orders (i.e., the frequency of each pizza ordered).
Steps:
The data is grouped by the pizza_name, and the number of unique orders (order_id) is counted using .nunique(). This tells us how many distinct orders were made for each pizza.
The pizzas are sorted in descending order to find the top-selling pizzas.
The top 5 are selected using .head(5) and plotted as a bar chart.
Customization:
The colors are picked from a predefined color map (tab20), ensuring that each bar has a distinct color.
Each bar is labeled with its corresponding total number of orders.
Visualization:
A bar chart is generated showing the top 5 pizzas ordered. The x-axis represents the pizza names, and the y-axis shows the total number of orders.
The plot is rotated 45 degrees for better readability of the pizza names on the x-axis.
Objective: This analysis shows the top 5 pizzas based on total revenue (i.e., the sum of total_price for each pizza).
Steps:
The data is grouped by pizza_name, and the total revenue (total_price) is summed using .sum().
The pizzas are sorted in descending order based on revenue and the top 5 are selected.
A bar chart is plotted to show which pizzas generate the most revenue.
Customization:
A different color scheme is applied from the tab20 palette, ensuring that the bars are easily distinguishable.
Each bar is labeled with the corresponding total revenue value.
Visualization:
The chart displays pizza names on the x-axis and total revenue on the y-axis.
The plot is rotated for better readability, and text labels show the revenue value on top of each bar.
Objective: This analysis identifies the top 5 pizzas based on the total quantity sold (i.e., the total number of units sold for each pizza).
Steps:
The data is grouped by pizza_name, and the total quantity (quantity) is summed using .sum().
The pizzas are sorted in descending order based on total quantity, and the top 5 are selected.
A bar chart is plotted showing the total quantity sold for the top 5 pizzas.
Customization:
A color scheme is chosen from the tab20 palette, ensuring distinct colors for each bar.
Each bar is annotated with the corresponding quantity value.
Visualization:
A bar chart is plotted with pizza names on the x-axis and total quantity on the y-axis.
The x-axis labels are rotated for better visibility, and the quantity values are shown on top of each bar.
Color Palette: The code uses the tab20 colormap, which ensures that each bar in the chart has a unique color. This is especially useful when displaying multiple categories to ensure clear differentiation.
Text Annotations: For all three visualizations, the plt.text() function is used to annotate each bar with the corresponding value (number of orders, total revenue, or quantity).
Chart Rotation: The x-axis labels (pizza names) are rotated by 45 degrees to ensure they don’t overlap, making the plot more readable.
Top 5 Selling Pizzas by Orders: The bar chart highlights the pizzas that have the highest number of unique orders, providing insights into customer preferences based on frequency of purchase.
Top 5 Selling Pizzas by Revenue: The bar chart shows which pizzas generate the most revenue, helping the business focus on the most profitable pizzas.
Top 5 Selling Pizzas by Quantity: The bar chart identifies the pizzas that sell the most units, which is useful for inventory and supply chain decisions.
Sales Strategy: By analyzing the top-selling pizzas by orders, revenue, and quantity, businesses can tailor their marketing and sales strategies to focus on popular and profitable items.
Inventory Management: Understanding the quantity of pizzas sold helps optimize inventory and prevent stockouts or overstocking.
Product Focus: Identifying which pizzas are top performers in terms of orders, revenue, and quantity helps prioritize promotional activities for specific products.
This analysis aims to explore the least selling pizzas based on three key metrics: total revenue, total orders, and total quantity. The goal is to identify the five least popular pizzas in each category using a dataset containing sales and order data.
The analysis utilizes Python’s data manipulation and visualization libraries, including Pandas for data processing and Matplotlib for plotting the results. The dataset contains information about pizza sales, including pizza names, total prices, order IDs, and quantities sold.
Metric: Total revenue generated from each pizza.
Approach: Group data by pizza name and calculate the sum of the total_price for each pizza. Sort the results in ascending order to identify the least selling pizzas by revenue.
Visual Representation: A bar chart is plotted, where the y-axis represents total revenue, and the x-axis represents the pizza names. Each bar is annotated with its respective revenue value.
Metric: The total number of unique orders for each pizza.
Approach: Group the data by pizza name and count the unique order_id entries for each pizza. Sort the results in ascending order to identify the least ordered pizzas.
Visual Representation: A bar chart is plotted, where the y-axis represents the total number of orders, and the x-axis represents the pizza names. Each bar is annotated with the number of orders for each pizza.
Metric: The total quantity of each pizza sold.
Approach: Group the data by pizza name and sum the quantity for each pizza. Sort the results in ascending order to identify the pizzas with the least quantity sold.
Visual Representation: A bar chart is plotted, where the y-axis represents the total quantity, and the x-axis represents the pizza names. Each bar is annotated with the quantity sold for each pizza.
The visualizations help convey key insights into the sales performance of each pizza. For each metric (revenue, orders, and quantity), the charts clearly display the five pizzas with the least performance. These insights can be used to adjust marketing, menu offerings, and sales strategies.
Total Revenue: The pizzas with the least revenue can be identified to potentially remove or modify them for better performance.
Total Orders: The pizzas with the fewest orders may not be as popular with customers and could benefit from promotion or modification.
Total Quantity: Analyzing the pizzas with the least quantity sold helps identify items that are underperforming in terms of actual sales volume.
The analysis provided valuable insights into the least performing pizzas across three key sales metrics. Below is a summary of the outcomes based on the results from each metric:
Outcome: The analysis of total revenue revealed the five pizzas that generate the least amount of revenue. These pizzas represent products that, despite potentially being on the menu, fail to bring in significant income.
Implications:
Actionable Insights: Consider revising the recipes, increasing marketing efforts for these pizzas, or removing them from the menu entirely if they continue to underperform.
Revenue Strategy: Reassess pricing, portion sizes, or promotional offers to improve their appeal.
Outcome: The pizzas with the fewest number of unique orders were identified. These pizzas could be considered less popular among customers, as reflected by their low order counts.
Implications:
Actionable Insights: Investigate customer preferences through surveys or feedback to understand why these pizzas are not ordered as frequently. It may be necessary to modify toppings, flavor profiles, or introduce special offers to boost orders.
Sales Strategy: If these pizzas are part of a limited-time promotion or a new menu, increased exposure through advertising or social media campaigns could help attract more customers.
Outcome: The analysis of total quantity sold highlighted the pizzas with the lowest total volume sold. These pizzas are not performing well in terms of actual sales, even if they may have been ordered a few times.
Implications:
Actionable Insights: A low quantity sold could indicate that these pizzas are either not appealing enough or are facing issues with supply or availability.
Inventory and Menu Management: Reevaluate how often these pizzas are restocked or if adjustments to their availability can make them more attractive. It may also be useful to pair them with higher-selling items in combo offers.
Targeted Strategy for Low Performers: By identifying the least performing pizzas based on these three metrics, the business can focus on specific areas for improvement—whether through menu adjustments, promotional strategies, or customer engagement efforts.
Potential for Menu Optimization: The insights from this analysis can lead to a more efficient and effective menu. Removing underperforming pizzas or revamping them can help drive overall sales.
Actionable Decisions: Data-driven decisions based on these outcomes can lead to more strategic actions such as recipe revisions, marketing campaigns, or even price adjustments to ensure better sales performance in the future.
This analysis provides a comprehensive view of the least performing pizzas across three key metrics: total revenue, total orders, and total quantity. By identifying the underperforming pizzas, the business can take informed actions, such as improving pizza recipes, enhancing promotional activities, or adjusting the menu.
The Pizza Sales Analysis project successfully transformed raw transactional data from a mid-sized pizza restaurant chain into actionable business insights. Through systematic data preprocessing, exploratory data analysis (EDA), KPI calculation, and advanced visualizations, the project addressed operational inefficiencies and provided a data-driven foundation for strategic decision-making.
Key Results:
Overall Business Performance:
Total Revenue: The dataset analysis revealed the overall revenue generated over the observed period, establishing a benchmark for financial performance.
Total Pizzas Sold & Total Orders: Quantified sales volume and customer activity, highlighting periods of high and low customer engagement.
Average Order Value (AOV) & Average Pizzas per Order: Provided insights into customer purchasing behavior, guiding potential upselling, bundling, or promotional strategies.
Ingredient-Level Insights:
The most frequently used ingredients were identified, with Garlic, Tomatoes, Red Onions, Red Peppers, and Mozzarella Cheese topping the list.
These findings support better inventory management, cost optimization, and menu design, ensuring popular ingredients are stocked appropriately and menu offerings align with customer preferences.
Temporal Sales Trends:
Daily Trends: Weekends showed peak orders and revenue, suggesting higher customer engagement on Saturdays and Sundays.
Hourly Trends: Lunch and dinner hours experienced the highest number of orders and revenue, informing staffing schedules and targeted promotions.
Monthly Trends: Seasonal variations in quantity and revenue were observed, enabling better inventory planning and marketing campaigns aligned with demand fluctuations.
Product Performance:
Analysis of pizza categories and sizes revealed Classic pizzas and Large sizes as top performers.
The heatmap combining pizza category and size identified high-revenue combinations, providing insights for focused promotions and inventory prioritization.
Top-selling pizzas were highlighted, enabling menu optimization and strategic product focus, while low-performing items were flagged for review or potential discontinuation.
Visual Insights and KPIs:
Bar charts, pie charts, and heatmaps effectively communicated sales distribution across days, hours, months, categories, sizes, and ingredients.
The visualization-driven approach allowed for quick identification of peak performance periods, top-selling products, and areas of improvement.
Project Outcomes:
The analysis enabled data-driven decision-making for the restaurant, including staffing adjustments, targeted promotions, and inventory optimization.
Business leaders can now identify high-performing pizzas and ingredient trends, ensuring operational efficiency and maximizing profitability.
Strategic recommendations derived from the analysis support menu engineering, cost reduction, and marketing initiatives tailored to customer behavior and sales patterns.
Overall, the project provided a centralized analytical framework, transforming previously unstructured POS data into actionable business intelligence.
Emmanuel Olorunda
Copyright © 2025 | All Rights Reserved
Every project starts with a chat, Emmanuel is keen to conversation and open to discussing your project. he will pull in the right expertise when needed