История путешествий вместе с Plotly Express

История путешествий вместе с Plotly Express


Библиотека Plotly Express

Прежде чем погрузиться в мир интерактивных карт, проверим наличие необходимых инструментов. На компьютере должны быть установлены: Python, популярная библиотека для обработки данных pandas и высокоэффективная библиотека для визуализации данных Plotly Express.

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

Plotly Express требует Plotly в качестве зависимости. Ее можно установить с помощью conda или pip.

Установка с condaconda install -c plotly plotly_express.

Установка с pippip install plotly.

Для установки pandas используем conda install pandas или pip install pandas.

Код 

Код запускается в JupyterLab, представлен и описан ячейками. Три ячейки выполняют следующие задачи: 

  1. Импорт библиотек и установка цвета для элементов карты, таких как страны и океаны. 
  2. Создание списка посещенных стран и преобразование его в датафрейм pandas.
  3. Отображение датафрейма в виде картограммы посредством Plotly Express.

Импорт библиотек и установка цветов

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

import plotly.express as px
import pandas as pd

# Определение цвета для элементов карты:
visited_color = 'tan'  
unvisited_color = 'white'
border_color = 'darkgray'
ocean_color = 'lightblue'

Список стран 

На этом этапе готовим для Python список всех стран, в которых вы когда-либо проживали и которые посещали. Для обеспечения согласованности и точности данных Plotly соблюдает стандарт ISO 3166 для кодов и названий стран. Если вы не уверены в корректности названия, например “Соединенные Штаты” или “Соединенные Штаты Америки”, посетите данный сайт

Далее преобразуем этот список в датафрейм pandas pd.DataFrame для удобства использования с Plotly Express:

# Список стран, которые я посетил или проживал:
countries_visited = ['Australia', 'Portugal', 'United States', 'Canada',
                     'Mexico', 'Bahamas', 'Scotland', 'England', 'France', 
                     'Spain', 'Norway', 'Italy', 'Greece', 'Turkey', 
                     'New Zealand',  'Kazakhstan', 'Hungary', 'Egypt', 'Nigeria', 
                     'Qatar', 'Bahrain', 'United Arab Emirates', 'Malaysia', 
                     'United Kingdom', 'Iceland']

# Преобразование списка в датафрейм для Plotly Express:
df = pd.DataFrame({'Country': countries_visited})
df.head()
Первые 5 строк датафрейма

Построение карты 

Plotly Express поставляется со встроенными методами для построения более 30 стандартных типов графиков. Картограмма создается методом px.choropleth(). Такие карты применяют цвета для отображения значений в определенных областях. В данном случае значение 1 обозначает посещенную страну, а значение 0  — непосещенную. Область представляет собой страну на карте. 

Обратите внимание, как используются переменные “цвета”, присвоенные в первой ячейке, в качестве аргументов методов. Также отметим тот факт, что Plotly Express работает как со словарями, так и с датафреймами: 

# Определение изображения:
fig = px.choropleth(df, 
                    width=1000, height=700,
                    locations='Country', 
                    locationmode='country names', 
                    color_discrete_sequence=[visited_color])

# Выбор проекции, элементов карты, цвета:
fig.update_geos(projection_type="natural earth", 
                showcountries=True, 
                countrycolor=border_color,
                showland=True, landcolor=unvisited_color, 
                showocean=True, oceancolor=ocean_color,
                showlakes=False, 
                showrivers=False, 
                showframe=True)

# Отключение легенды и форматирование заголовка Title: 
fig.update_layout(showlegend=False,
                  title={'text': "Countries I've Visited",
                         'y': 0.90,
                         'x': 0.5,
                         'xanchor': 'center',
                         'yanchor': 'top',
                         'font': {'size': 45,
                                  'family': 'Times New Roman'}})
Готовая карта путешествий 

На этой карте все посещенные страны обозначены одним цветом (коричневым), и отсутствует легенда. Plotly Express обходится без нее. Чтобы узнать название страны, вы просто наводите на нее курсор, после чего появляется всплывающее окно: 

Карта путешествий с активным всплывающим окном для Нигерии 

В Plotly Express данные, появляющиеся при наведении курсора, могут включать несколько столбцов датафрейма. Такая особенность позволяет вносить больше информации в всплывающее окно, например даты посещения стран, сопровождающие лица и т. д. Попробуйте уместить все это на физической карте! 

Помимо всплывающих подсказок, Plotly Express предоставляет функциональности масштабирования и панорамирования для более удобной работы с картой. Вы можете экспортировать карту в виде HTML-файла и свободно обмениваться ею с друзьями и семьей. А можете встроить ее в сайт или блог. 

Добавление легенды 

Как по мне, так созданная карта выглядит отлично, но при желании можно добавить легенду. В этом случае меняем код из раздела “Построение карты” на следующий скрипт: 

# Сортировка датафрейма для перечисления стран в легенде согласно заданному порядку. 
df = df.sort_values(by='Country', ascending=True)

# Установка цвета с помощью столбца "Country" и применение дискретной цветовой последовательности:
fig = px.choropleth(df, 
                    width=1000, height=700,
                    locations='Country', 
                    locationmode='country names', 
                    color='Country',
                    color_discrete_sequence=px.colors.qualitative.Light24)

fig.update_geos(projection_type="natural earth", 
                showcountries=True, 
                countrycolor=border_color,
                showland=True, landcolor=unvisited_color, 
                showocean=True, oceancolor=ocean_color,
                showlakes=False, 
                showrivers=False, 
                showframe=True)

# Включение легенды и изменение положения заголовка Title:
fig.update_layout(showlegend=True,
                  title={'text': "Countries I've Visited",
                         'y': 0.85,
                         'x': 0.445,
                         'xanchor': 'center',
                         'yanchor': 'top',
                         'font': {'size': 40}})
Карта путешествий с легендой, содержащей список посещенных стран

Если кажется, что голубой цвет океана не сочетается с цветами легенды, то следует просто изменить переменную ocean_color на white и перезапустить код: 

Карта путешествий с легендой и ocean color, установленным в значение white 

Проблема здесь в том, что дискретные цветовые шкалы Plotly предоставляют не более 24 цветов. Если вы побывали более чем в 24 странах, то цвета начнут повторяться. Например, в данном случае одинаковыми цветами обозначены Австралия и США. Решается эта проблема путем создания собственной цветовой шкалы в соответствии с инструкциями на сайте Plotly. 

Дополнительные идеи по созданию карты 

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

Для визуализации деталей путешествия на карте можно преобразовать названия мест в географические координаты. Такой процесс называется геокодирование. Он позволяет Plotly Express точно отображать места путешествий. К счастью, эта библиотека легко интегрируется с сервисами геокодирования, такими как Mapbox, что значительно упрощает решение этой задачи. 

Заключение 

Создание интерактивной карты путешествий не требует физической стены или финансовых затрат. С помощью Python, pandas и Plotly Express вы сможете создать отличную интерактивную карту с отображением всех совершенных путешествий. Благодаря рассмотренному проекту в вашем распоряжении есть инструменты и необходимые знания, чтобы начать картографическую историю собственных приключений! 


Перевод статьи Lee VaughanKeep Track of Your Travels With Plotly Express



Report Page