0

以下は私が実装しようとしているロジックですが、MongoDB/Node.js アプリで方法を理解するのは本当に難しいと感じています

Data: country, state, val1

平均と標準偏差を計算する必要があります。以下の式を使用して偏差。他のスタック オーバーフローの投稿を確認しましたが、私が作業している std dev 式は同じではありません。

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 を使用して偏差/標準偏差を計算する前に、Mean の集計が必要なようですが、計算方法が見つかりません。誰でもこれを行う方法を提案できますか?

それが不可能な場合、以下の従来のマージ クエリと同様に、mongodb で update ステートメントを発行する方法はありますか? すべての行の平均値を更新し、後で偏差/標準偏差に対して 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 に答える