0

下面是我试图实现的逻辑,但我发现很难找到使用 MongoDB/Node.js 应用程序的方法

Data: country, state, val1

我需要计算均值和标准。偏差使用下面的公式。我检查了其他堆栈溢出帖子,但我正在工作的标准开发公式不一样:

for each row -> group by country, state
    mean = sum(val1)/count -> 
for each row ->
    deviation += Math.pow((val1 - mean), 2)
for each row -> group by country, state
    std dev = Math.sqrt(dev/ count)

问题在于需要计算偏差的方式。看起来我需要在通过 Map reduce 计算偏差/ std dev 之前对 Mean 进行聚合,我找不到计算方法。谁能建议一种方法来做到这一点?

如果不可能,我们有没有办法在 mongodb 中发出类似于下面传统合并查询的更新语句?我将更新所有行的平均值,然后为偏差/标准差调用 Mapreduce。

merge into Tbl1 a using
  (select b.country, b.state, sum(b.val1)/count(b.val1) as mean
     from Tbl1 b
     group by b.country, b.state) c
on (a.country = c.country and 
    a.state = c.state)
when matched
then update
       set a.mean = c.mean

我对 nosql 和 nodejs 很陌生,如果你们能提出解决方案/替代方案,那就太好了。

4

1 回答 1

0

是的,使用 map-reduce 计算标准偏差很棘手,因为您需要将每个数据值与传统算法中的平均值进行比较。

看看这个基于并行计算算法的解决方案:https ://gist.github.com/RedBeard0531/1886960

于 2013-03-03T14:40:37.193 回答