Аналізуючи продажі мережі кав’ярень у Нью-Йорку

pic

Фото від Jonas Jacobsson на Unsplash

Трохи контексту

Набір даних доступний на Data Playground від Maven Analytics, і містить записи транзакцій у вигаданій мережі кав'ярень з трьома магазинами в Нью-Йорку. Дані включають інформацію про дату, час та продукти приблизно 150 000 продажів за першу половину 2023 року.

Дані спочатку були у форматі .xlsx, я конвертував їх у .csv і завантажив у базу даних PostgreSQL. Отже, інструменти, що використовуються в цьому проєкті, це Microsoft Power BI і мова SQL.

Завдання команди Maven Roasters

Маючи три підрозділи в Нью-Йорку (Astoria, Hell’s Kitchen та Lower Manhattan), команда звернулася до аналітика даних з такими запитами:

  • Яка тенденція продажів у Maven Roasters з часом?
  • Які дні тижня мають найбільшу активність?
  • Які продукти продаються найкраще, а які гірше? Які приносять найбільший дохід для кав'ярень?

Крім того, команда хоче отримати дашборд для відстеження результатів продажів у магазинах.

pic

Рисунок 1: Колонки набору даних.

Результати за часом

Перший необхідний крок — це створення колонки, яка буде вираховувати дохід, отриманий від кожного замовлення.

SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
FROM mv.sales_data;

pic

Рисунок 2: Створення колонки для обчислення доходу.

Ми можемо оцінити результати продажів за двома факторами:

  • Загальний дохід;
  • Кількість транзакцій.

Тому наступний крок — це групування загального доходу по місяцях та оцінка місячного зростання за допомогою наступної CTE.

WITH source AS (  
SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
FROM mv.sales_data  
),  

revenue AS (  
SELECT  
 EXTRACT(YEAR FROM transaction_date) AS year  
 , EXTRACT(MONTH FROM transaction_date) AS month_num  
 , SUM(revenue) AS total_revenue  
FROM source  
GROUP BY year, month_num  
)  

SELECT   
 year  
 , month_num  
 , total_revenue  
 , ROUND((total_revenue - LAG(total_revenue, 1) OVER(ORDER BY month_num))   
 / LAG(total_revenue, 1) OVER(ORDER BY month_num) * 100, 2) AS MoM  
FROM revenue

pic

Рисунок 3: Результати продажів кав'ярень по місяцях

Період з березня по травень показав сильне зростання доходів у Maven Roasters, а в червні також був зафіксований ріст доходу, що вказує на продовження тенденції зростання.
pic

Фото від Jonas Jacobsson на Unsplash

Трохи контексту

Набір даних доступний на Data Playground від Maven Analytics, і містить записи транзакцій у вигаданій мережі кав'ярень з трьома магазинами в Нью-Йорку. Дані включають інформацію про дату, час та продукти приблизно 150 000 продажів за першу половину 2023 року.

Дані спочатку були у форматі .xlsx, я конвертував їх у .csv і завантажив у базу даних PostgreSQL. Отже, інструменти, що використовуються в цьому проєкті, це Microsoft Power BI і мова SQL.

Запити від команди Maven Roasters

Маючи три підрозділи в Нью-Йорку (Astoria, Hell’s Kitchen та Lower Manhattan), команда звернулася до аналітика даних з такими запитами:

  • Яка тенденція продажів у Maven Roasters з часом?
  • Які дні тижня мають найбільшу активність?
  • Які продукти продаються найкраще, а які гірше? Які приносять найбільший дохід для кав'ярень?

Крім того, команда хоче отримати дашборд для відстеження результатів продажів у магазинах.

Результати за кількістю транзакцій

WITH source AS (  
SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
FROM mv.sales_data  
),  

orders AS (  
SELECT  
 EXTRACT(YEAR FROM transaction_date) AS year  
 , EXTRACT(MONTH FROM transaction_date) AS month_num  
 , COUNT(transaction_id)::NUMERIC(10, 2) AS total_orders  
FROM source  
GROUP BY year, month_num  
)  

SELECT   
 year  
 , month_num  
 , total_orders::INTEGER  
 , ROUND((total_orders - LAG(total_orders, 1) OVER(ORDER BY month_num))   
/ LAG(total_orders, 1) OVER(ORDER BY month_num) * 100, 2) AS mom  
FROM orders

pic

Рисунок 4: Перегляд результатів місяць за місяцем по кількості транзакцій.

Ми можемо стверджувати, що Maven Roasters має тенденцію до зростання у своїх доходах та комерційній діяльності.

