Мы рады объявить о выпуске Dash HoloViews. Это сотрудничество между проектами HoloViews и Dash позволяет создавать определенные классы интерактивных приложений Dash без необходимости вручную определять какие-либо обратные вызовы.

Два особенно эффективных варианта использования - это возможность автоматически связывать выборки на нескольких графиках (также известная как перекрестная фильтрация) и отображать большие наборы данных с помощью Datashader. Оба этих варианта использования могут быть реализованы поверх pandas, Dask или GPU-ускоренных фреймов данных cuDF.

Чтобы получить живую демонстрацию и сессию вопросов и ответов для Dash HoloViews с главным научным сотрудником Plotly, зарегистрируйтесь на наш вебинар 16 декабря!

Dash HoloViews только что был выпущен как часть версии 1.14 HoloViews. Вы можете установить его сегодня с помощью pip:

$ pip install holoviews==1.14

Обзор HoloViews

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

Хотя HoloViews можно использовать для создания большого количества визуализаций, для пользователей Dash это особенно полезно в двух случаях: автоматическое связывание выборок на нескольких графиках и отображение больших наборов данных с помощью Datashader.

HoloViews также предоставляет единый интерфейс для различных структур данных, что упрощает начало работы с визуализации небольших фреймов данных pandas, а затем масштабирование до графических ускорителей RAPIDS cudf DataFrames или больших, чем Dask DataFrames памяти.

Для получения дополнительной справочной информации см. Основную документацию HoloViews по адресу https://holoviews.org/.

Обзор Dash

Dash - это самый простой способ создания высокомасштабируемых аналитических веб-приложений с использованием чистого Python, R или Julia. Он загружается более 350000 раз в месяц и используется любителями, исследователями и предприятиями для обмена результатами анализа и визуализации данных, а также для реализации моделей машинного обучения и науки о данных.

Для пользователей HoloViews Dash предоставляет новую технологию развертывания с отличными характеристиками масштабируемости. В отличие от других технологий, которые можно использовать для развертывания информационных панелей HoloViews (Bokeh, Panel и Voila), Dash уникален тем, что хранит все данные сеанса на уровне пользователя исключительно в веб-браузере пользователя. Это означает, что требования к памяти сервера зависят только от самого приложения и не увеличиваются линейно с количеством одновременных пользователей.

Архитектура Dash не только позволяет одному серверу поддерживать множество одновременных пользователей, но также упрощает горизонтальное масштабирование приложения на нескольких серверах с помощью балансировщика нагрузки, такого как NGINX или Dash Enterprise Kubernetes.

Связывание выборок

HoloViews предоставляет действительно мощное link_selections преобразование, которое автоматизирует процесс настройки связанных выборок на графиках. Это довольно сложная функция, которая понимает семантику того, как каждый тип графика был сгенерирован из исходного набора данных, и как выборки в локальных координатах графика представляют собой символические выражения, которые можно использовать для фильтрации исходного набора данных. Для получения дополнительной информации см. Раздел Связанная чистка документации HoloViews.

Благодаря Dash HoloViews в Dash можно использовать всю мощь преобразования link_selections. Вот пример привязки диаграммы рассеяния к гистограмме для визуализации классического набора данных радужной оболочки глаза.

Смотрите полный исходный код этого примера в документации Dash HoloViews.

Визуализация больших наборов данных с помощью Datashader

Еще одна особенность HoloViews, которая особенно удобна для пользователей Dash, - это интеграция с Datashader.

Datashader - это библиотека Python для быстрого создания различных принципиальных визуализаций больших наборов данных.

В то время как трассировка разброса ускоренного WebGL Plotly.js может обрабатывать сотни тысяч точек, Datashader может обрабатывать от десятков до сотен миллионов. Разница в том, что вместо того, чтобы передавать весь набор данных с сервера Python в браузер для рендеринга, Datashader растеризует набор данных в тепловую карту или изображение и только передает эту тепловую карту или изображение в браузер для визуализации.

Чтобы эффективно использовать Datashader в интерактивном контексте, необходимо повторно отображать набор данных при каждом изменении окна просмотра рисунка. Это уже можно сделать в Dash, установив функцию обратного вызова, которая отслеживает изменения в опоре relayoutData, но координировать полный процесс обновления непросто.

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

В этом примере загружается тот же набор данных диафрагмы, но затем он многократно дублируется с добавлением шума для создания DataFrame с 1,5 миллионами строк.

Смотрите полный исходный код этого примера в документации Dash HoloViews.

Объединение связанных выборок и даташайдера

Можно даже комбинировать преобразования link_selections и datashade для создания связанных визуализаций в больших наборах данных. В этом примере показано, как два предыдущих примера могут быть объединены для поддержки связывания выборок на гистограмме и диаграмме разброса данных в 1,5 миллиона точек.

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

Полный исходный код этого примера см. В документации Dash HoloViews.

Поддержка картографии

HoloViews позволяет накладывать большинство типов двумерной визуализации поверх карты. Вот более совершенный пример отображения набора данных NYC Taxi из 10 миллионов строк, который предоставляется проектом PyViz (https://examples.pyviz.org/nyc_taxi/nyc_taxi.html).

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

Это полное приложение содержит менее 100 строк кода без обратных вызовов. Полный исходный код см. В репозитории GitHub по адресу https://github.com/plotly/dash-holoviews-taxi.

Ускорение GPU с помощью RAPIDS

Многие операции HoloView, включая datashade и link_selections, можно ускорить на современных графических процессорах NVIDIA с использованием технологий из экосистемы RAPIDS. Все предыдущие примеры можно ускорить на GPU, просто заменив pandas DataFrame на DataFrame cuDF.

Возможность разрабатывать рабочие процессы исследовательского анализа данных с использованием pandas, а затем ускорять их с помощью графического процессора почти без изменения кода - одна из самых захватывающих последних разработок в экосистеме PyData.

Благодарности

Интеграция Dash HoloViews была профинансирована проектом NVIDIA RAPIDS в рамках продолжающегося партнерства между Plotly и NVIDIA.