Зарегистрируйтесь, чтобы продолжить обучение

Агрегация для Pie Chart Продвинутая аналитика на SQL

В этом уроке мы познакомимся с круговой диаграммой и ее видами. Мы агрегируем данные суммарных продаж по разным категориям товаров и построим разные типы круговых диаграмм.

Круговые диаграммы — удобный инструмент визуализации, когда мы хотим показать процентные соотношения числовых величин по разным категориям. Знания из этого урока позволят использовать этот инструмент визуализации в работе дата-аналитика.

Круговая диаграмма

Допустим, у нас есть таблица суммарных продаж товаров по разным категориям товаров:

total_sales

sub_category sales
Accessories 13285.68
Appliances 6830.277
Art 2820.666
... ...

В этой таблице есть два столбца:

  • Тип товара — это значение, которое выражается строкой
  • Суммарные продажи — это числовое значение

Если мы хотим посмотреть на доли продаж относительно всех продаж, то лучше использовать круговые диаграммы или Pie chart.

Посмотрим на круговую диаграмму по данным таблицы TotalSales:

sales_pie_chart

В круговой диаграмме весь круг — это сумма всех продаж по всем категориям или 100%. А сумма продаж по каждой из категорий — доля, которую занимает одна категория в процентах от 100%.

Круговые диаграммы подходят для визуализации долей от целого. Мы не используем их для отображения тенденций или изменений со временем. Для таких целей лучше использовать линейный график или столбчатую диаграмму.

Виды круговой диаграммы

Круговые диаграммы бывают трех типов:

Круговая диаграмма или Pie chart

Мы видели этот тип диаграммы на рисунке выше. Каждый сегмент диаграммы — это доля в процентах от суммы всех значений по всем категориям.

Кольцевая диаграмма или Doughnut chart

Эта диаграмма похожа на круговую, только в ней есть отверстие посередине. Пример с суммарными продажами выглядит так:

doughnut_chart

Отличие кольцевой диаграммы от круговой в том, что в центре кольцевой диаграммы есть отверстие.

Разрезанная круговая диаграмма или Exploded pie chart

Это круговая или кольцевая диаграмма, только один или несколько сегментов отделены от всех остальных. Мы используем такую диаграмму, когда нужно выделить отдельные сегменты.

Разрезанная диаграмма будет выглядеть так:

exploded_pie_chart

Перейдем к практике и агрегируем данные о продажах для круговой диаграммы.

Агрегация для круговой диаграммы

Нам дана таблица sales. Выполним запрос, чтобы посмотреть на содержимое таблицы:

SELECT * FROM sales;

Теперь мы видим таблицу продаж товаров по разным категориям и регионам:

Sales

order_id order_date ship_date ship_mode customer_id customer_name segment country city state postal_code region product_id category sub_category product_name sales quantity discount profit
CA-2014-103800 2014-01-03 00:00:00 2014-01-07 00:00:00 Standard Class DP-13000 Darren Powers Consumer United States Houston Texas 77095 Central OFF-PA-10000174 Office Supplies Paper Message Book, Wirebound, Four 5 1/2" X 4" Forms/Pg., 200 Dupl. Sets/Book 16.448 2 0.2 5.551199999999998
CA-2014-112326 2014-01-04 00:00:00 2014-01-08 00:00:00 Standard Class PO-19195 Phillina Ober Home Office United States Naperville Illinois 60540 Central OFF-LA-10003223 Office Supplies Labels Avery 508 11.784 3 0.2 4.271699999999999
CA-2014-112326 2014-01-04 00:00:00 2014-01-08 00:00:00 Standard Class PO-19195 Phillina Ober Home Office United States Naperville Illinois 60540 Central OFF-ST-10002743 Office Supplies Storage SAFCO Boltless Steel Shelving 272.736 3 0.2 -64.77480000000001
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Ссылка на таблицу

В этой таблице есть столбцы:

  1. order_id — ID заказа
  2. order_date — дата заказа
  3. ship_date — дата отгрузки товара
  4. ship_mode — класс отгрузки
  5. customer_id — ID покупателя
  6. customer_name — имя покупателя
  7. segment — категория покупателя
  8. country — страна
  9. city — город
  10. state — штат/округ
  11. postal_code — почтовый индекс
  12. region — регион
  13. product_id — ID товара
  14. category — категория товара
  15. sub_category — подкатегория товара
  16. product_name — наименование товара
  17. sales — сумма продаж по заказу
  18. quantity — количество единиц товара в заказе
  19. discount — скидка на заказ
  20. profit — прибыль по заказу

Мы хотим получить таблицу суммарных продаж по подкатегориям товаров, чтобы нарисовать круговую диаграмму. Агрегация для круговой диаграммы будет такой же, как и для столбчатой, потому что Google Sheets считает проценты для круговой диаграммы за нас.

Агрегируем таблицу Sales по подкатегориям товаров. Мы просуммируем все продажи по каждой отдельной категории с помощью функции GROUP BY. Мы будем использовать столбцы sub_category и sales. По столбцу sub_category мы агрегируем данные, а по столбцу sales будем считать суммарные продажи по каждой категории:

SELECT
    sub_category,
    SUM(sales) AS total_sales
FROM sales
GROUP BY sub_category;

Мы получили такую таблицу:

TotalSales

