Взгляд на Plotly

Open in Colab

Подписка на онлайн-обучение telegram

Источник картинки

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

Оригинал статьи Криса здесь

В марте 2019 года Plotly выпустила Plotly Express. Эта новая высокоуровневая библиотека решила многие мои опасения по поводу питонической природы Plotly API, о которых я расскажу в этой статье.

Согласованный API

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

Подход Plotly Express в чем-то похож на seaborn.

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

Данные содержат некоторые характеристики различных злаков:

Если мы хотим посмотреть на взаимосвязь между rating и sugars и включить название злака в виде ярлыка при наведении курсора:

Используя этот подход, легко переключать типы диаграмм, изменяя вызов функции.

Например, довольно очевидно, что будет делать каждый из следующих типов диаграмм:

Полный список функций Plotly Express доступен по ссылке

Для моей работы эти типы диаграмм покрывают 80-90% того, что я делаю изо дня в день.

Другой пример. На этот раз - статическая гистограмма:

В дополнение к различным типам диаграмм большинство типов поддерживают одну и ту же базовую сигнатуру функции, поэтому вы можете легко ограничивать (facet) данные или изменять цвета/размеры на основе значений в вашем фрейме:

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

Множество типов диаграмм

В дополнение к основным типам диаграмм, описанным выше, Plotly имеет несколько расширенных/специализированных диаграмм, таких как funnel_chart, timeline, treemap, sunburst и geographic maps.

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

Стоит потратить время и посмотреть здесь все варианты. Никогда не знаешь, когда может понадобиться более сложный тип диаграммы.

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

Вы можете поменять концепции и использовать диаграмму солнечных лучей (sunburst):

Официальное описание Plotly Express см. здесь

Сохранение изображений

Удивительно, но одна из проблем многих библиотек построения графиков заключается в том, что непросто сохранять статические файлы .png, .jpeg или .svg. Это одна из областей, где matplotlib действительно сияет, и многие инструменты построения графиков на основе javascript испытывают трудности, особенно когда корпоративные системы заблокированы, а настройки межсетевого экрана вызывают проблемы. Я сделал достаточно снимков экрана и вставил изображений в PowerPoint.

см. эффективное использование Matplotlib

Недавно компания Plotly выпустила приложение kaleido, которое значительно упрощает сохранение статических изображений в нескольких форматах. В анонсе более подробно рассказывается о проблемах разработки стабильного и быстрого решения для экспорта изображений. Я лично боролся с некоторыми из этих проблем.

Например, если я хочу сохранить уменьшенную версию (scale=.85) диаграммы солнечных лучей (sunburst chart):

Plotly также поддерживает сохранение в виде отдельного HTML.

Работа с Pandas

При работе с данными, я всегда получаю фрейм данных pandas, и большую часть времени он имеет аккуратный (tidy) формат. Plotly изначально понимает фрейм данных, поэтому вам не нужно дополнительное преобразование данных перед построением графика.

Все функции Plotly Express принимают в качестве входных данных "аккуратный" фрейм.

Pandas позволяют определять различные бэкэнды построения графиков (plotting back ends), и Plotly можно включить следующим образом:

Это позволяет создавать визуализацию, используя комбинацию pandas и Plotly API. Вот пример гистограммы с использованием этой комбинации:

Еще одно недавнее изменение в Plotly Express заключается в том, что он поддерживает "широкую форму" (wide-form), а также аккуратные (также известные как long-form) данные.

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

Обратитесь к документации за дополнительными примерами.

Настройка рисунка

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

Каждая функция Plotly Express воплощает четкое сопоставление строк фрейма данных с отдельными или сгруппированными визуальными метками и имеет подпись, вдохновленную Грамматикой графики.

Вот цитата из вводной статьи о Plotly Express:

Plotly Express для Plotly.py - это то же самое, что Seaborn для matplotlib: высокоуровневая оболочка, которая позволяет быстро создавать фигуры, а затем использовать возможности базового API и экосистемы для внесения изменений.

Вы можете настроить окончательную диаграмму Plotly Express, используя update_layout, add_shape, add_annotation, add_trace или задав template. В документации много подробных примеров.

Вот пример настройки нескольких компонентов распределения натрия (sodium) и калия (potass):

Далее пример из официального описания, который показывает продолжительность жизни в сравнении с ВВП на душу населения по странам за 2007 г:

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

Вы можете анимировать ее, установив animation_frame="year" и animation_group="country", чтобы определить, какие круги соответствуют каким в кадрах.

Поскольку это географические данные, то можем представить их в виде анимированной карты:

Dash - это фреймворк Plotly с открытым исходным кодом для создания аналитических приложений и панелей мониторинга с диаграммами Plotly.py. Объекты, которые производит Plotly Express, на 100% совместимы с Dash.

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

Подписка на онлайн-обучение telegram