pointInPolygon и визуализируете результат на карте с помощью ClickHouse Agents.
Предварительные требования
Для этого руководства вам понадобятся:- Аккаунт ClickHouse Cloud (при регистрации начисляется $300 бесплатных кредитов)
- Сервис ClickHouse Cloud
Загрузите тестовые данные
Набор данных, используемый в этом руководстве, взят из — крупнейшей в мире открытой базы данных базовых станций сотовой связи.
По состоянию на 2021 год в нём содержатся десятки миллионов записей о базовых станциях сотовой связи по всему миру — с географическими координатами и метаданными, такими как код страны и сеть.
- В ClickHouse Cloud в меню слева выберите свой сервис в выпадающем списке
- Выберите Data sources
- Нажмите на карточку Add sample data
- Выберите набор данных Cell Towers (1.1 GB)
- Укажите
defaultв качестве базы данных назначения и нажмитеImport dataset
Изучите схему
- Выберите SQL console в меню слева
- Нажмите на вкладку + рядом со значком домашней страницы, чтобы создать новый запрос
- В редакторе SQL введите следующий запрос и нажмите Run:
lon и lat.Выполните простые запросы
Выполните следующий запрос, чтобы узнать количество базовых станций сотовой связи в разбивке по типам:Далее посчитайте количество базовых станций сотовой связи в разбивке по мобильному коду страны (MCC):Как видно, больше всего базовых станций сотовой связи в странах с кодами MCC 310, 262 и 250.
Чтобы заменить числовые значения столбца Теперь, когда словарь создан, с его помощью можно получить тот же список, дополнив MCC названием страны:
mcc названиями стран, можно воспользоваться словарём:Query
Response
Добавьте геоданные
Возможно, вам также будет интересно узнать, сколько базовых станций сотовой связи находится в пределах определённой географической области.
Для решения такой задачи в ClickHouse есть множество полезных геофункций, например функция Теперь вставьте в таблицу координаты контура Германии (без островов):Теперь с помощью функции
pointInPolygon.Предположим, вы хотите узнать, сколько базовых станций сотовой связи находится на территории Германии.
Создайте таблицу germany с одним столбцом типа polygon:pointInPolygon можно узнать, сколько базовых станций сотовой связи находится на материковой части Германии:Query
Response
Необязательно: визуализация данных с помощью ClickHouse Agents
Далее визуализируем эти данные. Это необязательный пример: ClickHouse Agents — функциональность в статусе бета, работающая на основе модели, поэтому план, трассировка вызовов инструментов и результат могут отличаться от запуска к запуску.
ClickHouse Agents позволяет легко выполнять запросы к данным ClickHouse и исследовать их в формате диалога — без необходимости самостоятельно писать SQL или логику оркестрации.
Агент определяет ваше намерение, планирует шаги, вызывает настроенные вами инструменты и возвращает результаты.Чтобы открыть ClickHouse Agents, нажмите ClickHouse agents под названием вашей организации в нижней части левого меню.
Отправлять сообщения ClickHouse Agent можно через чат.
Введите «Visualize cell towers within Germany on a map using the
default.cell_towers and default.germany tables» и отправьте сообщение.
В одном из запусков агент выполнил следующие шаги:- Нашёл в
mcc_country_dictмобильный код страны (MCC) для Германии —262. - С помощью
pointInPolygonподсчитал базовые станции сmcc = 262, попадающие внутрь полигона изgermany, — получилось 2 588 635 станций. Это немного меньше, чем в подсчёте выше, поскольку дополнительный фильтр поmccисключает станции внутри полигона, зарегистрированные в другой стране. - Вместо того чтобы отображать 2,6 миллиона отдельных точек, сгруппировал станции в сетку 0,1° на 0,1°, округлив
lonиlat, — получилась 4 821 ячейка. Затем проверил, что сумма значений по ячейкам в точности равна 2 588 635, то есть при группировке ничего не потерялось и не было учтено дважды. - Получил полигон из
germanyи нарисовал его контур поверх сетки, используя логарифмическую цветовую шкалу, чтобы были видны как плотные городские, так и разреженные сельские ячейки.
Дальнейшие шаги
В этом руководстве вы загрузили набор данных о базовых станциях сотовой связи OpenCelliD в ClickHouse Cloud, изучили его схему и выполнили агрегирующие запросы по десяткам миллионов строк. Вы создали словарь, чтобы дополнить числовой столбецmcc названиями стран, сохранили контур Германии в виде полигона и с помощью pointInPolygon подсчитали количество вышек внутри него.
Наконец, с помощью ClickHouse Agents вы превратили этот вопрос в карту плотности, не написав самостоятельно ни кода агрегации, ни кода визуализации.
Что можно сделать дальше:
- Задать агенту уточняющие вопросы. Например, спросите, чем различается плотность вышек разных типов радиосвязи, таких как
LTEиGSM, или в каких городах больше всего вышекNR. Сохраняйте часто используемые промпты в библиотеке промптов или создайте специализированного агента в Конструкторе агентов. - Сравнить страны. Добавьте полигоны других стран и выполните для каждой из них тот же запрос с
pointInPolygon. Созданный вами словарь позволит подписать результаты названиями стран. - Сгруппировать вышки по ячейкам с помощью H3 или Geohash. Агент использовал простую сетку на основе округления. В ClickHouse также есть функции H3 и Geohash, которые формируют иерархические ячейки, хорошо подходящие для масштабируемых карт.
- Изучить другие датасеты. Датасет NYC taxi тоже содержит координаты посадки и высадки пассажиров, а в каталоге примеров датасетов вы найдёте множество других.