Продажі за тиждень

Для того, щоб відповісти на це питання, необхідно групувати дані за загальним доходом по днях тижня. Також я використаю години роботи кав'ярень для глибшого аналізу.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 TO_CHAR(transaction_date, 'Day') AS weekday  
 , SUM(revenue) AS total_revenue  
FROM source  
GROUP BY weekday  
ORDER BY total_revenue DESC

pic

Рисунок 5: Загальний дохід по днях тижня.

Понеділки та п'ятниці — це дні з найбільшою активністю в кав'ярнях, тепер давайте розглянемо години та дні з найбільшими доходами.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 DATE_TRUNC('hour', transaction_time)::time AS hour  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Monday' THEN revenue ELSE 0 END) AS mon  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Tuesday' THEN revenue ELSE 0 END) AS tue  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Wednesday' THEN revenue ELSE 0 END) AS wed  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Thursday' THEN revenue ELSE 0 END) AS thu  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Friday' THEN revenue ELSE 0 END) AS fri  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Saturday' THEN revenue ELSE 0 END) AS sat  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Sunday' THEN revenue ELSE 0 END) AS sun  
FROM source  
GROUP BY hour  
ORDER BY hour

pic

Рисунок 6: Доходи по годинам та дням тижня.

Пік активності в кав'ярнях Maven Roasters припадає на період з 8:00 до 10:00.
pic

Фото від Jonas Jacobsson на Unsplash

Трохи контексту

Набір даних доступний на Data Playground від Maven Analytics, і містить записи транзакцій у вигаданій мережі кав'ярень з трьома магазинами в Нью-Йорку. Дані включають інформацію про дату, час та продукти приблизно 150 000 продажів за першу половину 2023 року.

Дані спочатку були у форматі .xlsx, я конвертував їх у .csv і завантажив у базу даних PostgreSQL. Отже, інструменти, що використовуються в цьому проєкті, це Microsoft Power BI і мова SQL.

Запити від команди Maven Roasters

Маючи три підрозділи в Нью-Йорку (Astoria, Hell’s Kitchen та Lower Manhattan), команда звернулася до аналітика даних з такими запитами:

  • Яка тенденція продажів у Maven Roasters з часом?
  • Які дні тижня мають найбільшу активність?
  • Які продукти продаються найкраще, а які гірше? Які приносять найбільший дохід для кав'ярень?

Крім того, команда хоче отримати дашборд для відстеження результатів продажів у магазинах.

Аналіз продуктивності за кількістю транзакцій

WITH source AS (  
SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
FROM mv.sales_data  
),  

orders AS (  
SELECT  
 EXTRACT(YEAR FROM transaction_date) AS year  
 , EXTRACT(MONTH FROM transaction_date) AS month_num  
 , COUNT(transaction_id)::NUMERIC(10, 2) AS total_orders  
FROM source  
GROUP BY year, month_num  
)  

SELECT   
 year  
 , month_num  
 , total_orders::INTEGER  
 , ROUND((total_orders - LAG(total_orders, 1) OVER(ORDER BY month_num))   
/ LAG(total_orders, 1) OVER(ORDER BY month_num) * 100, 2) AS mom  
FROM orders

pic

Рисунок 4: Перегляд результатів місяць за місяцем по кількості транзакцій.

Ми можемо стверджувати, що Maven Roasters має тенденцію до зростання у своїх доходах та комерційній діяльності.

Продажі по днях тижня

Для того, щоб відповісти на це питання, необхідно групувати дані за загальним доходом по днях тижня. Також я використаю години роботи кав'ярень для глибшого аналізу.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 TO_CHAR(transaction_date, 'Day') AS weekday  
 , SUM(revenue) AS total_revenue  
FROM source  
GROUP BY weekday  
ORDER BY total_revenue DESC

pic

Рисунок 5: Загальний дохід по днях тижня.

Понеділки та п'ятниці — це дні з найбільшою активністю в кав'ярнях, тепер давайте розглянемо години та дні з найбільшими доходами.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 DATE_TRUNC('hour', transaction_time)::time AS hour  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Monday' THEN revenue ELSE 0 END) AS mon  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Tuesday' THEN revenue ELSE 0 END) AS tue  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Wednesday' THEN revenue ELSE 0 END) AS wed  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Thursday' THEN revenue ELSE 0 END) AS thu  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Friday' THEN revenue ELSE 0 END) AS fri  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Saturday' THEN revenue ELSE 0 END) AS sat  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Sunday' THEN revenue ELSE 0 END) AS sun  
FROM source  
GROUP BY hour  
ORDER BY hour

