Путь к мастерству: создаём веб-карту на Python

целебная сила

Хотите стать мастером в Python? Тогда изучайте язык на практике. В этом материале рассказываем, как создать веб-карту на Python.

В первой части мы создали интерактивный словарь на Python. Теперь, попробуем сделать что-то вроде Google Maps, а поможет нам в этом Folium.

Путь к мастерству: создаём веб-карту на Python

Шаг №0 − обо всем по порядку

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

Если вы ещё совсем новичок и не знаете, как устанавливать внешние библиотеки, рекомендуем использовать pip − систему управления пакетами и библиотеками. Чтобы установить pip, выполните следующую команду в терминале:

#Python 3.x
sudo apt install python3-pip

#Python 2.x
sudo apt install python-pip

12345 #Python 3.xsudo apt install python3-pip #Python 2.xsudo apt install python-pip

Успех! Вы только что установили pip, и теперь готовы к установке первой библиотеки. Чтобы установить библиотеку folium, выполните:

pip install folium

1 pip install folium

Отлично. Все зависимости (причудливый термин для инструментов, необходимых для запуска программы) установлены, вы готовы к работе.

Шаг №1 − Создание базовой карты

Напоминаем, что наш подход заключается в том, чтобы начинать с меньшего. Давайте создадим базовую карту − сначала нужно импортировать библиотеку. Теперь мы создаем нашу карту с помощью folium.Map, которая берет местоположение, с которого будет загружаться карта. Вы можете добавить дополнительные функции, вроде масштабирования, но об этом позже. В целом, то, что хотели, мы получили, сохраните результат.

Примечание: после выполнения команды map.save() карта сохраняется в текущем рабочем каталоге. Следовательно, вам нужно запустить файловый менеджер, перейти в каталог, в котором вы работаете, и с помощью браузера запустить оттуда файл «map1.html».

import folium

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8)

map.save(«map1.html»)

12345 import folium map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Шаг №2 − Создание маркера

Маркер, точка на карте, является крайне важной штукой − без него ориентироваться было бы значительно труднее. Давайте добавим маркер на нашу карту с помощью folium.Marker, который принимает местоположение, где нужно установить маркер, задает внешний вид всплывающего окна и других параметров.

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

import folium

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8, tiles = «Mapbox bright»)

folium.Marker(location=[37.4074687,-122.086669], popup = «Google HQ», icon=folium.Icon(color = ‘gray’)).add_to(map)

map.save(«map1.html»)

1234567 import folium map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8, tiles = «Mapbox bright») folium.Marker(location=[37.4074687,-122.086669], popup = «Google HQ», icon=folium.Icon(color = ‘gray’)).add_to(map) map.save(«map1.html»)

Заметили кое-что? Мы добавили еще один параметр в нашу базовую карту. Есть идеи, что это? Нет? Хорошо, посмотрите на карту.

Путь к мастерству: создаём веб-карту на Python

«tiles» − это параметр, позволяющий изменить фон карты или выделить рельеф.

Шаг №3 — Добавляем несколько маркеров

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

import folium

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8, tiles = «Mapbox bright»)

for coordinates in [[37.4074687,-122.086669],[37.8199286,-122.4804438]]:
folium.Marker(location=coordinates, icon=folium.Icon(color = ‘green’)).add_to(map)

map.save(«map1.html»)

12345678 import folium map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 8, tiles = «Mapbox bright») for coordinates in [[37.4074687,-122.086669],[37.8199286,-122.4804438]]:    folium.Marker(location=coordinates, icon=folium.Icon(color = ‘green’)).add_to(map) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Шаг №4 − Добавление маркеров из данных

Сейчас наша карта выглядит аккуратно, но что, если у вас есть 500 маркеров? Мы же не будем создавать каждый по отдельности? Нужно загрузить базу данных и извлечь релевантную информацию, чтобы построить свои маркеры. Например, здесь мы добавили данные о местоположении вулканов в США. Сами данные можно посмотреть здесь.

комплекс средств для потенции бесплатно

Сначала мы загружаем данные с помощью Python библиотеки Pandas, которая является одной из наиболее популярных для работы с данными. Основную информацию о технологии можно почитать здесь. Файл с данными содержит столбцы с названиями вулканов, высотой, широтой и долготой. Нужно извлечь эти данные и сохранить их в переменных − для этого используйте цикл for.

import folium
import pandas as pd

data = pd.read_csv(«Volcanoes_USA.txt»)
lat = data[‘LAT’]
lon = data[‘LON’]
elevation = data[‘ELEV’]

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright»)

for lat, lon, elevation in zip(lat, lon, elevation):
folium.Marker(location=[lat, lon], popup=str(elevation)+» m», icon=folium.Icon(color = ‘gray’)).add_to(map)

map.save(«map1.html»)

1234567891011121314 import foliumimport pandas as pd data = pd.read_csv(«Volcanoes_USA.txt»)lat = data[‘LAT’]lon = data[‘LON’]elevation = data[‘ELEV’] map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright») for lat, lon, elevation in zip(lat, lon, elevation):    folium.Marker(location=[lat, lon], popup=str(elevation)+» m», icon=folium.Icon(color = ‘gray’)).add_to(map) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Шаг №5 - Цвета

Вы добавили все маркеры, но они одного цвета, а это не очень удобно. Итак, давайте сгруппируем их по высоте − меньше 1 000 метров, между 1 000 и 3 000 и больше 3 000 метров, а затем установим зеленый, оранжевый и красный цвета соответственно.

Создайте функцию, используя простые циклы if-else, вызовите ее вместо определения цвета.

import folium
import pandas as pd

data = pd.read_csv(«Volcanoes_USA.txt»)
lat = data[‘LAT’]
lon = data[‘LON’]
elevation = data[‘ELEV’]

