vega-lite: как агрегировать по неделям - PullRequest
1 голос
/ 17 апреля 2020

Я видел, что можно агрегировать, используя несколько единиц времени, например, по месяцам, но не по неделям.

И я видел, что в vega можно настроить единицы времени https://vega.github.io/vega/docs/transforms/timeunit/#chronological -time-unit

Возможно ли использовать его в vega-lite и агрегировать по неделям, и преобразовать в примере это агрегирование из месяца в неделю?

Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете группировать по неделям, используя monthdate timeUnit с размером шага 7:

"timeUnit": {"unit": "monthdate", "step": 7}

Например:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "data/seattle-temps.csv"},
  "mark": "line",
  "encoding": {
    "x": {"timeUnit": {"unit": "yearmonthdate", "step": 7}, "field": "date", "type": "temporal"},
    "y": {"aggregate": "mean", "field": "temp", "type": "quantitative"}
  }
}

enter image description here

Обратите внимание, однако, что это начинается с новой недели в начале каждого месяца, что означает, что если вы делаете тепловую карту по дням недели и неделям, есть пробелы:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "data/seattle-temps.csv"},
  "mark": "rect",
  "encoding": {
    "y": {"timeUnit": "day", "field": "date", "type": "ordinal"},
    "x": {"timeUnit": {"unit": "yearmonthdate", "step": 7}, "field": "date", "type": "ordinal"},
    "color": {"aggregate": "mean", "field": "temp", "type": "quantitative"}
  }
}

enter image description here

Если вы хотите более детальный контроль над началом недель, к сожалению, это невозможно выразить как timeUnit, но вы можете воспользоваться полным преобразованием Vega-Lite синтаксис для создания более индивидуальных агрегатов. Например, здесь мы вычисляем неделю года путем подсчета воскресений в данных:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "data/seattle-temps.csv"},
  "transform": [
    {"timeUnit": "yearmonthdate", "field": "date", "as": "date"},
    {
      "aggregate": [{"op": "mean", "field": "temp", "as": "temp"}],
      "groupby": ["date"]
    },
    {"calculate": "day(datum.date) == 0", "as": "sundays"},
    {
      "window": [{"op": "sum", "field": "sundays", "as": "week"}],
      "sort": "date"
    }
  ],
  "mark": "rect",
  "encoding": {
    "y": {"timeUnit": "day", "field": "date", "type": "ordinal", "title": "Day of Week"},
    "x": {"field": "week", "type": "ordinal", "title": "Week of year"},
    "color": {"aggregate": "mean", "field": "temp", "type": "quantitative"}
  }
}

enter image description here

...