Группа Vega Lite по заданным c атрибутам на основе другого столбца - PullRequest
1 голос
/ 28 апреля 2020

Попытка найти среднее значение беременности / инкубации (дней) для атрибутов:

Accipitriformes, Anseriformes, Charadriiformes 

, которые не входят в класс Aves. Я не хочу находить среднее значение каких-либо других атрибутов в столбце Order, только те, которые не относятся к классу Aves. Пример моего набора данных выглядит следующим образом:

|   Class     |   Order   |    Gestation/Incubation(days)     
  Amphilbia       Anura                   5
  Amphilbia       Anura                   4
  Amphilbia       Anura                   2
  Amphilbia       Caudata                 4
  Amphilbia       Caudata                 2
   Mammalia     Artiodactyla              10
   Mammalia     Artiodactyla              8
   Mammalia       Rodentia                14
   Mammalia       Rodentia                13
     Aves      Accipitriformes            12
     Aves      Accipitriformes            17
     Aves      Accipitriformes            12
     Aves       Anseriformes              9
     Aves       Anseriformes              8
     Aves       Anseriformes              9
     Aves     Charadriiformes             10
     Aves     Charadriiformes             12
     Aves     Charadriiformes             14

Я могу найти среднее значение различных атрибутов в столбце Class, например (см. Демонстрационную ссылку vega-lite):

Amphilbia, Mammalia, Aves 

но я не могу найти среднее значение атрибутов в столбце заказа, где Class = Aves.

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
   "data": {
     "url": "https://raw.githubusercontent.com/cathal84/COMP40610/master/anage_data.txt",
    "format": {"type": "tsv"}
       },
   "title": {
     "text": " Average Gestation/Incubation days for Orders with Aves",
    "anchor": "middle"
   },
   "width": 600,
   "height": 600,
  "transform": [
     {
       "aggregate": [
        {"op": "average", "field": "Gestation/Incubation (days)", "as": "avg_incub"},
        {"op": "count", "field": "Class", "as": "make_cnt"}
      ],
      "groupby": ["Class"]
    },
     {"filter": "datum.make_cnt > 50"}
   ],
   "mark": {"type": "bar"},
   "encoding": {
     "y": {
       "field": "avg_incub",
       "type": "quantitative",
       "axis": {"title": "Average Incubation"}
     },
     "x": {
       "field": "Class",
       "type": "nominal",
       "sort": {"encoding": "x", "order": "descending"},
       "axis": {"title": "Orders"}
    }
  }
}

Ссылка на демонстрацию

Я попытался использовать функцию фильтра для фильтрации моих данных, чтобы остались только данные с классом == Авес, но это не помогло моя проблема. Я не должен использовать это правильно. Если только это не другой способ сделать то, чего я пытаюсь достичь.

{"filter": "datum.Class == 'Aves'"}

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете сделать это с двумя шагами фильтра, один для фильтрации по классу и один для фильтрации по порядку. На этом этапе использование агрегатов в кодировках является наиболее простым способом вычисления среднего значения.

Вот пример ( vega editor ):

{
  "$schema": "https://vega.github.io/schema/vega-lite/v3.json",
  "data": {
    "url": "https://raw.githubusercontent.com/cathal84/COMP40610/master/anage_data.txt",
    "format": {"type": "tsv"}
  },
  "title": {
    "text": " Average Gestation/Incubation days for Orders with Aves",
    "anchor": "middle"
  },
  "transform": [
    {"filter": "datum.Class == 'Aves'"},
    {"filter": {"field": "Order", "oneOf": ["Accipitriformes", "Anseriformes", "Charadriiformes"]}}
  ],
  "mark": {"type": "bar"},
  "encoding": {
    "x": {"field": "Order", "type": "nominal"},
    "y": {"field": "Gestation/Incubation (days)", "type": "quantitative", "aggregate": "mean"}
  }
}

enter image description here

...