def color_change(elev):
if(elev < 1000):
return(‘green’)
elif(1000 <= elev <3000):
return(‘orange’)
else:
return(‘red’)

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright»)

for lat, lon, elevation in zip(lat, lon, elevation):
folium.Marker(location=[lat, lon], popup=str(elevation), icon=folium.Icon(color = color_change(elevation))).add_to(map)

map.save(«map1.html»)

12345678910111213141516171819202122 import foliumimport pandas as pd data = pd.read_csv(«Volcanoes_USA.txt»)lat = data[‘LAT’]lon = data[‘LON’]elevation = data[‘ELEV’] def color_change(elev):    if(elev < 1000):        return(‘green’)    elif(1000 <= elev <3000):        return(‘orange’)    else:        return(‘red’) map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright») for lat, lon, elevation in zip(lat, lon, elevation):    folium.Marker(location=[lat, lon], popup=str(elevation), icon=folium.Icon(color = color_change(elevation))).add_to(map) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Шаг №6 — Измените значки

Допустим, текущая иконка выглядит хорошо, но ведь можно найти лучше! Она слишком большая, как-то несовременно получается, поменяем её.

import folium
from folium.plugins import MarkerCluster
import pandas as pd

data = pd.read_csv(«Volcanoes_USA.txt»)
lat = data[‘LAT’]
lon = data[‘LON’]
elevation = data[‘ELEV’]

def color_change(elev):
if(elev < 1000):
return(‘green’)
elif(1000 <= elev <3000):
return(‘orange’)
else:
return(‘red’)

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright»)

for lat, lon, elevation in zip(lat, lon, elevation):
folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+» m», fill_color=color_change(elevation), color=»gray», fill_opacity = 0.9).add_to(map)

map.save(«map1.html»)

1234567891011121314151617181920212223 import foliumfrom folium.plugins import MarkerClusterimport pandas as pd data = pd.read_csv(«Volcanoes_USA.txt»)lat = data[‘LAT’]lon = data[‘LON’]elevation = data[‘ELEV’] def color_change(elev):    if(elev < 1000):        return(‘green’)    elif(1000 <= elev <3000):        return(‘orange’)    else:        return(‘red’) map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «Mapbox bright») for lat, lon, elevation in zip(lat, lon, elevation):    folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+» m», fill_color=color_change(elevation), color=»gray», fill_opacity = 0.9).add_to(map) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Теперь выглядит на порядок лучше. Что можно сделать, чтобы это выглядело потрясающе? Добавьте ночной режим! Чтобы инвертировать цвета, можно использовать tiles= «CartoDB dark_matter».

Путь к мастерству: создаём веб-карту на Python

Шаг №7 − Кластеризация маркеров

Это выглядит красиво, но что, если вы ограничены количеством маркеров на один штат США? Давайте сгруппируем все маркеры и при увеличении карты кластер будет меняться.

Во-первых, нужно создать кластер, используя метод MarkerCluster, который вы найдете в библиотеке folium.plugins, и вместо того, чтобы добавлять все маркеры на нашу карту через .add_to (map), мы добавим их в наш кластер через .add_to (имя кластера), который в нашем случае − .add_to (marker_cluster). Ниже пример того, что у нас получилось. При увеличении и уменьшении масштаба карты, все кластеры будут разворачиваться и свертываться.

import folium
from folium.plugins import MarkerCluster
import pandas as pd

data = pd.read_csv(«Volcanoes_USA.txt»)
lat = data[‘LAT’]
lon = data[‘LON’]
elevation = data[‘ELEV’]

def color_change(elev):
if(elev < 1000):
return(‘green’)
elif(1000 <= elev <3000):
return(‘orange’)
else:
return(‘red’)

map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «CartoDB dark_matter»)

marker_cluster = MarkerCluster().add_to(map)

for lat, lon, elevation in zip(lat, lon, elevation):
folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+» m», fill_color=color_change(elevation), color=»gray», fill_opacity = 0.9).add_to(marker_cluster)

map.save(«map1.html»)

12345678910111213141516171819202122232425 import foliumfrom folium.plugins import MarkerClusterimport pandas as pd data = pd.read_csv(«Volcanoes_USA.txt»)lat = data[‘LAT’]lon = data[‘LON’]elevation = data[‘ELEV’] def color_change(elev):    if(elev < 1000):        return(‘green’)    elif(1000 <= elev <3000):        return(‘orange’)    else:        return(‘red’) map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = «CartoDB dark_matter») marker_cluster = MarkerCluster().add_to(map) for lat, lon, elevation in zip(lat, lon, elevation):    folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+» m», fill_color=color_change(elevation), color=»gray», fill_opacity = 0.9).add_to(marker_cluster) map.save(«map1.html»)

Путь к мастерству: создаём веб-карту на Python

Заключение

Ну вот и всё. В этом материале мы рассказали о том, что такое pip, и как его использовать, что такое Folium, геопространственные данные, как их визуализировать с помощью Folium, и параллельно создали веб-карту на Python. Это, по сути, основы визуализации на Python. Если вам была интересна эта тема, то стоит продолжать развиваться, потому что она открывает большие карьерные перспективы.

Понравился материал о том, как сделать веб-карту на Python? Возможно, вас заинтересует следующее:

  • Введение в создание веб-приложений на Python
  • ТОП-15 трюков в Python 3, делающих код понятнее и быстрее
  • Обучение без учителя: 4 метода кластеризации данных на Python

Источник: Учимся создавать веб-карту на Python on Towards Data Science

Путь к мастерству: создаём веб-карту на Python

средство от простатита

Просмотров:

Добавить комментарий