Мы используем Apache Druid для выполнения аналитики на основе временных рядов в наборе данных и застряли, пытаясь вычислить режим для одного из аналитиков.
Статистический режим сообщает нам о точке данных, которая чаще всего повторяется в наборе данных.
Пример: для данного набора данных, как показано ниже, попробуйте рассчитать наиболее представительную продажу корзина для каждого продукта
Набор данных:
Product ID Month Sale Bucket
Pid1 January 10-20
Pid1 February 0-10
Pid1 March 10-20
Pid2 January 0-10
Pid2 February 10-20
Pid2 March 0-10
Ожидаемый результат:
Product ID Sale Bucket
Pid1 10-20
Pid2 0-10
Попытка простого поиска Google, чтобы найти, было ли что-то встроенное или расширение сделать то же самое. Не удалось найти.
Затем я начал пробовать свой собственный наивный подход к выполнению режима над этим набором данных, используя следующие шаги:
Шаг 1. Получение соответствующих частот точки данных (группировка по идентификатору продукта и сегменту продаж), в результате чего
Product ID Sale Bucket Frequency
Pid1 10-20 2
Pid1 0-10 1
Pid2 10-20 1
Pid2 0-10 2
Шаг 2. Получение соответствующей точки данных с максимальной частотой на продукт (из частот, рассчитанных в 1). Я застрял в этом пункте 2, попробовав 2 подхода:
- Объединить столбец, который будет выбран в качестве строки, а затем удалить его позже (Объясните здесь на stackoverflow: SQL Запрос получить значения столбцов, которые соответствуют значению MAX другого столбца? . Но друид, похоже, не поддерживает операцию MAX / MIN со строками.: - /
- Попытка подхода на основе ранжирования для ранжирования элементов по частоте, а затем выбрать самые высокие ранги в следующем запросе выбора. Друид не поддерживает оператор ранга.: - /
Кто-нибудь есть какие-либо идеи о том, как действовать дальше?