Разработка
NTA

Как создать интерактивную карту через Folium?

Визуализация данных – это то, что помогает нам легче понять и обработать большие или маленькие массивы «сухих» цифр.

В этой статье я расскажу о своем опыте работы с одним из инструментов визуализации в форме интерактивной карты на Jupyter Notebook — Folium. Folium позволяет объединить экосистему языка программирования Python и Open Source библиотеку для построения интерактивных карт для сайтов Leaflet.js.

Цель создания интерактивной карты в моем случае – показать наглядно филиалы банка, в которых предоставляется услуга регистрации в Единой биометрической системе для клиентов физических лиц по данным официального сайта банка и bio.rt.ru, а также долю таких филиалов по регионам российской Федерации.

Для работы с Folium импортируем библиотеку:

import folium

И создаем главный объект, к которому будем добавлять остальные – карту:

m = folium.Map(location=[63.391522, 96.328125], zoom_start=3)

Здесь location – координаты центра отображаемой карты, zoom_start – первоначальный масштаб.

Добавим к карте регионы РФ с заполнением цветом в соответствии с долей филиалов банка с услугой регистрации – хороплет. Для отображения контуров регионов необходим файл в формате GeoJSON, и его можно взять здесь из архива – это admin_level_4.geojson. Данные для заполнения цветом возьмем из предварительно подготовленного датафрейма DF с долями share и region_ID регионов, совпадающими с ID регионов из файла GeoJSON.

rel_ = folium.Choropleth( geo_data = path_to_ GeoJSON_file, name = 'Отношение числа филиалов с ЕБС ко всем', data = DF, columns=['REGION_ID', 'share'], key_on='id', bins = 5, fill_color='BuGn', nan_fill_color='darkblue', nan_fill_opacity=0.5, fill_opacity=0.7, line_opacity=0.2, legend_name= 'Отношение числа филиалов с ЕБС ко всем', highlight = True, show = False )

Добавляем слой хороплета к карте:

rel_.add_to(m)

Теперь можно увидеть общую картину по доступности услуги регистрации в ЕБС в филиалах банка по регионам РФ.

Добавим на карту отдельные филиалы банка с разделением по доступности услуги регистрации – маркеры двух цветов. Данные с официального сайта банка и bio.rt.ru, включая координаты филиалов, собираем через request, выделяем из них координаты и наименования филиалов.

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

Создадим группы для маркеров:

feature_group_EBS = folium.FeatureGroup(name = 'Филиалы с регистрацией ЕБС', show = False) feature_group_nonEBS = folium.FeatureGroup(name = 'Филиалы без регистрации ЕБС', show = False)

Подготовим кластеры:

from folium.plugins import MarkerCluster marker_cluster_EBS = MarkerCluster(name = ' cluster_ EBS ', popups = 'Филиалы с регистрацией ЕБС ', show = False, icon_create_function=icon_green) marker_cluster_nonEBS = MarkerCluster(name = ' cluster_nonEBS ', popups = 'Филиалы без регистрации ЕБС ', show = False, icon_create_function = icon_red)

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

Добавляем маркеры филиалов в соответствующие кластеры:

for lt, ln, filial_name in zip(latitude_EBS, longitude_EBS, name_EBS): marker_EBS = folium.Marker( [lt, ln], popup = filial_name, icon = folium.Icon(color='green',icon='ok-sign')) marker_cluster_EBS.add_child(marker_EBS)

Добавляем кластеры в слой соответствующей группы:

feature_group_EBS.add_child(marker_EBS) feature_group_nonEBS.add_child(marker_nonEBS)

Группы добавляем на карту:

feature_group_EBS.add_to(m) feature_group_nonEBS.add_to(m)

Важно наличие на карте элемента по контролю слоев, с помощью которого можно включить/выключить показ элементов. Ранее в параметрах хороплета, маркеров и кластеров параметр show указан со значением False – при загрузке на карте слои не показаны.

folium.LayerControl(collapsed=True).add_to(m)

