HowTo: базовая геоаналитика |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-08-05 11:54 Хочу поделиться примером?инструкцией как получить инсайты из геоданных без регистрации, смс и ML (только open?source и бесплатные инструменты: OSM, python, Портал открытых данных Правительства Москвы, DataLens). Будь то точки продаж или очаги заболеваемости covid, прежде всего нам нужно понять общую картину и увидеть аномалии. В рамках примера мы:
Полный код можно посмотреть в репозитории,а в самой статье я кратко опишу все этапы, буду останавливаться на особенностях, которые отличают мой подход от аналогичных решений. Отдельно отмечу, что с точки зрения практического применения пример не очень информативный, так как категории точек продаж из датасета включают в себя магазины от мебельных до продуктовых. Однако мы можем потренироваться отображать большое количество реальных данных на карте, а заменив исходники, решать реальные задачи. 1. Получаем данные об очертаниях Москвы Используем библиотеку osmnx и получаем данные о границах на уровне административных округов в формате geopandas.geodataframe.GeoDataFrame Перед тем как записать данные в БД для дальнейшей работы мы создаем отдельное поле с упрощенной геометрией в текстовом формате.
Во сколько раз упрощается геометрия для загрузки в BI
Вторым действием мы переводим геометрию из WKT (well-known text) в формат, понятный для BI, где каждая пара координат в полигоне выделена квадратными скобками и разделена запятой (DataLens,Qlik). Также необходимо поменять местами широту и долготу. Из WKT в формат BI В результате формируем в БД (PostgreSQL) таблицу округов Москвы "msc_polygons" с исходной геометрией WKT, osmid, упрощенными полигонами в формате для BI и их названиями. 2. Забираем данные о торговых точках Для примера я выбрал Стационарные торговые объекты на портале открытых данных Москвы, но там есть еще много интересных подборок для анализа. В результате выгрузки мы получаем 65882 записей с координатами (сейчас мы не используем другие данные, в т.ч. и существующее справочное деление по округам). Если попробовать наложить все точки на карту разом, то во-первых, любое действие с дашбордом будет выполняться долго и испортит все впечатление от работы с инструментом, во-вторых, точки сольются и не получится провести никакого анализа. Поэтому, после создания таблицы "msc_points" (global_id,широта, долгота) мы добавляем колонки с округленными значениями широты и долготы для агрегации их в сетку. Добавление столбцов широты, долготы для сетки 3. Сопоставление исходных точек с округами Москвы В примере я пользуюсь PostgreSQL так как с ростом количества данных снижается удобство пользования python, появляются проблемы с нехваткой оперативной памяти. Для создания справочника соотнесения округов Москвы (osmid) с каждой точкой (global_id) можно воспользоваться стандартными функциями:
Запрос целиком В случае, если полигоны накладываются друг на друга (некачественные исходные данные) - можно использовать оконную функцию для удаления дублей. Например, у нас есть полигон города и полигон области этого города без "выреза" в геометрии под этот город. Это обозначает, что точка будет включена и в город, и в область. Для решения этой проблемы мы можем воспользоваться оконной функцией. Таким образом, при rn=1 мы сможем отфильтровать только нужные нам записи (в случае, если точка принадлежит обоим полигонам, единица будет стоять в строке полигона с меньшей площадью). 4. Еще немного обработки данных для BI Последним этапом создаем итоговую таблицу, которая будет использоваться в BI.
Для получения поля bi_geom нам необходимо превратить координату центра ячейки сетки в полигон, который отображает участок, вбирающий в себя точки. SQL для формирования полигона сетки Т.е. создаем четыре точки, отталкиваясь от центра. 5. Очень короткая инструкция по созданию гео виджета Для более глубокого изучения можно ознакомиться с очень подробной документацией. Скучная инструкция по созданию виджетаИнструкция работает, если уже создан аккаунт для работы. На странице вверху справа через синюю кнопку создаем "воркбук"Добавляем подключение (PostgreSQL или csv).Нажимаем синюю кнопку вверху справа "создать подключение" и даем ему имя.Нажимаем кнопку "создать датасет".В разделе поля меняем тип данных для bi_geom, wkt_simplified_bi на "Геополигон" , где "Кол-во точек" = sum([sp_count]) добавляется через значок "+", а в цветах настраиваем нужный нам градиент. 6*. Определяем аномалии для каждого округа Для Москвы, разбитой по округам, определить аномалии не составляет труда, но если мы пытаемся проанализировать всю Россию, то мы сталкиваемся с большими объемами данных и разными порядками цифр. Для этого я использую определение порога выброса через интерквартильный размах (IQR) внутри каждого округа. Для ячеек, которые являются выбросами внутри округа проставляется отдельный флаг, который можно использовать в будущем при анализе. Для каждого полигоны определяется (значение 75-ого перцентиля + IQR * coef). Реализация на python Такой подход позволяет гибко учитывать аномалии как для Москвы, так и для других регионов. Значения коэффициентов можно подстраивать под конкретную задачу с учетом здравого смысла. Особенности подхода
Источник: habr.com Комментарии: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||