Продолжаем изучать темы по визуализации данных с использованием биоинструмента Apache Superset, с которым познакомились на предыдущих уроках. Сегодняшняя задача связана с построением line-чартов (линейных графиков) в этом инструменте.
Подключение к данным
Для начала работы необходимо подключиться к базе данных. Для этого перейдем в настройки (Settings) и найдем раздел Database Connections. В нем выберем PostgreSQL базу данных с необходимыми правами (SELECT, UPDATE, DELETE, INSERT). Допишем параметры подключения: Host, Port, Database name, Username, Password. После подключения к базе данных можно приступать к созданию графиков.
Создание линейного графика
Перейдем в раздел Datasets и выберем подключенную PostgreSQL базу. Выберем схему Public и основную таблицу с продажами. Выберем добавить новый график (Add chart) и выберем тип Line Chart.
Apache Superset предоставляет расширенные возможности по сравнению с Google Sheets:
- Построение нескольких графиков в различных разрезах
- Объединение графиков
- Добавление точек данных
- Метки данных
- Процентные показатели
- Линии тренда
- Настройка частоты повторений
Для построения графика необходимо выбрать ось X (X-AXIS) и ось Y (METRICS). В качестве оси X выберем дату продажи, а в качестве оси Y - количество проданных товаров. После этого можно сохранить график и посмотреть результат.
Конкретно в Apache SuperSets используется своя терминология. Давайте подробнее посмотрим каждый из терминов.
- X-axis. Измерение по горизонтали, что будем на нашем графике откладывать внизу.
- Metrics. Это измерение по вертикали, что будем откладывать по вертикальной оси. Мы можем иметь в сравнении агрегированные данные и их уже с помощью самого суперсета собирать в агрегат так, как нам это нужно.
- Columns. Это измерения, которые должны быть агрегированы и категоризированы. То есть, это как раз те колонки, которые нужно вывести в сам график.
И есть две дополнительные характеристики, которые используются в практически любом графике или диаграмме. Это Dimensions and Customized.
- Dimensions это выбор измерений для расщепления грани. Что это значит? Допустим, строили продажи просто по дням, первое измерение наше было день. И с помощью dimensions мы можем добавить сюда еще одно измерение, еще одно поле для группировки. В результате расщепления для каждого продукта свой отдельный график. И агрегат, соответственно, будет как по дате, так и по продукту.
- Customize это пользовательские настройки, которые управляют цветом графиков, нанесением точек, линиями трендов, метками данных, выстраиванием легенды, присвоением альясов и так далее.
Работа с SQL Lab
Также Superset предоставляет интерфейс для сложных визуализаций, который называется SQL Lab. В нем можно писать сложные запросы, объединять таблицы, создавать новые датасеты и визуализации.
Перейдем в раздел SQL Lab и создадим новый запрос. Напишем запрос с JOIN таблиц sales, products:
SELECT
s.sale_date,
SUM(p.price * s.quantity) AS total_sales
FROM sales s
JOIN products p ON s.product_id = p.product_id
GROUP BY 1
ORDER BY 2;
Затем нажимаем Save dataset
и указываем название датасета. В открывшемся окне мы теперь можем построить график для нашей сложной выборки.
Самостоятельная работа
В уроке «Подключение к данным» мы подключили базу flightsdb. В ней содержатся данные о авиаперевозках за два месяца — с 16 июля по 14 сентября 2017 года.
Схема базы данных выглядит так:
Задание № 1
Представьте, что руководство аэропорта Домодедово просит вас проанализировать ежедневную загрузку аэропорта за два месяца.
Составьте запрос к базе данных, с помощью которого можно получить количество прибывших пассажиров за два месяца с группировкой по дням. Провизуализируйте полученные данные с помощью линейного графика.
Нажмите сюда, чтобы увидеть подсказку
В задании вам потребуется код аэропорта Домодедово — DME.
Чтобы получить необходимые данные, в SQL Lab нужно использовать следующий запрос:
SELECT
DATE(f.scheduled_arrival) AS arrival_date,
COUNT(t.passenger_id) AS passenger_count
FROM
flights AS f
LEFT JOIN
ticket_flights AS tf
ON f.flight_id = tf.flight_id
LEFT JOIN
tickets AS t
ON tf.ticket_no = t.ticket_no
WHERE
f.arrival_airport = 'DME'
GROUP BY
DATE(f.scheduled_arrival)
ORDER BY
DATE(f.scheduled_arrival);
Далее в меню CREATE CHART нужно выбрать Line Chart и следующие данные для визуализации:
X-AXIS
—arrival_date
METRICS
—passenger_count
Восхитившись вашими результатами, вас попросили получить аналогичные данные для Шереметьево и Внуково. Представьте полученную информацию на одном линейном графике.
В задании вам понадобятся коды аэропортов:
- Шереметьево — SVO
- Внуково — VKO
Чтобы получить необходимые данные, в SQL Lab нужно использовать следующий запрос:
SELECT
f.arrival_airport,
DATE(f.scheduled_arrival) AS arrival_date,
COUNT(t.passenger_id) AS passenger_count
FROM
flights AS f
LEFT JOIN
ticket_flights AS tf
ON f.flight_id = tf.flight_id
LEFT JOIN
tickets AS t
ON tf.ticket_no = t.ticket_no
WHERE
f.arrival_airport IN
(
'DME',
'SVO',
'VKO'
)
GROUP BY
f.arrival_airport,
DATE(f.scheduled_arrival)
ORDER BY
f.arrival_airport,
DATE(f.scheduled_arrival);
В меню CREATE CHART выберите Line Chart и следующие данные для визуализации:
X-AXIS
—arrival_date
DIMENSIONS
—arrival_airport
METRICS
—passenger_count
В итоге получится такой график:
Дополнительные материалы
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.