Построение шестиугольных карт с использованием H3 и Plotly Подробное руководство
Подробное руководство по построению шестиугольных карт с использованием H3 и Plotly
Разблокировка потенциала гексагональных карт для анализа данных
Обычно, когда мы хотим визуализировать переменную по территории с использованием хороплетовых карт, мы используем административные геометрии, которые широко известны. Например, если мы хотели бы увидеть уровень безработицы в Европе, мы могли бы визуализировать их по соответствующим штатам в каждой стране.
Однако административные регионы часто являются неравномерными и различаются по размеру друг от друга. По этой причине, полезная альтернатива для визуализации любой переменной по территории – это использование гексагонов для ее разделения. Преимущества включают в себя обеспечение сбалансированной геометрии для лучшего регионального сравнения и улучшенного охвата территории. Кроме того, гексагональные карты предлагают преимущество в минимизации визуального предвзятости, так как они обеспечивают равное представление территорий, в отличие от традиционных административных границ, которые иногда искажают восприятие данных из-за их неравномерной формы и размера.
В этой статье мы предоставим пошаговое объяснение того, как создать гексагональные карты на Python. Для этого мы воспользуемся двумя библиотеками, которые упрощают процесс создания карты: H3 и Plotly.
Анализ данных: набор данных отелей города Барселона
Набор данных, используемый в этой статье, доступен на открытом портале данных города Барселоны. Этот открытый портал данных содержит демографические, экономические и социологические данные о городе Барселона, которые доступны бесплатно. Набор данных, которым мы пользуемся, содержит информацию обо всех отелях в Барселоне, включая их местоположение. Вы можете скачать файл по следующей ссылке.
- Как написать экспертные подсказки для ChatGPT (GPT-4) и других языковых моделей
- CI/CD Пайплайны для приложений обработки данных на Azure Часть 1 Контейнерные экземпляры
- «Лжепророк домашняя модель регрессии временных рядов»
Отели в городе Барселона – Open Data Barcelona
Список и местоположение отелей в городе Барселона
opendata-ajuntament.barcelona.cat
Количество отелей будет переменной, которую мы визуализируем на гексагональной карте. В следующих разделах статьи будет пошагово объяснено, как создать эту визуализацию.
Чтение и очистка данных
Первый шаг в нашем анализе, после загрузки файла, – это продолжить с чтением и очисткой данных. В данном случае набор данных содержит множество столбцов, которые не имеют отношения к нашему анализу, и мы их не исследуем. Мы выберем только название отеля, его географическое местоположение (широта и долгота), и, возможно, атрибут, связанный с его местоположением (хотя мы не будем использовать их в этом конкретном случае). После того, как мы выбрали эти столбцы, мы переименуем их более простыми именами, и затем наш набор данных будет готов к визуализации.

Создание сетки гексагонов, используя H3
Для визуализации данных с использованием гексагональной карты, наш первый шаг – создать сетку. Для этого мы воспользуемся библиотекой H3, разработанной Uber. Функция get_hexagon_grid
отвечает за создание гексагональной сетки в виде GeoDataFrame
. Она начинает с создания гексагона в определенном местоположении (широта
и долгота
), в данном случае – центре Барселоны. Размер этого гексагона определяется параметром resolution
. Затем генерируются дополнительные гексагоны одного и того же размера, концентрически расположенные вокруг центрального гексагона. Количество концентрических колец, которые будут созданы, определяется параметром ring_size
. Наконец, эта коллекция гексагонов преобразуется в GeoDataFrame
, где каждому гексагону присваивается уникальный идентификатор, соответствующий идентификатору, предоставленному библиотекой H3.
В то время как мы не будем вдаваться в подробности каждой функции, используемой для построения гексагональной сетки в этой статье, заинтересованные читатели могут обратиться к документации библиотеки, чтобы более подробно понять, как мы ее применили.
H3 | H3
Иерархическая геопространственная индексная система
h3geo.org
На следующем графике показано, как параметры resolution
и ring_size
влияют на созданную сетку. Параметр resolution
контролирует размер гексагонов, что означает, что более высокие разрешения приводят к более маленьким гексагонам. С другой стороны, параметр ring_size
определяет количество концентрических колец гексагонов, созданных вокруг центрального гексагона. Другими словами, более большой параметр ring_size
приводит к большему количеству концентрических колец. На приведенном ниже графике все графики имеют одинаковые пределы осей. Как вы можете наблюдать, для покрытия той же площади использование более высокого разрешения требует большего количества колец, потому что, как уже упоминалось, все создаваемые гексагоны имеют одинаковый размер с центральным гексагоном.

