telegram

Если вы пытались визуализировать pandas.DataFrame раньше, то вы, вероятно, сталкивались с Pandas .plot() API. Эти команды используют Matplotlib для рендеринга статических PNG или SVG в Jupyter блокнотах с использованием встроенного бэкэнда или интерактивных графиков через %matplotlib widget.

API-интерфейс Pandas .plot() стал де-факто стандартом для высокоуровневого построения графиков в Python и теперь поддерживается множеством различных библиотек, которые используют набор базовых механизмов построения графиков для обеспечения дополнительных возможностей. Библиотеки, которые в настоящее время поддерживают этот API, включают:

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

Чтобы показать эти особенности, мы будем использовать набор данных в виде таблиц о землетрясениях и других запрошенных сейсмологических событиях из Каталога землетрясений USGS, используя его API. Конечно, этот набор данных является всего лишь примером; тот же подход можно использовать практически с любым табличным набором данных, и аналогичные подходы можно использовать с наборами данных с координатной привязкой (многомерный массив).

Для работы с пакетом hvplot понадобится настроить программное окружение (установить множество модулей).

Я предпочитаю работать с miniconda и раздельными виртуальными средами.

Далее в командной строке для настройки среды окружения необходимо выполнить:

conda create --name holoviz
conda activate holoviz
conda install anaconda-project
anaconda-project download pyviz/holoviz_tutorial
cd holoviz_tutorial
anaconda-project run jupyter lab

После процесса установки всех необходимых модулей и запуска Jupyter Lab можно открыть оригинал данного блокнота: tutorial/02_Plotting.ipynb.

Чтение данных

Здесь мы сосредоточимся на Pandas, но аналогичный подход будет работать для любого поддерживаемого типа DataFrame, включая Dask для распределенных вычислений или RAPIDS cuDF для вычислений на GPU. Этот набор данных относительно велик (2,1 млн строк), но он все равно должен уместиться в памяти на любой современной машине и, следовательно, не потребует специальных внепроцессорных или распределенных подходов, таких как Dask.

Чтобы сравнить подходы HoloViz с другими, мы возьмем подвыборку (1%) из большого набора данных для дальнейшей обработки любым инструментом:

Мы будем переключаться между small_df и df в зависимости от того, работает ли метод, который мы показываем, только для небольших наборов данных, или его можно использовать для любого набора.

Использование Pandas .plot()

Первое, что мы хотели бы сделать с этими данными, - это визуализировать места с землетрясениями. Итак, мы хотели бы построить диаграмму рассеяния, где x - долгота, а y - широта.

Мы можем это сделать для небольшого фрейма данных, используя API pandas.plot и Matplotlib:

Упражнение:

Попробуйте заменить inline на widget и посмотрите, какие интерактивные возможности доступны в Matplotlib. В некоторых случаях вам может потребоваться перезагрузить страницу и перезапустить блокнот, чтобы она отображалась правильно.

Использование .hvplot

Как вы могли увидеть выше, Pandas API легко строит график, где вы можете посмотреть структуру краев тектонических плит, которые во многих случаях соответствуют визуальным краям континентов (например, западная сторона Африки, в центре). Вы можете создать очень похожий график с теми же аргументами, используя hvplot, после импорта hvplot.pandas для поддержки hvPlot в Pandas:

Здесь, в отличие от Pandas .plot(), есть действие по умолчанию при наведении курсора на точки данных, чтобы показать значения местоположения, и вы всегда можете панорамировать и масштабировать, чтобы сосредоточиться на любой конкретной области интересующих данных. Масштабирование и панорамирование также работают, если вы используете бэкэнд Matplotlib widget.

Вы могли заметить, что многие точки в только что созданном графике лежат друг на друге. Это называется "overplotting", и его можно избежать разными способами, например, сделав точки слегка прозрачными или объединяя данные.

Упражнение

Попробуйте изменить alpha, установив значение 0.1 на графике выше, чтобы увидеть эффект этого подхода.

(Решение)
```python small_df.hvplot.scatter(x='longitude', y='latitude', alpha=0.1) ```