Когда вы работаете с реальными данными, вы не можете полагаться на то, что в базах содержится вся необходимая информация для реализации вашего проекта Data Science. Чаще всего вы располагаете частичной информацией и должны обогатить данные дополнительными характеристиками.
Может возникнуть ситуация, когда набор данных содержит адрес, но в то же время широта и долгота отсутствуют. В этом случае первым шагом для дополнения данных будет добавление этой пары координат. Мы называем этот процесс преобразования адреса в широту и долготу геокодированием.
Геокодирование востребовано во многих областях, таких как недвижимость, финансы и логистика. Без этой технологии вы не сможете анализировать и визуализировать полученные данные на карте. В этом руководстве мы будем заниматься геокодированием на Python с помощью библиотеки Geopy.
Что такое геокодирование?
Геокодирование – это процесс преобразования адресов (например, «Парковая дорога Амфитеатр, 1600, город Маунтин-Вью, штат Калифорния») в географические координаты (например, широта 37.423021 и долгота -122.083739), которые вы можете использовать для размещения маркеров на карте или позиционирования карты. Проще говоря, это вычислительный процесс преобразования описания физического адреса в местоположение на поверхности Земли.
Процесс геокодирования часто включает в себя интерполяцию пространственных объектов, таких как улицы или земельные участки, в географические границы карты. Полученные данные выводятся в виде числовых координат, пригодных для использования в пространственном анализе или визуализации карт.
При геокодировании используются различные источники данных для преобразования адреса в географическое местоположение. Первичным источником является справочная база данных улиц, содержащая названия и диапазоны адресов в пределах определенного округа или района. Другие источники включают базы данных почтовых индексов, базы данных названий городов и базы данных важных мест (например, парков или достопримечательностей).
Геокодирование – это не только получение координат по заданному адресу. Оно также используется в пространственном анализе, поиске данных и их обработке. К примеру, компании используют геокодирование для анализа демографической информации с целью проведения целевых маркетинговых кампаний или оптимизации маршрутов доставки. В сфере общественной безопасности геокодирование используется для определения местоположения чрезвычайных происшествий, чтобы оперативно направлять ближайшие службы спасения.
В контексте Data Science геокодирование является важным этапом в процессе создания геопространственных визуализаций и может использоваться в различных областях, таких как прогнозирование цен на недвижимость, оптимизация маршрутов доставки и разработка планов реагирования на стихийные бедствия.
Что такое Geopy?
Geopy – это библиотека Python с открытым исходным кодом, специализирующаяся на добавлении местоположения к данным с помощью сервисов геокодирования, таких как Google Maps, Open StreeMap и ArcGIS.
Пример реализации проекта по геокодированию на практике
В этой статье мы проанализируем массив данных канадских музеев с сайта Kaggle. В нем содержится информация о музеях, расположенных в Канаде. Эта подборка музеев может быть полезна для прогнозирования цен на жилье Airbnb в Торонто. Например, вы могли заметить, что стоимость аренды жилья увеличивается с приближением к таким интересным местам, как музеи, рестораны, кафе и так далее.
Давайте посмотрим на таблицу:
На изображении таблицы выше видно, что разные столбцы содержат информацию об объектах, включая название музея, адрес улицы, город, штат и почтовый индекс.
Для дальнейших действий нам понадобится уникальный столбец, который объединит всю информацию из этой таблицы. Как мы можем это сделать? Самый эффективный способ объединить более двух столбцов – это использовать pandas.series.str.cat()
, который дает нам возможность задать нужный разделитель между одним столбцом и другим:
Мы можем использовать строковую переменную 'address1'
, которая будет содержать уникальный адрес первой строки:
Мы будем использовать ее в следующих шагах, чтобы поэкспериментировать с различными сервисами геокодирования по отдельному адресу. Когда станет понятно, как Geopy определяет местоположение, это можно будет применить к целому столбцу DataFrame Pandas. Мы протестируем следующих крупнейших геопровайдеров:
- Google Maps
- OpenStreetMap
- ArcGIS
Геокодирование с помощью Google Maps API
Самый популярный метод преобразования адресов в координаты – это использование Google Maps API.
Хотя Google Maps предоставляет платные услуги, при первом создании аккаунта вы получаете 200 долларов в качестве бонусных кредитов.
Чтобы получить доступ к сервису, необходимо создать новый аккаунт на платформе Google Maps. Здесь вы найдете отличное руководство, которое поможет вам в процессе генерации ключа API.
GoogleV3
– это класс, предназначенный для использования API Google Maps v3. Для начала мы можем попробовать извлечь местоположение из одного адреса:
После этого мы можем попробовать выполнить эту операцию для значения unique_address
, которое мы создали ранее.
Мы можем использовать функцию apply()
, чтобы применить ее ко всем строкам unique_address
:
Геокодирование с помощью API OpenStreetMap
Поскольку OpenStreetMap – самая большая и свободно редактируемая географическая база данных и проект, API является бесплатным. Чтобы геолоцировать один адрес, достаточно указать в качестве исходных данных для класса Nominatim
электронную почту вашего аккаунта OSM, а не ключ API:
К сожалению, местоположение, возвращаемое API OpenStreetMap, равно None
, поскольку он не распознает адрес.
Действительно, этот API не может определить местоположение большинства адресов улиц в базе данных, поскольку не имеет достаточного охвата адресов во всех районах.
По этой причине нам необходимо создать еще одно значение unique_address_osm
с меньшим количеством информации:
После этого мы получаем новый адрес и снова пытаемся извлечь широту и долготу из адреса улицы:
Как и в предыдущем случае, мы применяем функцию service_geocode()
ко всем столбцам unique_address_osm
:
Несмотря на то что мы не указали название музея, OpenStreetMap возвращает координаты, аналогичные GoogleMapsAPI.
Геокодирование с помощью ArcGIS API
ArcGIS – это программное обеспечение, позволяющее анализировать и визуализировать геопространственные данные. Оно также предоставляет сервисы определения местоположения, такие как Google Maps и OpenStreetMap.
На этот раз проблем с получением пары координат не возникло. Мы можем продолжить выполнение этой операции для всех адресов:
Взглянув на первые строки массива данных, мы видим, что пары координат, полученные с помощью ArcGIS, аналогичны тем, что были получены ранее, присутствует лишь небольшая разница.
Измерение расстояния между двумя пунктами
Еще одна функциональность Geopy – возможность рассчитать расстояние между двумя точками. Для этого используется геодезическое расстояние, полученное между двумя парами (широта и долгота).
Расстояние между этими двумя музеями составляет около 2-х километров.
Вот и все! Вы узнали три разных способа преобразования адреса в широту и долготу с помощью Geopy. Это лишь отправная точка для более сложного и продвинутого анализа геопространственных данных.
Комментарии