Время прочтения: 4 мин.

PyDeck — библиотека Python с открытым кодом. Она позволяет с лёгкостью создавать гибко настраиваемые графики, гистограммы и другие средства визуализации данных. Всего за несколько минут и пару строк кода можно создать стильный график.

PyDeck позволяет создавать слои, на которых мы отображаем данные. Например, на одном слое мы можем отобразить данные за один период, а на другом – за другой период. При этом мы можем изобразить их разным цветом, размером и формой.

Одно из главных преимуществ – визуализация данных на карте нашей планеты. Перед тем как импортировать библиотеку себе в приложение, не забываем её установить, для этого необходимо прописать в консоли следующее:

pip install pydeck

Для примера использования библиотеки PyDeck необходим датасет. Я рандомно выбрал следующий: “Breweries & Brew Pubs in the USA”. В нём отображены все пабы и пивные магазины в городах США.

Скачать данный датасет можно по ссылке https://data.world/datafiniti/breweries-brew-pubs-in-the-usa

Выглядит он следующим образом:

Здесь мы можем увидеть 7000 строк, содержащих названия городов, категорию заведений и т.д. Нас же интересует колонка “city”, где указан город, в котором расположен данный объект.

Для построения карты нам необходимы координаты, получить их можно из датасета, содержащего все города США и их координаты.

Найти такой можно по ссылке:

https://simplemaps.com/static/data/us-cities/1.74/basic/simplemaps_uscities_basicv1.74.zip

Перейдем к коду.

Импортируем необходимые библиотеки:

import pydeck as pdk
import pandas as pd

Теперь необходимо собрать dataframe из наших датасетов, для этого нам нужно вместо городов первого датасета подставить координаты из второго датасета.

data = pd.read_csv('8260_1.csv')
cities = pd.read_csv('uscities.csv')[[‘city’, ‘lat’, ‘lng’]]

data = pd.merge(data,cities, on ='city')

Далее переходим непосредственно к библиотеке PyDeck.

Её главная особенность – наличие слоёв. Их можно создавать столько, сколько нам необходимо для задачи. Для нашего же случая, достаточно использовать один.

Итак, начнём.

layer = pdk.Layer(
#выбираем необходимый слой для нашей задачи. Данный слой автоматически подсчитывает количество точек с одинаковой координатой и выводит данные, визуально различая их по количеству совпадений (размер и цвет)
   		'HexagonLayer',
    		#передаем наш dataframe
data,
#указываем в каких столбцах содержатся данные о координатах объекта
    		get_position='[lon, lat]',
    		auto_highlight=True,
		#параметр, отвечающий за инкремент длины столбца значения на карте
   		elevation_scale=75,
    		pickable=True,
    		#диапазон длинны столбцов значений на карте
elevation_range=[0

Далее необходимо настроить карту так, чтобы камера при запуске указывала на США:

# Set the viewport location
view_state = pdk.ViewState(
	#координаты
    		longitude=-73.1,
    		latitude=40.1,
    		zoom=6,
		#наклон камеры
    		pitch=40.5)

Готово, осталось всего лишь создать экземпляр класса Deck из библиотеки PyDeck и передать в него данные:

r = pdk.Deck(
	#передаем слои (в нашем случае он один)
    		layers=[layer],	
    		initial_view_state=view_state,
		#указываем подсказки, которые будут отображаться, при наведении  курсора на объекты.
    		tooltip={
        			'html': '<b>Elevation Value:</b> {elevationValue}',
        			'style': {
            		‘color': 'white'
       			}
    		}
)

Все готово, осталось сохранить всё в html-страницу:

r.to_html('1.html')

Открываем файл в браузере и видим результат:

Приблизим карту:

Как видно на странице, чем больше объектов – пабов и пивных магазинов в одном городе, тем больше и столбец.

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

С другими типами слоёв данной библиотеки можно ознакомиться по ссылке: https://deckgl.readthedocs.io/en/latest/