Share This
Связаться со мной
Крути в низ
Categories
//Геокодирование для Data Scientists. Вводное руководство с примерами

Геокодирование для Data Scientists. Вводное руководство с примерами

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 92e94a3 - Геокодирование для Data Scientists. Вводное руководство с примерами

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

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 9145ac0 - Геокодирование для Data Scientists. Вводное руководство с примерами

Когда вы работаете с реальными данными, вы не можете полагаться на то, что в базах содержится вся необходимая информация для реализации вашего проекта Data Science. Чаще всего вы располагаете частичной информацией и должны обогатить данные дополнительными характеристиками.

Может возникнуть ситуация, когда набор данных содержит адрес, но в то же время широта и долгота отсутствуют. В этом случае первым шагом для дополнения данных будет добавление этой пары координат. Мы называем этот процесс преобразования адреса в широту и долготу геокодированием.

Геокодирование востребовано во многих областях, таких как недвижимость, финансы и логистика. Без этой технологии вы не сможете анализировать и визуализировать полученные данные на карте. В этом руководстве мы будем заниматься геокодированием на Python с помощью библиотеки Geopy.

🐍 Библиотека питониста Больше полезных материалов вы найдете на нашем телеграм-канале«Библиотека питониста» 🐍🎓 Библиотека собеса по Python» Подтянуть свои знания по Python вы можете на нашем телеграм-канале«Библиотека собеса по Python» 🐍🧩 Библиотека задач по Python Интересные задачи по Python для практики можно найти на нашем телеграм-канале«Библиотека задач по Python»

Что такое геокодирование?

Геокодирование – это процесс преобразования адресов (например, «Парковая дорога Амфитеатр, 1600, город Маунтин-Вью, штат Калифорния») в географические координаты (например, широта 37.423021 и долгота -122.083739), которые вы можете использовать для размещения маркеров на карте или позиционирования карты. Проще говоря, это вычислительный процесс преобразования описания физического адреса в местоположение на поверхности Земли.

Процесс геокодирования часто включает в себя интерполяцию пространственных объектов, таких как улицы или земельные участки, в географические границы карты. Полученные данные выводятся в виде числовых координат, пригодных для использования в пространственном анализе или визуализации карт.

При геокодировании используются различные источники данных для преобразования адреса в географическое местоположение. Первичным источником является справочная база данных улиц, содержащая названия и диапазоны адресов в пределах определенного округа или района. Другие источники включают базы данных почтовых индексов, базы данных названий городов и базы данных важных мест (например, парков или достопримечательностей).

Геокодирование – это не только получение координат по заданному адресу. Оно также используется в пространственном анализе, поиске данных и их обработке. К примеру, компании используют геокодирование для анализа демографической информации с целью проведения целевых маркетинговых кампаний или оптимизации маршрутов доставки. В сфере общественной безопасности геокодирование используется для определения местоположения чрезвычайных происшествий, чтобы оперативно направлять ближайшие службы спасения.

В контексте Data Science геокодирование является важным этапом в процессе создания геопространственных визуализаций и может использоваться в различных областях, таких как прогнозирование цен на недвижимость, оптимизация маршрутов доставки и разработка планов реагирования на стихийные бедствия.

Что такое Geopy?

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 11a51bb - Геокодирование для Data Scientists. Вводное руководство с примерами

Библиотека Geopy

Geopy – это библиотека Python с открытым исходным кодом, специализирующаяся на добавлении местоположения к данным с помощью сервисов геокодирования, таких как Google Maps, Open StreeMap и ArcGIS.

Пример реализации проекта по геокодированию на практике

В этой статье мы проанализируем массив данных канадских музеев с сайта Kaggle. В нем содержится информация о музеях, расположенных в Канаде. Эта подборка музеев может быть полезна для прогнозирования цен на жилье Airbnb в Торонто. Например, вы могли заметить, что стоимость аренды жилья увеличивается с приближением к таким интересным местам, как музеи, рестораны, кафе и так далее.

Давайте посмотрим на таблицу:

         import pandas as pd import geopy  l_cols= ['Name','Street Address','City','State','Zipcode'] df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols) df = df[df.City=='Toronto'] df.head()      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami f5b4e36 - Геокодирование для Data Scientists. Вводное руководство с примерами

Информация об объектах

На изображении таблицы выше видно, что разные столбцы содержат информацию об объектах, включая название музея, адрес улицы, город, штат и почтовый индекс.

Для дальнейших действий нам понадобится уникальный столбец, который объединит всю информацию из этой таблицы. Как мы можем это сделать? Самый эффективный способ объединить более двух столбцов – это использовать pandas.series.str.cat(), который дает нам возможность задать нужный разделитель между одним столбцом и другим:

         df['Country'] = 'Canada' l_cols_concat = ['Street Address','City','State','Zipcode','Country'] df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='') df.head()      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 5a3cc2e - Геокодирование для Data Scientists. Вводное руководство с примерами

Мы можем использовать строковую переменную 'address1', которая будет содержать уникальный адрес первой строки:

         address1 = df['unique_address'].iloc[0] print(address1) # Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada      