pic

Рисунок 6: Доходи по годинам та дням тижня.

Пік активності в кав'ярнях Maven Roasters припадає на період з 8:00 до 10:00.
pic

Фото від Jonas Jacobsson на Unsplash

Трохи контексту

Набір даних доступний на Data Playground від Maven Analytics, і містить записи транзакцій у вигаданій мережі кав'ярень з трьома магазинами в Нью-Йорку. Дані включають інформацію про дату, час та продукти приблизно 150 000 продажів за першу половину 2023 року.

Дані спочатку були у форматі .xlsx, я конвертував їх у .csv і завантажив у базу даних PostgreSQL. Отже, інструменти, що використовуються в цьому проєкті, це Microsoft Power BI і мова SQL.

Запити від команди Maven Roasters

Маючи три підрозділи в Нью-Йорку (Astoria, Hell’s Kitchen та Lower Manhattan), команда звернулася до аналітика даних з такими запитами:

  • Яка тенденція продажів у Maven Roasters з часом?
  • Які дні тижня мають найбільшу активність?
  • Які продукти продаються найкраще, а які гірше? Які приносять найбільший дохід для кав'ярень?

Крім того, команда хоче отримати дашборд для відстеження результатів продажів у магазинах.

Аналіз продуктивності за кількістю транзакцій

WITH source AS (  
SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
FROM mv.sales_data  
),  

orders AS (  
SELECT  
 EXTRACT(YEAR FROM transaction_date) AS year  
 , EXTRACT(MONTH FROM transaction_date) AS month_num  
 , COUNT(transaction_id)::NUMERIC(10, 2) AS total_orders  
FROM source  
GROUP BY year, month_num  
)  

SELECT   
 year  
 , month_num  
 , total_orders::INTEGER  
 , ROUND((total_orders - LAG(total_orders, 1) OVER(ORDER BY month_num))   
/ LAG(total_orders, 1) OVER(ORDER BY month_num) * 100, 2) AS mom  
FROM orders

pic

Рисунок 4: Перегляд результатів місяць за місяцем по кількості транзакцій.

Ми можемо стверджувати, що Maven Roasters має тенденцію до зростання у своїх доходах та комерційній діяльності.

Продажі по днях тижня

Для того, щоб відповісти на це питання, необхідно групувати дані за загальним доходом по днях тижня. Також я використаю години роботи кав'ярень для глибшого аналізу.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 TO_CHAR(transaction_date, 'Day') AS weekday  
 , SUM(revenue) AS total_revenue  
FROM source  
GROUP BY weekday  
ORDER BY total_revenue DESC

pic

Рисунок 5: Загальний дохід по днях тижня.

Понеділки та п'ятниці — це дні з найбільшою активністю в кав'ярнях, тепер давайте розглянемо години та дні з найбільшими доходами.

WITH source AS (  
 SELECT   
 transaction_id  
 , store_id  
 , product_id  
 , transaction_date  
 , transaction_time  
 , store_location  
 , product_category  
 , product_type  
 , product_detail  
 , transaction_qty  
 , unit_price  
 , (transaction_qty * unit_price) AS revenue  
 FROM mv.sales_data  
)  

SELECT  
 DATE_TRUNC('hour', transaction_time)::time AS hour  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Monday' THEN revenue ELSE 0 END) AS mon  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Tuesday' THEN revenue ELSE 0 END) AS tue  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Wednesday' THEN revenue ELSE 0 END) AS wed  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Thursday' THEN revenue ELSE 0 END) AS thu  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Friday' THEN revenue ELSE 0 END) AS fri  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Saturday' THEN revenue ELSE 0 END) AS sat  
 , SUM(CASE WHEN TO_CHAR(transaction_date, 'Day') = 'Sunday' THEN revenue ELSE 0 END) AS sun  
FROM source  
GROUP BY hour  
ORDER BY hour

pic

Рисунок 6: Доходи по годинам та дням тижня.

Пік активності в кав'ярнях Maven Roasters припадає на період з 8:00 до 10:00.
Промоції на нові та найбільш продавані продукти, як-от Brewed Chai Tea, можуть допомогти утримати увагу клієнтів.

Дякую, що дійшли до кінця!

Ви можете побачити більше моїх робіт на:

І зв'язатися зі мною через:

Перекладено з: Analisando as vendas de uma rede de cafeterias em Nova Iorque

Leave a Reply

Your email address will not be published. Required fields are marked *