Обзор замечательных функций в пакете Джулии UnicodePlots.jl

Введение

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

Одна важная проблема, которую часто упоминают в Jupyter Notebook, — это состояние. Многие пытались противостоять этому, и такие проекты, как Pluto.jl, пытались смягчить эти проблемы, делая среды более реактивными к коду, который на самом деле находится в поле зрения. Еще одна серьезная проблема заключается в том, что ядро ​​Jupyter может быть довольно ограниченным, и иногда может быть неприятно работать, когда его ограничения раздвигаются. Перезапуск мертвых ядер снова и снова раздражает.

Тем не менее, очень большое преимущество этих ноутбуков заключается в том, что часто бывают случаи, когда специалисты по данным хотят просмотреть свои выходные данные в веб-браузере. Это немного похоже на попытку протестировать ваш новый веб-сайт JavaScript без веб-браузера в некоторых случаях при попытке заниматься наукой о данных вне веб-браузера. По крайней мере, так обстоит дело со многими аналитическими задачами — точнее, с визуализацией. Когда дело доходит до визуализации данных, у Джулии действительно есть несколько довольно надежных и удобных графических библиотек, и по большей части я просмотрел почти все из них в своем блоге. Если вы хотите увидеть сравнение модулей, о которых я писал истории в прошлом, вот ссылка на эту статью, где я делаю обзор и сравниваю такие модули, как Plots.jl и Vegalite.jl:



Со всеми проблемами, которые есть у ноутбуков, вполне вероятно, что большинство специалистов по данным рассматривают возможность полного отказа от них. REPL, хотя и не самая воспроизводимая вещь на Земле, на самом деле работают довольно хорошо — и есть некоторые IDE, которые предлагают тип реактивного программирования, который часто требуется специалистам по данным, так почему бы не бросить ноутбук и попробовать что-то новое? Сегодня мы проверим потенциал REPL в Julia, попытавшись перенести нашу визуализацию данных обратно в REPL с помощью замечательного пакета под названием UnicodePlots.jl. Эти визуализации могут быть не только потрясающими, но и невероятно полезными для тех, кто может быть привязан к терминалу на время или навсегда. Тем не менее, во имя того, что мои читатели действительно могут очень легко воспроизводить мой код (и видеть ввод/вывод в своем веб-браузере), я собираюсь использовать эту библиотеку внутри блокнота для следующих примеров. Если вы хотите просмотреть этот блокнот, вот ссылка:



Основы

Основы UnicodePlots — это, вероятно, то, что вы, возможно, ожидаете от большинства графических библиотек, которые не сделаны в Unicode. Это здорово, хотя, поскольку это добавляет уровень знакомства. Кроме того, сравнивая методологию и аргументы со многими другими решениями в Julia, я чувствую, что в UnicodePlots есть много вызовов, которые гораздо легче делать и читать. Конечно, все это субъективно, но мне, как опытному пользователю библиотеки визуализации, очень нравится, как разработан интерфейс для UnicodePlots. Давайте создадим несколько быстрых массивов для наших примеров построения графиков:

x = randn(500)
y = randn(500)

Одна вещь, которая мне не очень понравилась во многих других библиотеках визуализации Julia, заключается в том, что они требуют много работы для получения первого графика, и, кроме того, для многих из них «Время до первого графика» действительно велико. Конечно, в большинстве случаев это происходит из-за предварительной компиляции, Джулии обычно нужно скомпилировать несколько серверных частей, будь то SDL, Cairo или что-то еще, и это, безусловно, может увеличить время, необходимое для получения графика для ваших данных. Однако эти графики имеют юникод, поэтому единственная библиотека визуализации, которая здесь задействована, — это библиотека диспетчера отображения или ядра, показывающая нам текст. В результате заговор действительно быстрый. Эта библиотека также ориентирована на простые позиционные аргументы, а затем на многофункциональные аргументы ключевых слов — это не то, что вам нужно в большинстве ситуаций с программным обеспечением, но в случае построения графиков это именно то, что является оптимальным.

plot = lineplot(x, y,
               title = "Unicode Plot", xlabel = "x", ylabel = "y", border = :dotted)