Мы будем использовать ее в следующих шагах, чтобы поэкспериментировать с различными сервисами геокодирования по отдельному адресу. Когда станет понятно, как Geopy определяет местоположение, это можно будет применить к целому столбцу DataFrame Pandas. Мы протестируем следующих крупнейших геопровайдеров:

  1. Google Maps
  2. OpenStreetMap
  3. ArcGIS

Статья по теме 🗺 Работа с геоданными в Python и Jupyter

Геокодирование с помощью Google Maps API

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami d3dfa62 - Геокодирование для Data Scientists. Вводное руководство с примерами

Геокодирование с помощью Google Maps API

Самый популярный метод преобразования адресов в координаты – это использование Google Maps API.

Хотя Google Maps предоставляет платные услуги, при первом создании аккаунта вы получаете 200 долларов в качестве бонусных кредитов.

Чтобы получить доступ к сервису, необходимо создать новый аккаунт на платформе Google Maps. Здесь вы найдете отличное руководство, которое поможет вам в процессе генерации ключа API.

         GM_API_KEY = 'your_api_key' from geopy.geocoders import GoogleV3 geolocator = GoogleV3(api_key=GM_API_KEY)       

GoogleV3 – это класс, предназначенный для использования API Google Maps v3. Для начала мы можем попробовать извлечь местоположение из одного адреса:

         location = geolocator.geocode(address1) print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 0fe9bc0 - Геокодирование для Data Scientists. Вводное руководство с примерами

После этого мы можем попробовать выполнить эту операцию для значения unique_address, которое мы создали ранее.

         def service_geocode(g_locator, address):     location = g_locator.geocode(address)     if location!=None:       return (location.latitude, location.longitude)     else:       return np.NaN      

Мы можем использовать функцию apply(), чтобы применить ее ко всем строкам unique_address:

         df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x)) df[['unique_address','LAT_LON']].head()      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 6930cc0 - Геокодирование для Data Scientists. Вводное руководство с примерами

Геокодирование с помощью API OpenStreetMap

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 4694f57 - Геокодирование для Data Scientists. Вводное руководство с примерами

Геокодирование с помощью API OpenStreetMap

Поскольку OpenStreetMap – самая большая и свободно редактируемая географическая база данных и проект, API является бесплатным. Чтобы геолоцировать один адрес, достаточно указать в качестве исходных данных для класса Nominatim электронную почту вашего аккаунта OSM, а не ключ API:

         from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent="your_email") location = geolocator.geocode(address1) print(location) # None      

К сожалению, местоположение, возвращаемое API OpenStreetMap, равно None, поскольку он не распознает адрес.

Действительно, этот API не может определить местоположение большинства адресов улиц в базе данных, поскольку не имеет достаточного охвата адресов во всех районах.

По этой причине нам необходимо создать еще одно значение unique_address_osm с меньшим количеством информации:

         l_cols_concat = ['City','State','Country'] df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='') address1_osm = df['unique_address_osm'].iloc[0]      

После этого мы получаем новый адрес и снова пытаемся извлечь широту и долготу из адреса улицы:

         address1_osm = df['unique_address_osm'].iloc[0] location = geolocator.geocode(address1_osm) print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 95e4c63 - Геокодирование для Data Scientists. Вводное руководство с примерами

Как и в предыдущем случае, мы применяем функцию service_geocode() ко всем столбцам unique_address_osm:

         df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x)) df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami e6cde50 - Геокодирование для Data Scientists. Вводное руководство с примерами

Несмотря на то что мы не указали название музея, OpenStreetMap возвращает координаты, аналогичные GoogleMapsAPI.

Геокодирование с помощью ArcGIS API

ArcGIS – это программное обеспечение, позволяющее анализировать и визуализировать геопространственные данные. Оно также предоставляет сервисы определения местоположения, такие как Google Maps и OpenStreetMap.

         from geopy.geocoders import ArcGIS geolocator_arcgis = ArcGIS() location = geolocator_arcgis.geocode(address1) print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami e9cbccf - Геокодирование для Data Scientists. Вводное руководство с примерами

На этот раз проблем с получением пары координат не возникло. Мы можем продолжить выполнение этой операции для всех адресов:

         df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x)) df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami 1e9cac2 - Геокодирование для Data Scientists. Вводное руководство с примерами

Взглянув на первые строки массива данных, мы видим, что пары координат, полученные с помощью ArcGIS, аналогичны тем, что были получены ранее, присутствует лишь небольшая разница.

Измерение расстояния между двумя пунктами

Еще одна функциональность Geopy – возможность рассчитать расстояние между двумя точками. Для этого используется геодезическое расстояние, полученное между двумя парами (широта и долгота).

         from geopy.distance import geodesic point1 = df.LAT_LON_arcgis.iloc[0] point2 = df.LAT_LON_arcgis.iloc[1] distance = geodesic(point1, point2) print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))      

geokodirovanie dlja data scientists vvodnoe rukovodstvo s primerami be8b3ae - Геокодирование для Data Scientists. Вводное руководство с примерами

Расстояние между этими двумя музеями составляет около 2-х километров.

***

Вот и все! Вы узнали три разных способа преобразования адреса в широту и долготу с помощью Geopy. Это лишь отправная точка для более сложного и продвинутого анализа геопространственных данных.

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close