Использование Altair для данных, агрегированных из больших наборов данных - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь подсчитать гистограмму большого (300 000 записей) временного набора данных. На данный момент я просто пытаюсь составить гистограмму по месяцам, которая составляет всего 6 точек данных, но выполнение этого с хранилищем json или altair_data_server приводит к сбою страницы. Разве это невозможно хорошо справиться с чистым Альтаиром? Я мог бы, конечно, провести предварительную обработку в пандах, но это разрушает замечательную декларативную природу альтаира.

Если это так, то это недостающая особенность альтаира или это выходит за рамки? Я узнал, что vegalite хранит все базовые данные и применяет преобразование во время выполнения, но кажется, что у altair может (и может быть) есть способ сохранить только соответствующие данные для диаграммы.

alt.Chart(df).mark_bar().encode(
    x=alt.X('month(timestamp):T'),
    y='count()'
)

Ответы [ 2 ]

1 голос
/ 17 октября 2019

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

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

Между тем,Я бы посоветовал провести агрегацию в Pandas и отправить агрегированные данные в Altair для построения графика.

0 голосов
/ 24 октября 2019

Попробуйте ниже: -

alt.data_transformers.enable('default', max_rows=None)

, а затем

alt.Chart(df).mark_bar().encode(
    x=alt.X('month(timestamp):T'),
    y='count()'
)

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

...