Выборыное разрешение будет зависеть от вариаций переменной, которую мы хотим представить на определенной площади. Если есть значительное отличие, рассматривается более высокое разрешение. В этом частном случае было выбрано разрешение 9
. Кроме того, размер кольца будет зависеть от региона, который мы хотим охватить, и ранее выбранного разрешения. В этом конкретном случае, размер кольца 45
достаточен, чтобы охватить всю территорию города Барселона. Мы не будем вдаваться в подробности о том, как мы пришли к этому выводу. В общих терминах мы получили ограничивающий прямоугольник полигона города Барселона и определили количество колец, необходимых для охвата этой площади.
Внизу вы найдете создание гексагональной сетки в форме GeoDataFrame
с использованием ранее описанных параметров и функции get_hexagon_grid
.
Как вы можете видеть, функция get_hexagon_grid
создает GeoDataFrame
с двумя столбцами: первый столбец служит в качестве уникального идентификатора, присвоенного каждому полигону библиотекой H3, в то время как второй столбец содержит фактический полигон и называется geometry
.
Назначение каждому отелю своего соответствующего гексагона
После создания гексагональной сетки необходимо назначить каждому отелю гексагон, в котором он находится. Функция calculate_hexagon_ids
вычисляет гексагон, к которому относится каждый отель, и создает новый столбец под названием Hexagon_ID
, чтобы сохранить эту информацию.

Теперь данные по всем отелям также включают информацию о гексагоне, в котором находится каждый отель. Эта информация находится в столбце Hexagon_ID
в виде буквенно-цифрового идентификатора.
Группировка данных на основе переменных, которые необходимо визуализировать
После назначения идентификатора гексагона мы переходим к вычислению данных, которые мы хотим визуализировать. В этом частном случае мы стремимся отобразить количество отелей в каждом гексагоне. Для этого мы выполняем группировку по Hexagon_ID
и операцию count
. Кроме того, мы хотим реализовать функцию наведения, которая позволяет просматривать имена отелей, расположенных в каждом гексагоне. Для этого мы выполняем операцию присоединения всех имен отелей в группировке. Мы используем тег HTML <br>
, чтобы указать перенос строки в присоединении, так как Plotly использует HTML для определения своих наведений.

Как видно из приведенного выше примера, в сгруппированной таблице есть три столбца: (1) Hexagon_ID
, который содержит уникальный идентификатор гексагона, (2) Count
, который содержит количество отелей в данном гексагоне, и (3) Hotels
, в котором содержится список названий отелей внутри гексагона.
Визуализация данных: картографическое представление отелей в Барселоне с использованием гексагонов
После группировки данных можем приступить к последнему шагу – созданию карты гексагонов с помощью Plotly.
Функция create_choropleth_map
отвечает за обработку сгруппированного набора данных и набора данных, содержащих геометрию каждого гексагона, для генерации карты гексагонов. Эта карта позволяет визуализировать, в каких районах города сосредоточена большая концентрация отелей.

Для создания карты мы использовали функцию choropleth_mapbox
из библиотеки Plotly Express. Эта функция генерирует карту с заданной геометрией (в данном случае, созданный набор гексагонов) и раскрашивает их в зависимости от количества обнаруженных отелей в каждом гексагоне, используя выбранную пользователем непрерывную шкалу цветов. При наведении курсора мыши на один из гексагонов, можно увидеть список отелей, расположенных внутри этого гексагона.
В данном случае, в качестве фона карты используется carto-positron
, но этот параметр можно легко изменить, чтобы использовать другой стиль карты, который обеспечивает лучшую идентификацию городских улиц и достопримечательностей, такой как open-street-map
. Кроме того, можно также использовать другую шкалу цветов. В предыдущем случае мы использовали шкалу цветов Viridis
, а в этом случае мы используем шкалу цветов Reds
.

Карта интерактивная, позволяет приблизиться к интересующей области. Как видно при увеличении масштаба области с красноватыми оттенками, большинство отелей в Барселоне расположены вокруг площади Каталонии.

Итоги
Хороплет-карты с административными регионами являются ценным средством визуализации распределения переменных в географической области. Однако они имеют недостаток в предоставлении искаженной визуализации распределения переменных из-за неоднородной формы и различных размеров административных регионов. Поэтому использование гексагональных карт с регулярной геометрической формой является очень полезной альтернативой для анализа распределений по территории. В данной статье мы предоставили подробное объяснение того, как создать гексагональную сетку, используя библиотеку Uber H3, и как эта сетка была использована в визуализации Plotly для изображения распределения отелей в Барселоне.