Как использовать агрегацию "multiply" или "custom fn" в Vega Lite? - PullRequest
2 голосов
/ 14 января 2020

В примере ниже используется агрегация mean. Как рассчитать агрегацию как умножение всех элементов?

И можно ли использовать пользовательскую функцию JS? Как const myfn = (list) => list.length, (я знаю, что есть встроенная count, это просто для иллюстрации идеи).

Детская площадка

{
  "data": {"url": "data/cars.json"},
  "mark": "bar",
  "encoding": {
    "x": {"field": "Cylinders", "type": "ordinal"},
    "y": {"aggregate": "mean", "field": "Acceleration", "type": "quantitative"}
  }
}

1 Ответ

1 голос
/ 14 января 2020

К сожалению, продукт не является одним из встроенных агрегатов в Vega-Lite, и схема не поддерживает внедрение произвольных Javascript функций (поддерживает ограниченное выражение Vega синтаксис). Если вы предварительно не обработаете свои данные перед внедрением в спецификацию Vega-Lite, вы будете ограничены созданием пользовательских вычислений из доступных там операций.

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

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "data/cars.json"},
  "transform": [
    {"calculate": "log(datum.Acceleration)", "as": "logA"},
    {"aggregate": [{"op": "sum", "field": "logA", "as": "log_prod_A"}], "groupby": ["Cylinders"]},
    {"calculate": "exp(datum.log_prod_A)", "as": "prod_A"}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "Cylinders", "type": "ordinal"},
    "y": {"field": "prod_A", "type": "quantitative", "title": "prod(A)"}
  }
}

enter image description here

Доминирует один столбец, потому что записей с 4 цилиндрами намного больше, чем с другими числами.

...