显示给定开始和结束日期的时间上的人口计数

时间:2019-10-09 13:57:46

标签: vega-lite

我有一组成员记录,这些记录显示开始日期和结束日期。

以下是摘录:

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

我希望根据每个特定年月中成员的记录数,将年月沿x编码为数据,并将年沿y进行计数。

如果以上内容不清楚,则另一个示例是“给定具有人口中个体出生和死亡日期的数据集,我如何创建显示人口每年增长/下降的图表”。

如果start_date <= yearmonth && end_date> = yearmonth,您似乎希望有条件计数,但是我不确定如何在vega-lite json中表达这一点。

谢谢!

1 个答案:

答案 0 :(得分:2)

实现此目的的一种方法是折叠变换,然后是计算变换,然后是窗口变换。这是一个示例,其中包含一些生成的数值数据(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