Можно ли создавать собственные агрегаты, которые работают с фильтрами выбора в Altair / Vega-Lite? - PullRequest
0 голосов
/ 29 декабря 2018

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

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

(1 + ret).cumprod() - 1

Я не могу понять, как и возможно ли это сделать с помощью altair.

Я видел, что возможны два вида преобразований:

  1. В канале кодирования
  2. Использование преобразований верхнего уровня (например, transform_aggregate и transform_calculate)

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

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

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

import altair as alt
from vega_datasets import data

source = data.stocks().query('symbol=="GOOG"')

sel = alt.selection_interval(encodings=['x'])

c1 = alt.Chart(source).mark_line().encode(
    x='date',
    y='price_cum:Q'
).transform_filter(sel).transform_window(price_cum='sum(price)')

c2 = alt.Chart(source).mark_line().encode(
    x='date',
    y='price'
).properties(height=100).add_selection(sel)

c1&c2

Вот соответствующая спецификация vega-lite вредактор:

1 Ответ

0 голосов
/ 31 декабря 2018

https://vega.github.io/vega-lite/docs/window.html#cumulative-frequency-distribution полезно для выполнения кумулятивных операций.

У Vega еще нет операции "product", но я думаю, что вы можете использовать calculate, чтобы получить логарифмическое значение, получить кумулятивную сумму и применить показатель степени - это должно быть эквивалентно кумулятивному продукту.

Пожалуйста, не стесняйтесь подавать проблему в репозиторий Vega , если вы считаете, что «продукт» должен быть включен.

...