Базовый сюжет на самом деле выглядит довольно круто. Это действительно здорово, насколько легко читаются эти сюжеты, потому что иногда вы можете не ожидать, что их будет так легко оценить. Еще круче, если вы на компьютере, я могу вставить это в текстовое поле здесь, на Medium, и это выглядит так здорово!!!

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Unicode Plot⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀          ⡤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⢤        3 ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠈⠢⡀⠀⡀⠀⡜⣿⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠐⢤⣄⡀⠀⢀⠀⢢⢌⡢⣏⣲⣁⣧⢴⣿⣑⣄⣀⡠⢤⣴⢢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠈⠪⡑⠺⣷⣖⣿⣿⣿⣷⣿⣿⡾⣿⣉⣹⣡⣜⣿⣾⣳⠬⢵⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠀⠀⢈⣵⣯⣾⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣋⣯⣟⣏⣉⣉⡩⠭⠶⠶⠒⠒⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠀⣀⣼⣻⣹⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⢤⣖⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⢀⣁⡠⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⡯⡿⣛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸     y    ⡇⠤⠤⠤⠭⠷⠶⢼⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣷⣤⠤⠤⠵⠤⡤⠤⠤⠤⠤⠤⠤⠤⢸          ⡇⠀⠀⠀⢀⠤⠤⡞⡾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣍⣙⣍⣉⣉⣉⣀⣀⡀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠑⢤⡿⠶⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣿⣗⠊⠑⠤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠀⡸⣣⣠⠴⢟⣻⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⡷⠌⠙⠉⠒⠚⠳⠄⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⣀⠝⠋⠉⠫⡡⣯⣿⣏⣯⣿⡿⣿⡿⠒⠻⣿⡾⠿⢏⠉⠞⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠘⠊⠉⠉⢩⠿⠛⢫⢋⡷⡟⠀⢀⢎⡧⠒⠉⠹⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠕⠁⠀⠀⠀⠚⠁⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸       -3 ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸          ⠓⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠚          ⠀-3⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀4⠀          ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀x⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

Вы должны задаться вопросом, насколько возможно что-то подобное в ASCII по сравнению с юникодом. В любом случае, это выглядит довольно круто. Однако, как и следовало ожидать, это не единственное, на что способен UnicodePlots.

Изменяемые сюжеты

Именно здесь Unicode становится умнее, чем многие другие графические библиотеки. Графики из библиотеки на самом деле изменяемы, то есть мы можем добавлять или удалять элементы с помощью этого нового графика, который мы только что создали. Например, мы можем использовать метод lineplot!(), чтобы добавить еще одну строку:

lineplot!(plot, randn(500), randn(500), color = :blue)

Изучение дополнительных визуализаций

Это может стать неожиданностью, но библиотека на самом деле способна на множество действительно крутых визуализаций, например,

  • диаграмма рассеяния
  • Лестничный участок
  • Барплот
  • Гистограмма
  • Блочная диаграмма
  • Шаблон разреженности
  • Плотность
  • График тепловой карты
  • Контурный участок
  • Поверхностный график
  • Изоповерхность

Правильно, есть даже 3D-графики. Несмотря на то, что трехмерные графики довольно новые, они впечатляют, а результаты выглядят просто потрясающе. Вот пример, сделанный с использованием поверхностного графика:

sombrero(x, y) = 15sinc(√(x^2 + y^2) / π)
surfaceplot(-8:.5:8, -8:.5:8, sombrero, colormap=:jet, border=:dotted)

И действительно крутой изоповерхностный график:

torus(x, y, z, r=0.2, R=0.5) = (√(x^2 + y^2) - R)^2 + z^2 - r^2
isosurface(-1:.1:1, -1:.1:1, -1:.1:1, torus, cull=true, zoom=2, elevation=50, border=:dotted)

Заключение

UnicodePlots.jl — отличная графическая библиотека, и я не могу рекомендовать ее в достаточной мере. Для исследовательского анализа построение графиков в чем-то вроде Юникода, а не вызов реальной привязки графического API, дает множество больших преимуществ. Производительность и предварительная компиляция, вероятно, самые большие. Кроме того, мне очень нравится методология, изменчивость и вообще то, как был разработан пакет.

По сравнению со многими другими вариантами в Julia, UnicodePlots.jl не вызывает затруднений. Я настоятельно рекомендую взять его, даже если это только для новизны. Библиотека способна создавать довольно радикальные визуализации, и в большинстве случаев статистически я думаю, что эти визуализации вам помогут! Большое спасибо за чтение, и я надеюсь, что вы решите добавить этот модуль в свой компьютерный полк Julian Scientific!