Результат можно выгрузить в отдельный HTML файл и просматривать в любом браузере, при условии доступности ресурса www.openstreetmap.org:

m.save('map.html')

В итоге, можно оценить распространённость услуги как по регионам, так и отдельным населенным пунктам.

Связка Jupyter Notebook и Folium предоставляет максимально гибкий инструмент по визуализации данных, имеющих картографическую привязку.

{ "author_name": "NTA", "author_type": "editor", "tags": [], "comments": 2, "likes": 6, "favorites": 24, "is_advertisement": false, "subsite_label": "dev", "id": 242585, "is_wide": true, "is_ugc": false, "date": "Wed, 05 May 2021 20:10:28 +0300", "is_special": false }
0
2 комментария
Популярные
По порядку
0

Не очень понятен тайный смысл этого действа. Leaflet - клиентская js библиотека, которой от сервера, собственно, ничего не надо. В любом случае уже на клиенте идут вызовы в нее с командами "нарисуй клизму в такой-то координате". Этот самый Folium выглядит как непонятный посредник с непонятными возможностями по кастомизации. В общем, как по мне странное решение, в оправдание которому могу придумать разве что полное нежелание использовать js код.

Ответить
0

Согласны, что можно было реализовывать и через js минуя "костыль" в виде Folium, но дело все в автоматизации и быстроте реализации. В описанной ситуации Folium-Leaflet использовались на последнем этапе - визуализации, на предыдущих этапах - только Python с многими другими модулями. В рамках описанной задачи посчитали более подходящим использование возможностей Python в части генерации js-кода.

Ответить
Читать все 2 комментария
Браузер Brave от сооснователя Mozilla запустил бета-версию собственного поисковика Статьи редакции

Он не отслеживает данные пользователей.

Главная страница
Опять сгорели дедлайны, хотя ты распланировал весь день?
Бекап всему голова: как сохранять, чтобы потом не восстанавливать
Как Яндекс забирает «хлеб» у рекламных агентств — алгоритмы Директа в B2B-тематике

Стоит ли использовать автостратегии Яндекс Директа при малом количестве конверсий, да еще в B2B-тематике? История про роботов, научившихся продавать подшипники. Кейс интернет-магазина PodTrade

Декаданс венчурного капитала: как взращиваются современные «единороги»

DoorDash предлагал клиентам пиццу за $16 из ресторана, где она стоит $24. Сервис проката самокатов Bird терял $27 на каждые заработанные $10. Примеров компаний, предоставляющих субсидируемый инвесторами сервис, масса: Uber, WeWork, Airbnb и другие. Весь их «дисрапшн» — продажа доллара за полцены.

В Москве запретят ходить в кафе без прививки, отрицательного теста на Covid-19 или антител: как это будет работать Статьи редакции

Проверять их будут по QR-кодам.

Уроки 2020 года или как мы выросли в два раза быстрее рынка

Прошедший год для всех стал настоящим испытанием. Мы расскажем вам о том, как мы прошли эту полосу препятствий, помогли преодолеть ее нашим клиентам и сотрудникам и какие уроки вынесли из 2020.

ТМК и Агентство инноваций Москвы запустили акселерационную программу для московских стартапов

Трубная Металлургическая Компания (ТМК) и Агентство инноваций Москвы запустили акселерационную программу в рамках трека «Московского акселератора» PipeIndustryTech.

Независимая лаборатория не смогла найти тунец в сэндвиче с тунцом из Subway — NYT Статьи редакции

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

Лондонский хедж-фонд, ставивший на падение акций GameStop, объявил о закрытии Статьи редакции

Но бунт трейдеров с Reddit — это не основная причина закрытия фонда, который управлял активами на $440 млн.

Кейс. Как увеличить конверсию приложения на 6,3% за счет графического ASO?

Показываем на примере приложения для занятий спортом, как с помощью качественной и продающей графики на странице в Google Play увеличить конверсию из просмотра в установку на 6,3%. Бонус: пять примеров конвертирующей графики.

Комментарии
null