sub_category total_sales
Paper 6648.283999999999
Labels 1308.4160000000002
Storage 20823.572
Binders 21403.09499999999
Art 2820.6659999999983
Chairs 32388.257999999994
Phones 38570.604
Fasteners 380.5800000000001
Furnishings 6706.3640000000005
Accessories 13285.68
Envelopes 1605.862
Bookcases 6707.1536
Appliances 6830.276999999999
Tables 24083.6545
Supplies 12940.315999999995
Machines 26854.097
Copiers 5309.888000000001

Ссылка на таблицу

В этой таблице мы видим суммарные продажи по разным категориям товаров.

Теперь построим круговую диаграмму по этой таблице. Скопируем ее в Google Sheets и заменим в столбце total_sales все точки на запятые. Вставим диаграмму и выберем тип диаграммы «Круговая диаграмма». Мы получили диаграмму, которую видели выше:

sales_pie_chart

Мы агрегировали данные продаж по разным категориям продаж и построили круговую диаграмму. Видим, что под каждой категорией указан процент продаж по категории относительно общих продаж.

Убедимся, что Google Sheets считает процентные значения по категориям. Выполним запрос, который выведет сумму всех продаж:

SELECT sum(sales)
FROM sales;

Мы выполнили запрос и получили значение суммы всех продаж 228666.7670999999.

Ссылка на таблицу

Скопируем это значение.

Теперь мы можем составить запрос, который посчитает процентные доли суммарных продаж по каждой категории:

SELECT
    sub_category,
    SUM(sales) / 228666.7670999999 * 100 AS total_sales_per
FROM sales
GROUP BY sub_category;

В этом запросе мы рассчитали процент суммарных продаж по категориям от суммы всех продаж. Переменная total_sales_per — это процент продаж по категориям.

Запрос выдал нам таблицу:

sub_category total_sales_per
Paper 2.907411551015889
Labels 0.5721933346911785
Storage 9.106514367649012
Binders 9.359949970622557
Art 1.2335268634669911
Chairs 14.163955003499066
Phones 16.8676036702493
Fasteners 0.1664343292322692
Furnishings 2.932810956769766
Accessories 5.810061588088113
Envelopes 0.7022717032150669
Bookcases 2.9331562627405523
Appliances 2.987000291569698
Tables 10.532205796860636
Supplies 5.659027835182089
Machines 11.743769040236725
Copiers 2.3221074349111235

Ссылка на таблицу

Мы получили таблицу с процентными долями продаж по категориям. В этой таблице два столбца:

  1. sub_category — категория, по которой мы агрегировали данные продаж
  2. total_sales_per — процентные доли продаж по категориям относительно суммарных продаж

Скопируем эту таблицу в Google Sheets и построим круговую диаграмму:

sales_pie_chart_per

Мы построили круговую диаграмму по процентам от продаж. Видим, что она не отличается от диаграммы выше, когда мы строили круговую диаграмму по абсолютным значениям продаж. Это означает, что Google Sheets подсчитывает проценты автоматически.

Теперь построим другие типы круговых диаграмм: кольцевую и разрезанную круговую.

Кольцевая и разрезанная диаграммы

Будем использовать таблицу TotalSales. Выделим столбцы с таблицей в Google Sheets и вставим диаграмму. Выберем тип диаграммы «Кольцевая диаграмма»:

doughnut_chart

Мы построили кольцевую диаграмму суммарных продаж. Как видим, кольцевая диаграмма ничем не отличается от круговой кроме визуальных отличий.

Google Sheets предоставляет возможности строить объемные круговые диаграммы. Снова выделим данные о продажах и построим диаграмму. В типе диаграммы выберем «Объемная круговая диаграмма»:

volumetric_pie_chart

На рисунке мы видим объемную диаграмму. Процентные соотношения продаж по категориям остаются теми же.

Чтобы превратить любую круговую диаграмму в разорванную, нужно перейти в «Дополнительные» -> «Сектор». В этой вкладке мы выделим отдельные сектора, если укажем расстояние сектора от центра.

Подсветим три категории с максимальными продажами. Для этого выполним запрос к таблице sales с сортировкой по убыванию по суммарным продажам:

SELECT
    sub_category,
    SUM(sales) AS total_sales
FROM sales
GROUP BY sub_category
ORDER BY total_sales DESC;

Ссылка на таблицу

Мы видим, что категории с максимальными продажами — это Phones, Chairs и Machines. Выделим эти категории и построим разорванную круговую диаграмму. Для этого выберем во вкладке «Сектор» Phones и укажем расстояние от центра 25%. То же самое мы проделаем с категориями Chairs и Machines и получим диаграмму:

exploded_pie_chart

Мы выбрали три категории с максимальными продажами, изменили расстояние секторов от центра и получили разорванную диаграмму.

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

Выводы

В уроке мы определили, что такое круговая диаграмма и когда ее лучше использовать. Мы агрегировали данные суммарных продаж по категориям товаров и построили круговую, объемную круговую и кольцевую диаграммы.

Также мы посчитали процентные соотношения продаж по категориям и убедились, что диаграмма не отличается от построенной по абсолютным значениям продаж. Мы увидели, что разные круговые диаграммы отличаются внешним видом, но процентные соотношения продаж те же.

Умение строить круговые диаграммы поможет в работе, когда не важны тренды и нужно показать процентные соотношения от целого.


Самостоятельная работа

Для самостоятельной работы мы возьмем базу данных из урока. Агрегируйте суммарную прибыль profit по категориям товаров sub_category и постройте круговую диаграмму. Найдите три самые прибыльные категории товаров и постройте по ним разорванную диаграмму. Отличается ли круговая диаграмма по прибыли от круговой диаграммы по продажам?

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff