Вега лайт просчитать вопросы - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь создать график, который отображает новые значения столбцов, рассчитанные по многим существующим столбцам в моем CSV-файле. Я знаю, что есть гораздо больше стран, и что все они имеют баллы из 10 (для каждого поля), поэтому из 50 баллов.

     {
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {
    "url": "https://raw.githubusercontent.com/Anika6138/InfoVis/master/arabica_data_cleaned.csv",
    "format": {
      "type": "csv"
    }
  },
  "transform": [
   {"calculate": "datum.Aroma + datum.Flavor + datum.Aftertaste + datum.Acidity + datum.Sweetness  ", "as": "Taste_Points"}
  ],
      "mark": "bar",
      "encoding": {
        "y": {
          "field": "Country_of_Origin",
          "type": "nominal"
        },
        "x": {
          "field": "Taste_Points",
          "type": "quantitative"
        }
  },
  "config": {}
}

enter image description here

Это то, что я получаю. Многие страны со значениями игнорируются и фильтры не добавляются.

1 Ответ

1 голос
/ 14 марта 2020

Ваши данные указаны как CSV, что означает, что все значения в вычислениях интерпретируются как строки, если не указано иное. Есть два способа это исправить; вы можете добавить оператор parse в формате данных определение:

  "data": {
    "url": "https://raw.githubusercontent.com/Anika6138/InfoVis/master/arabica_data_cleaned.csv",
    "format": {
      "type": "csv",
      "parse": {"Aroma": "number", "Flavor": "number", "Aftertaste": "number", "Acidity": "number", "Sweetness": "number"}
    }
  }

или вы можете использовать parseFloat в выражении вычисления:

  "transform": [
    {
      "calculate": "parseFloat(datum.Aroma) + parseFloat(datum.Flavor) + parseFloat(datum.Aftertaste) + parseFloat(datum.Acidity) + parseFloat(datum.Sweetness)",
      "as": "Taste_Points"
    }
  ]

Причина, по которой поля были неявно отфильтрованы в вашей исходной спецификации, заключается в том, что во многих случаях результатом суммы была конкатенированная строка, которая не может быть проанализирована как допустимое число, и значения NaN неявно удаляются из количественных кодировок; например:

{
  "data": {
    "values": [
      {"y": "A", "x": 1},
      {"y": "B", "x": 2},
      {"y": "C", "x": null},
      {"y": "D", "x": null}
    ]
  },
  "mark": "bar",
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "type": "ordinal"}
  }
}

enter image description here

...