DevGang
Авторизоваться

Создание интерактивных карт с помощью Folium и Python

Создание интересных интерактивных визуализаций может значительно улучшить понимание и воздействие данных.

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

В этой статье будет показано, как построить интерактивную карту на языке Python с помощью библиотеки Folium.

Карта будет содержать два слоя - один отображает местоположение и высоту вулканов, а другой - плотность населения стран. Это позволит читателям наглядно представить пространственную взаимосвязь между вулканами и численностью населения в мире.

Полный код можно найти в моем репозитории GitHub. Теперь посмотрите на интерактивную карту, чтобы понять, в чем суть, форкните её и приступайте к работе.

Сначала мы рассмотрим реализацию на языке Python с использованием Folium и Pandas. Это включает в себя чтение наборов данных, подготовку данных, настройку параметров карты, добавление слоев и маркеров, а также сохранение конечной визуализации.

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

Реализация

Для начала мы импортируем библиотеки Folium и Pandas, которые предоставляют необходимые функции отображения и инструменты работы с данными:

import folium
import pandas

Далее мы знакомимся с исходными данными по расположению вулканов и оценкам численности населения по странам:

data =pandas.read_csv('Volcanoes.txt')

Это позволяет получить массив данных Pandas со столбцами широты, долготы и высоты над уровнем моря для более чем 1500 вулканов по всему миру.

Для получения данных о населении стран мы будем использовать файл GeoJSON 'world.json', содержащий контуры полигонов и статистику населения для всех стран. GeoJSON - это формат обмена географическими данными, который хорошо работает с такими картографическими библиотеками, как Folium.

Мы можем разобрать и извлечь нужные нам ключевые столбцы данных из фрейма данных вулкана:

lat = list(data["LAT"])
lon = list(data["LON"])
ele = list(data["ELEV"])

Это позволяет получить списки широт, долгот и высот для каждого вулкана для построения графика.

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

def colour_marker(elevation):
if elevation < 1000:
    return 'red'
elif 1000 <= elevation < 3000:
    return 'orange'
else:
    return 'green'

Более низкие высоты будут окрашены в красный цвет, средние - в оранжевый, а более высокие - в зеленый. Это позволяет визуально отобразить на карте высоту вулкана.

Теперь, когда данные разобраны, мы можем создать базовую карту Folium с центром в Северной Америке:

map = folium.Map(location=[38.58, -99.08], zoom_start=6, tiles='OpenStreetMap')

Мы добавляем два слоя FeatureGroup - один для вулканов, другой для данных о населении. FeatureGroups в Folium позволяют легко включать/выключать видимость различных элементов карты.

f = folium.FeatureGroup(name="Volcanoes")
fg = folium.FeatureGroup(name="Population")

Внутри этих групп мы можем добавить соответствующие маркеры и наложения. Для вулканов мы перебираем списки lat/lon/elev, чтобы добавить для каждого из них маркер CircleMarker:

for lt, ln, el in zip(lat, lon, ele):
    f.add_child(folium.CircleMarker(location=[lt, ln], radius=6, popup=str(el)+" m",
    fill_color=colour_marker(el), color = 'grey', fill=True, fill_opacity=0.7))

Маркеры CircleMarkers окрашиваются функцией elevation color и имеют размер, определяемый параметром radius. При наведении появляется всплывающее окно с указанием высоты.

Для слоя "Население" мы добавляем наложение хороплета на основе данных GeoJSON:

fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), 
    style_function=lambda x: {'fillColor':'green' if x['properties']['POP2005'] < 10000000 
     else 'orange' if 10000000 <= x['properties']['POP2005'] < 20000000 else 'red'}))

Это позволяет раскрасить многоугольник каждой страны в зависимости от пороговых значений численности населения. В свойствах GeoJSON указывается значение численности населения для каждого полигона.

Наконец, мы добавляем на карту слои вулкана и населения с помощью элементов управления слоями:

map.add_child(f)
map.add_child(fg)  
map.add_child(folium.LayerControl())

Элемент управления слоями добавляет тумблер, позволяющий включать/выключать различные слои данных.

Затем мы можем экспортировать готовую карту в HTML-файл для локального просмотра:

map.save("Population_Volcanoes.html")

Обзор и анализ

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

  • Вулканы сосредоточены в отдельных регионах, связанных с границами тектонических плит, таких как Тихоокеанское огненное кольцо вокруг Тихого океана. Высоко расположенные вулканы, выделенные зеленым цветом, находятся вдоль активных континентальных границ.
  • Вулканы меньшей высоты, выделенные красным цветом, находятся во внутриплитных горячих точках, таких как Гавайи и Йеллоустон в США. В этих регионах активные вулканы расположены вдали от границ крупных плит.
  • Густонаселенные центры Азии и Европы находятся вдали от большинства вулканов, в то время как страны Центральной и Южной Америки с умеренной численностью населения расположены непосредственно в вулканических зонах. Это подчеркивает значительный вулканический риск для таких стран, как Мексика, Колумбия и Индонезия.
  • Африка и Антарктида отличаются малочисленностью вулканов и населения, в то время как Австралия содержит вулканы на более низких высотах в менее населенных районах.
  • В целом, степень пространственной взаимосвязи между вулканами и населением стран позволяет получить важные сведения для планирования чрезвычайных ситуаций и геологического моделирования активных регионов.

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

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

В целом эта карта способствует более глубокому пониманию расположения вулканов в мире и их связи с населением. Python и Folium позволяют создать ее всего за 20 строк кода.

Заключение

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

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

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

Folium - одна из многих мощных геопространственных библиотек Python, включая GeoPandas, Descartes и Contextily. Каждая из них предоставляет дополнительные возможности для работы с векторными и растровыми типами данных, выполнения пространственного анализа, создания статических и динамических карт. Использование этих инструментов открывает безграничные возможности для создания специализированных картографических приложений.

Будь то визуализация вулканических рисков, моделирование закономерностей изменения климата или понимание городской динамики, интерактивные карты обеспечивают значительную ценность. Они превращают абстрактные наборы данных в осязаемые истории и выводы. Язык Python зарекомендовал себя как привлекательный вариант для создания настраиваемых и интересных картографических визуализаций для любой области.

Надеюсь, вам понравилось читать это руководство, и вы почувствовали мотивацию начать свой путь в программировании на Python!

Ресурсы

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу