Показывать численность населения с течением времени с учетом даты начала и окончания - PullRequest
0 голосов
/ 09 октября 2019

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

Вот выдержка:

id,start_date,end_date
2759,2010-10-19,2016-10-31
2760,2010-10-19,2014-03-31
2761,2010-10-19,2023-03-31
2762,2010-10-21,2012-10-31
2763,2010-10-23,2015-11-30
2764,2010-10-24,2012-10-31
2765,2010-10-25,2012-10-30
2766,2010-10-30,2012-10-31
2767,2018-09-19,2019-10-18

Я хочу закодировать эти данные с указанием yearmonth вдоль x и считать по y на основе количества записей, которые были членами в каждомконкретный год.

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

Похоже, вы хотели бы иметь условный счет, если start_date <= yearmonth && end_date> = yearmonth, но я не уверен, как бы это выразить в vega-lite json.

Спасибо!

1 Ответ

2 голосов
/ 09 октября 2019

Один из способов сделать это - преобразование сгиба, затем преобразование вычисления, а затем преобразование окна. Вот пример с некоторыми сгенерированными числовыми данными ( Vega Editor ):

{
  "data": {
    "values": [
      {"start": 7, "end": 9},
      {"start": 4, "end": 6},
      {"start": 9, "end": 10},
      {"start": 9, "end": 13},
      {"start": 0, "end": 4},
      {"start": 4, "end": 6},
      {"start": 0, "end": 2},
      {"start": 0, "end": 3},
      {"start": 4, "end": 8},
      {"start": 3, "end": 6}
    ]
  },
  "transform": [
    {"fold": ["start", "end"]},
    {"calculate": "datum.key == 'start' ? 1 : -1", "as": "added"},
    {
      "window": [{"op": "sum", "field": "added", "as": "total"}],
      "sort": [{"field": "value"}]
    }
  ],
  "mark": "line",
  "encoding": {
    "x": {"type": "quantitative", "field": "value"},
    "y": {"type": "quantitative", "field": "total"}
  }
}

enter image description here

...