如何将每天的数据干净地汇总为每周的总和?

时间:2020-05-13 20:29:50

标签: node.js date aws-lambda statistics

如果我每天都要格式化数据,是否有一个干净的地图/缩小/过滤器链可以为我提供该数据的每周总计和平均值?

我有这样的数据:

data =  [
           ["2020/04/28 GMT", "25"],
           ["2020/04/29 GMT", "6"],
           ["2020/04/30 GMT", "40"],
           ["2020/05/01 GMT", "1"],
           ["2020/05/02 GMT", "0"],
           ["2020/05/03 GMT", "1"],
           ["2020/05/04 GMT", "8"],
           ["2020/05/05 GMT", "27"],
           ["2020/05/06 GMT", "4"],
           ["2020/05/07 GMT", "14"],
           ["2020/05/08 GMT", "1"],
           ["2020/05/09 GMT", "4"],
           ["2020/05/10 GMT", "0"],
           ["2020/05/11 GMT", "4"],
           ["2020/05/12 GMT", "19"],
           ["2020/05/13 GMT", "6"]
       ]

首先,我将其映射以获取其所在的星期(我不想要一年中的星期,我想要7天的“大块”数据。

MAP = data.map((m, idx) => {
    m[0] = parseInt(idx / 7)
    return m;
})

哪个给我:

[
  [ 0, '25' ], [ 0, '6' ],
  [ 0, '40' ], [ 0, '1' ],
  [ 0, '0' ],  [ 0, '1' ],
  [ 0, '8' ],  [ 1, '27' ],
  [ 1, '4' ],  [ 1, '14' ],
  [ 1, '1' ],  [ 1, '4' ],
  [ 1, '0' ],  [ 1, '4' ],
  [ 2, '19' ], [ 2, '6' ]
]

下一步要按周汇总结果?

我希望能得到类似的东西:

[0,81]
[1,54]
[2,25]

到目前为止,我最好的是:

MAP = tmp.data.map((m, idx) => {
    m[0] = parseInt(idx / 7)
    return m;
})
.reduce((sum, d) => {
    if (typeof sum[d[0]] == "undefined") sum[d[0]] = 0;
    sum[d[0]] = parseInt(d[1]) + parseInt(sum[d[0]])
    return sum;
},{})

有什么方法可以消除该kludgy if子句将其初始化为0(如果未定义)?我觉得必须有更好的方法...

我知道当我看到代码时,就会被它的优雅迷住了……

谢谢。

我在lambda Node 13环境中进行此操作,如果可能的话,宁愿不使用外部库,但会考虑这样做,因为它可以使诸如趋势线,求和/平均值/中位数等计算变得更加容易,特别是在喂枣时。像Node Pandas一样?

0 个答案:

没有答案