Время прочтения: 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/