Я просматривал 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, и мы видим результат - интерактивную карту.

Все локации правильно построены. Попробуем также нанести на график все точки.

Как и предполагалось, страница открылась с картой, но не работала и не отображала никаких точек данных.

Полученные результаты

Из графиков выше я определил, что все библиотеки действительно полезны для построения точек данных, и мои наблюдения были следующими:

  1. Самый простой способ начать - использовать gmplot. Для запуска требуется минимум кода, а также он может давать хорошие результаты.
  2. Наносить точки разными цветами в зависимости от их состояния было проще всего в GeoPandas. Построить все точки было легко, вероятно, потому, что сюжет не интерактивен и статичен.
  3. Наиболее интерактивными являются Plotly сюжеты. Они могли создавать графики со всеми точками, но тогда были менее отзывчивы и предлагали другие способы построения графиков.
  4. Bokeh смог создать действительно красивый сюжет Google Maps с минимальным кодом. Однако он также не смог отобразить все точки.

Надеюсь, вам понравилось это читать. Вот еще несколько статей, которые могут вам понравиться:









Не стесняйтесь делиться своими мыслями, идеями и предложениями. Я хотел бы получить известие от вас.