Геокодинг с помощью API Яндекс Карт для визуализации в DataLens
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
В этом практическом руководстве вы научитесь преобразовывать адреса в геокоординаты с помощью API Геокодера
В качестве источника данных будут использованы данные из демонстрационной БД ClickHouse®.
- Подготовьте облако к работе.
- Получите ключ API Геокодера.
- Преобразуйте данные в DataSphere.
- Создайте подключение к файлу в DataLens.
- Создайте датасет на базе подключения.
- Создайте чарт.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Совет
Чтобы Yandex DataLens и Yandex DataSphere могли работать внутри сети Yandex Cloud, создавайте их экземпляры в рамках одной организации.
Необходимые платные ресурсы
В стоимость развертывания инфраструктуры входит плата за использование вычислительных ресурсов DataSphere.
Получите ключ API Геокодера
Получите ключ для использования API Геокодера:
-
Перейдите в Кабинет разработчика
и нажмите кнопку Подключить API. -
В открывшемся окне выберите JavaScript API и HTTP Геокодер и нажмите Продолжить.
-
Заполните форму и нажмите Продолжить.
-
В открывшемся окне нажмите Перейти к API.
-
В блоке Ключи API скопируйте значение ключа.
Преобразуйте данные в DataSphere
Создайте проект
- Откройте главную страницу
DataSphere. - На панели слева выберите
Сообщества. - Выберите сообщество, в котором вы хотите создать проект.
- На странице сообщества нажмите кнопку
Создать проект. - В открывшемся окне укажите имя и (опционально) описание проекта.
- Нажмите кнопку Создать.
Создайте секрет
Создайте секрет для хранения ключа API Геокодера:
- В блоке Ресурсы проекта на странице проекта нажмите
Секрет. - Нажмите кнопку Создать.
- В поле Имя задайте имя секрета —
API_KEY
. - В поле Значение введите значение ключа.
- Нажмите кнопку Создать. Откроется страница с информацией о созданном секрете.
Создайте ноутбук
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. -
Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
-
На верхней панели в окне проекта нажмите File и выберите New → Notebook.
-
Выберите ядро DataSphere Kernel и нажмите Select.
Установите зависимости
-
Вставьте в ячейку ноутбука указанный ниже код и нажмите значок
:%pip install requests %pip install clickhouse-driver
-
Перезагрузите ядро: на верхней панели в окне проекта нажмите Kernel → Restart Kernel.
Установите сертификаты
Установите сертификаты в локальное хранилище проекта:
#!:bash
mkdir --parents /home/jupyter/datasphere/project/Yandex/
wget "https://storage.yandexcloud.kz/cloud-certs/RootCA.pem" \
--output-document /home/jupyter/datasphere/project/Yandex/RootCA.crt
wget "https://storage.yandexcloud.kz/cloud-certs/IntermediateCA.pem" \
--output-document /home/jupyter/datasphere/project/Yandex/IntermediateCA.crt
Загрузите и преобразуйте данные
-
Создайте класс для работы с Геокодером:
import requests from dataclasses import dataclass @dataclass class YandexGeocoder: api_key: str geocoder_url: str = 'https://geocode-maps.yandex.ru/1.x' def adress_to_geopoint(self, address: str) -> str: # Преобразование адреса в геокоординаты в формате DataLens response = requests.get(self.geocoder_url, params={ 'apikey': self.api_key, 'geocode': address, 'format': 'json', }) response.raise_for_status() result = response.json()['response']['GeoObjectCollection']['featureMember'] if not result: return None lat, lon = result[0]['GeoObject']['Point']['pos'].split(' ') return self._to_datalens_format(lon, lat) def _to_datalens_format(self, lon, lat): return f'[{lon},{lat}]'
-
Подключитесь к демонстрационной БД ClickHouse®:
from clickhouse_driver import Client ch_client = Client( host='rc1a-ckg8nrosr2lim5iz.mdb.yandexcloud.net', user='samples_ro', password='MsgfcjEhJk', database='samples', port=9440, secure=True, verify=True, ca_certs='/home/jupyter/datasphere/project/Yandex/RootCA.crt' )
-
Выполните проверку с помощью команды:
print(ch_client.execute('SELECT version()'))
Если подключение установлено успешно, в терминале отобразится номер версии ClickHouse®.
-
Выгрузите данные из таблицы с адресами магазинов в переменную
ch_data
:ch_data = ch_client.execute('SELECT ShopName, ShopAddress FROM MS_Shops') ch_data
-
Преобразуйте адреса магазинов из колонки
ShopAddress
в геокоординаты:import os geocoder = YandexGeocoder(api_key=os.environ['API_KEY']) encoded_data = [ (name, geocoder.adress_to_geopoint(adress)) for name, adress in ch_data ] encoded_data
-
Сохраните полученные данные в файл:
import csv import sys csv_writer = csv.writer( sys.stdout, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL, ) filename = 'encoded_data.csv' with open(filename, 'w') as f: csv_writer = csv.writer( f, delimiter=',', quotechar='"', ) csv_writer.writerows(encoded_data)
На панели слева появится файл
encoded_data.csv
. -
Скачайте полученный файл — нажмите правой кнопкой мыши и выберите
Download
.
Создайте подключение к файлу в DataLens
-
Перейдите на главную страницу
DataLens. -
На панели слева выберите
Подключения и нажмите кнопку Создать подключение. -
В разделе Файлы и сервисы выберите подключение Файлы.
-
Нажмите кнопку Загрузить файлы и укажите файл
encoded_data.csv
. -
В правом верхнем углу нажмите кнопку Создать подключение.
-
Введите название подключения
geocoder_csv
и нажмите кнопку Создать.
Создайте датасет на базе подключения
-
В правом верхнем углу нажмите кнопку Создать датасет.
-
Перейдите на вкладку Поля.
-
Переименуйте поля:
field1
вНазвание магазина
;field2
вКоординаты
.
-
Для поля
Координаты
измените тип данных на Геоточка. -
В правом верхнем углу нажмите кнопку Сохранить.
-
Введите название датасета
geocoder_data
и нажмите кнопку Создать.
Создайте чарт
-
В правом верхнем углу нажмите кнопку Создать чарт.
-
Выберите тип визуализации Карта.
-
Перетащите поле
Координаты
в секцию Точки (Геоточки). -
Перетащите поле
Название магазина
в секцию Тултипы. -
В правом верхнем углу нажмите кнопку Сохранить.
-
Введите название чарта и нажмите кнопку Сохранить.
Как удалить созданные ресурсы
Если вы больше не планируете работать с проектом в DataSphere, удалите его.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc