Разница между даташадером и другими библиотеками черчения

Я хочу понять четкую разницу между Datashader и другие графические библиотеки, например plotly/matplotlib и т.п.

  1. Я понимаю, что для того, чтобы построить миллионы / миллиарды точек данных, нам нужен dashashader, поскольку другие библиотеки печати будут зависать в браузере.

  2. Но что именно является причиной, которая делает datashader быстрым и не зависает в браузере, и как именно выполняется построение графиков, которое не оказывает никакой нагрузки на браузер????

Кроме того, datashader не создает никакой нагрузки на браузер, потому что в бэкэнде datashader создаст график на основе моего dataframe и отправит только изображение в браузер, поэтому он работает быстро.

Пожалуйста, объясните мне, что я не могу ясно понять, что происходит.

2 ответа

Решение

Может быть полезно сначала подумать о Datashader не по сравнению с Matplotlib или Plotly, но по сравнению с numpy.histogram2d, По умолчанию Datashader превратит длинный список точек (x,y) в двухмерную гистограмму, как в histogram2d. Это требует только простого приращения ячейки сетки для каждой новой точки, которая легко ускоряется до скоростей машинного кода с помощью Numba и тривиальна для параллелизации с Dask. Полученный массив в таком случае будет иметь максимальный размер экрана вашего дисплея, независимо от того, насколько велик ваш набор данных. Таким образом, дешево обрабатывать в отдельной программе, которая добавляет оси, метки и т. Д., И это никогда не приведет к краху вашего браузера.

В отличие от этого, графическая программа, такая как Plotly, должна будет преобразовывать каждую точку данных в JSON или другое сериализованное представление, передавать ее в JavaScript в браузере, заставлять JavaScript рисовать фигуру в графический буфер и заставлять каждую такую ​​фигуру поддерживать зависание и другие. интерактивные функции. Эти интерактивные функции великолепны, но это означает, что Plotly выполняет значительно больше работы для каждой точки данных, чем Datashader, и требует, чтобы браузер мог хранить все эти точки данных. Единственное вычисление, которое Datashader должен сделать с вашими полными данными, - это линейное масштабирование местоположений x и y каждой точки, чтобы соответствовать сетке, а затем увеличить значение сетки, что намного проще, чем то, что делает Plotly.

Сравнение с Matplotlib немного сложнее, потому что с бэкэндом Agg Matplotlib также выполняет предварительный рендеринг в графический буфер фиксированного размера перед отображением (что-то вроде Datashader). Но Matplotlib был написан до Numba и Dask (что делает его более сложным для ускорения), он все еще должен рисовать фигуры для каждой точки (не просто простое приращение), он не может полностью распараллелить операции (потому что более поздние точки перезаписывают более ранние в Matplotlib), и предоставляет сглаживание и другие приятные функции, недоступные в Datashader. Итак, снова Matplotlib делает намного больше работы, чем Datashader.

Но если то, что вы действительно хотите сделать, это увидеть точное 2D-распределение миллиардов точек данных, Datashader - верный путь, потому что это действительно все, что он делает.:-)

Из документов Dasashader,

datashader предназначен для "растеризации" или "агрегирования" наборов данных в регулярные сетки, которые можно просматривать в виде изображений, что позволяет легко и быстро видеть свойства и шаблоны ваших данных. Datashader может построить миллиард точек в секунду или около того на ноутбуке 16 ГБ и легко масштабироваться до внешней или распределенной обработки для еще больших наборов данных.

В этих библиотеках нет никаких хитростей - рендеринг огромного количества точек занимает много времени. То, что делает datashader - это перенос бремени визуализации с рендеринга на вычисления. Есть очень веская причина, по которой вы должны создать холст перед построением инструкций в datashader. Первым шагом в конвейере передачи данных является растеризация набора данных, иными словами, он аппроксимирует положение каждого фрагмента данных, а затем использует функции агрегирования для определения интенсивности или цвета каждого пикселя. Это позволяет даташадеру строить огромное количество точек; даже больше очков, чем можно удержать в памяти.

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

Другие вопросы по тегам