Я просматривал Kaggle и наткнулся на набор данных, который включал местоположения по широте и долготе. Я не работал с нанесением карт на карты, поэтому решил взять этот набор данных и изучить различные доступные варианты для работы с ними. Это базовое руководство о том, что я сделал, и о выводах, которые я сделал об этих библиотеках.
Цель заключалась в том, чтобы найти библиотеку, которая была бы очень простой в использовании и работала бы без проблем при нанесении на карты. Другой целью было найти библиотеку, которая могла бы распечатать все точки в наборе данных сразу (190 000+ точек).
Здесь я исследовал четыре библиотеки: gmplot
, geopandas
, plotly
и bokeh
. Я буду импортировать библиотеки по мере необходимости, вместо того, чтобы импортировать их все вначале. Полный код доступен в виде репозитория GitHub:
Давай начнем!!
Набор данных
Я взял набор данных из Kaggle и сохранил его в папке data
как dataset.csv
. Он включает в себя список предприятий с их адресом, штатом, местонахождением и т. Д. Я извлек широту, долготу, состояние, unique_states и имя в отдельные массивы. Я также извлек минимальные и максимальные значения широты и долготы, которые помогут мне приблизить конкретную область на карте мира, которую мы увидим ниже.
Для каждой библиотеки я нанесу первые 1000 местоположений, а затем попытаюсь нанести все точки.
gmplot
gmplot
- это библиотека, которая генерирует график, создавая html-файл, который мы можем загрузить в наш браузер. Это один из самых простых и быстрых способов начать нанесение данных на карту. Он отображает информацию на Google Maps и, следовательно, выглядит очень красиво.
Сначала мы создаем GoogleMapPlotter
, который принимает первые два значения, которые описывают центр карты (в нашем случае США), а третий аргумент - это уровень масштабирования. Вы можете выбрать здесь любое число, но я обнаружил, что для этого случая подходит 5. В папке данных будет создан файл gmplot.html
. Откроем в браузере.
Ой! Вся карта затемнена и покрыта текстом For development purposes only
. Это происходит потому, что доступ к API Карт Google теперь платный, и нам требуется ключ API. Для этого вам необходимо создать учетную запись на https://console.cloud.google.com. По умолчанию вы получаете бесплатную пробную версию на 12 месяцев с достаточным количеством кредитов для работы над этим проектом и многим другим. Перейдите в Google Maps Javascript API и сгенерируйте ключ API. Давайте заполним это сейчас.
Просто замените текст <API-KEY>
своим API-ключом. Давайте посмотрим, как выглядит новый HTML-документ.
Карта теперь сгенерирована правильно. Поскольку это настоящая карта Google, мы можем изменить настройку на Спутник в верхнем левом углу, увеличивать масштаб и перемещать карту по мере необходимости. Затем попробуем нанести на карту все местоположения.
Я попытался загрузить HTML-страницу, но она загрузилась несколько секунд и через некоторое время перестала отвечать. Я пытался несколько раз, но не мог получить рабочую страницу.
GeoPandas
GeoPandas
- это библиотека, основанная на структурах данных pandas и использующая их для нанесения пространственных данных на карту.
Библиотека ожидает, что все местоположения будут описаны как точки. Таким образом, первым шагом было создание массива точек, и я сохранил их в data_points
. Что-то удивительное, что я обнаружил в этой библиотеке, заключалось в том, что она упрощает добавление цветов в каждое место. Если вы знакомы с пандами и matplotlib, вы почувствуете себя как дома. Я создал список цветов на основе уникальных состояний в colormap
и использовал его для создания массива цветов для всех мест всего за один цикл.
Для начала нам понадобится карта, на которой мы нанесем эти точки. В библиотеке есть несколько карт, и я использовал naturalearth_lowres
. Я просто рисую его со светло-серым фоном и черными границами. Когда карта будет готова, мы можем использовать GeoDataFrame
для построения данных. Это похоже на фрейм данных Pandas, поэтому мы сначала передаем набор данных с пределом 1000, чтобы вначале построить только 1000 местоположений. Необходимая система координат определяется с помощью crs
, а данные мы определяем в geometry
. Я отключил ось и установил пределы x и y на основе значений широты и долготы.
Как видите, каждая локация немного отличается от синего. Давайте также нанесем все точки на график.
Вуаля! GeoPandas смог построить все точки. Однако я обнаружил здесь два основных недостатка, которые включают отсутствие интерактивной карты, а также очень ограниченную документацию о том, как ее правильно использовать.
Сюжетно
Plotly
- еще одна библиотека, которая строит высокоинтерактивные диаграммы и позволяет пользователю также взаимодействовать с диаграммами. Однако для работы требуется имя пользователя и ключ API. Вам необходимо зарегистрироваться на странице https://plot.ly/feed/#/ и получить API-ключ.
Вам нужно будет заменить <USERNAME>
и <API-KEY>
своими собственными значениями.
Мы используем ScatterGeo
для определения точек, которые мы хотим построить, а также можем передать их имена в параметре text
. Установить маркер также легко: его можно изменить по размеру, прозрачности, цвету и т. Д. layout
используется для определения заголовка графика, основного цвета и т. Д. Наконец, метод Figure()
создает фигуру, которую мы можем построить с помощью iplot
.
Мы смогли построить 1000 точек одним и тем же, но для того, чтобы нарисовать их разными цветами, нам понадобятся разные ScatterGeo
методы с разными цветами. Давайте также попробуем построить все точки.
Сюжет был сгенерирован через некоторое время, но все места были видны, хотя он был очень медленным. Даже появляется предупреждение о том, что для построения большого количества точек следует использовать другие методы. Это раздражало, потому что, когда я пытался вернуть это как изображение, требовалась библиотека plotly-ocra
, которую нельзя было установить с pip
и которая работает только с conda
.
Боке
Bokeh
- потрясающая библиотека визуализации, которая использует карты Google Maps для своих карт и, следовательно, также требует для работы API-ключа, который мы использовали выше. Учитывая, что он использует Google Maps, я очень сомневаюсь, что он сможет отобразить все точки сразу.
Сохраняем вывод как bokeh.html
. GMapOptions
помогает нам определять центр карты и масштабировать по мере необходимости. Затем мы генерируем gmap
с этими параметрами, а также передаем API-ключ. Мы определяем данные как ColumnDataSource, как видно из приведенной выше сути. Затем мы наносим все точки как circle
на график и используем show
для его отображения. Он загружает html, и мы видим результат - интерактивную карту.
Все локации правильно построены. Попробуем также нанести на график все точки.
Как и предполагалось, страница открылась с картой, но не работала и не отображала никаких точек данных.
Полученные результаты
Из графиков выше я определил, что все библиотеки действительно полезны для построения точек данных, и мои наблюдения были следующими:
- Самый простой способ начать - использовать
gmplot
. Для запуска требуется минимум кода, а также он может давать хорошие результаты. - Наносить точки разными цветами в зависимости от их состояния было проще всего в
GeoPandas
. Построить все точки было легко, вероятно, потому, что сюжет не интерактивен и статичен. - Наиболее интерактивными являются
Plotly
сюжеты. Они могли создавать графики со всеми точками, но тогда были менее отзывчивы и предлагали другие способы построения графиков. Bokeh
смог создать действительно красивый сюжет Google Maps с минимальным кодом. Однако он также не смог отобразить все точки.
Надеюсь, вам понравилось это читать. Вот еще несколько статей, которые могут вам понравиться:
Не стесняйтесь делиться своими мыслями, идеями и предложениями. Я хотел бы получить известие от вас.