Интерактивный анализ – это когда вы исследуете данные, проваливаясь вглубь цифр и метрик; он де-факто считается стандартом любой аналитической системы. Есть графический тип анализа, хороший пример – Google Analytics: практически все тут можно сделать мышью. Второй тип – сводные таблицы. Я больше склонен именно к такому типу анализа. Делаю выборку данных, копирую ее в любую электронную таблицу, включаю анализ сводных таблиц (pivot table), а далее уже в интерфейсе «кручу» данные. На самом деле почти всегда, когда мы работаем с интерактивным анализом данных, мы работаем со сводными таблицами.
Если вкратце, то мои минимальные требования к отчетной системе такие:
• авторизация пользователей, желательно завязанная на корпоративную систему доступа;
• тонкий клиент, доступ через веб-браузер;
• возможность просмотра отчета, полученного по электронной почте, сразу на экране;
• несложная параметризация большого отчета, состоящего из множества блоков;
• кэширование результатов.
Сводные таблицы
Сводные таблицы (pivot tables) – это самое лучшее, что было изобретено в разведочном анализе данных. Если аналитик хорошо владеет сводными таблицами, он всегда заработает на хлеб с маслом. Сводная таблица избавляет нас от огромного числа бесполезных запросов к данным, когда нужно просто найти хоть какую-то зацепку. Я уже писал выше про свой личный шаблон интерактивного анализа данных: сделать выборку данных, скопировать данные в электронные таблицы, построить сводную таблицу и работать с ней. Этот способ сэкономил мне годы по сравнению с прямыми методами – подсчетом описательных статистик, построением простых графиков, то есть стандартными операциями анализа данных для любых аналитических инструментов. А теперь разберем по пунктам, как работать со сводными таблицами.
Во-первых, нужно подготовить данные. Они должны выглядеть как таблица фактов (fact table), которая делается на основе таблиц состояния на определенный момент или лога изменений данных (вспоминаем главу про данные). Если в таблице используются непонятные обычному человеку идентификаторы и у вас есть справочники на них, то лучше расшифровать это поле, присоединив (join или merge) данные справочника к таблице фактов. Поясню на примере. Мы ищем причину падения продаж. Пусть у нас есть таблица состояния заказов на определенный момент, у нее есть следующие поля:
• Дата и время создания заказа (например, 10 ноября 2020 года 12:35:02).
• ID типа клиента, который совершил заказ (1, 2).
• ID статуса клиента в программе лояльности (1, 2, 3).
• ID заказа (2134, 2135, …).
• ID клиента (1, 2, 3, 4…).
• Сумма заказа в рублях (102, 1012…).
Эта таблица будет таблицей фактов, так как в ней записаны факты появления заказов. Аналитик хочет увидеть, как заказывали клиенты разных типов и статусов в программе лояльности. У него есть гипотеза, что там находится основная причина изменения продаж. ID-поля нечитаемы и созданы для нормализации таблиц в учетной базе данных, но у нас есть справочники (табл. 7.1–7.2), которые полностью расшифровывают их.
Таблица 7.1. Справочник типа клиента
Таблица 7.2. Статусы клиента в программе лояльности
После соединения (join или merge) таблицы фактов со справочниками мы получим обновленную таблицу (табл. 7.3) фактов:
• datetime – дата и время создания заказа (например, 10 ноября 2020 года 12:35:02).
• client_type – тип клиента, который совершил заказ (физическое или юридическое лицо).
• client_status – статус клиента в программе лояльности (VIP, есть карта лояльности, нет карты лояльности).
• order_id – ID заказа (2134, 2135, …).
• client_id – ID клиента (1, 2…).
• amount – cумма заказа в рублях (102, 1012…).
Таблица 7.3. Пример объединения данных
Что в этой таблице фактов хорошо – нет id полей, кроме двух – заказов и клиентов, но это полезные поля, они, возможно, понадобятся, чтобы посмотреть более подробно какие-то заказы во внутренней учетной системе. Аналитик получил выборку данных в указанном выше виде, поместил ее в электронную таблицу, например Microsoft Excel или Google Sheets. Построил над этой таблицей сводную (pivot table). Приступим к ее анализу.
В сводных таблицах есть два типа данных: измерения (dimensions) и показатели (или меры, measures). Измерения представлены в формате системы координат. Когда я слышу слово «измерения», я представляю себе три оси координат, выходящие из одной точки перпендикулярно по отношению друг другу – как нас учили на уроках геометрии. Измерений (осей) может быть гораздо больше трех. Их можно будет использовать в виде столбцов, строк или фильтров сводной таблицы, но их нельзя помещать в ячейки. Примеры измерений:
• Дата и время.
• Тип клиента.
• Статус клиента.
Показатели – это уже статистики, которые будут рассчитываться в сводной таблице, когда вы будете «вращать» или менять измерения. Они, как правило, агрегатные: суммы, средние, количество уникальных значений (distinct count), количество непустых значений (count). Примеры показателей для нашей задачи:
• Сумма заказов.
• Средний чек заказа.