Javascript计算分组后的平均值

Javascript calculate average after groupement

本文关键字:平均值 计算 Javascript      更新时间:2023-09-26

我正在使用crossfilter和dc.js来制作一个仪表板。

让我们考虑这些文档:

{
    "Mkt_Al": "AZA",
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  2
}
{
    "Mkt_Al": "AZA", // here the same triplet
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  3
}
{
    "Mkt_Al": "AZA", // here the same triplet
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  4
}

我应该按三元组(Mkt_Al, Orig, Dest)对文档进行分组,然后我应该计算该组中Qsi的平均值。

    {
        "Mkt_Al"  : "AZA",
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  2,
        "Avg_Qsi" : 3

    }
    {
        "Mkt_Al"  : "AZA", // here the same triplet
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  3,
        "Avg_Qsi" : 3
    }
    {
        "Mkt_Al"  : "AZA", // here the same triplet
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  4,
        "Avg_Qsi" : 3
    }

怎么做?

我有一个dataSet,并与dc.js datatable我试图绘制一个数据表的列,将包含这个平均值:

 {
                label: 'Average Qsi in this route', 
                format: function (d) 
   {
                var total=0,avg=d.Qsi;
                for (var i = 0; i < dataSet.length; i++) 
      {
  if (dataSet[i].Mkt_Al == d.Mkt_Al
   && dataSet[i].Orig == d.Orig  
   && dataSet[i].Dest == d.Dest)
  { total = total+1; avg=(avg+dataSet[i].Qsi/total); }
       }
                   return avg;
    }
 }

我离结果很近了:

 {
                label: 'Average Qsi in this route', 
                format: function (d) 
   {
                var total=0,qsi=0; // our counters
                for (var i = 0; i < dataSet.length; i++) 
      {
  if (dataSet[i].Mkt_Al == d.Mkt_Al
   && dataSet[i].Orig == d.Orig  
   && dataSet[i].Dest == d.Dest)
  { total++ ; qsi =dataSet[i].Qsi+qsi; } // here total calculate the number of flights with these condition and qsi calculate the sum of documents's qsi which verify these results
       }
                   return (qsi/total).toFixed(3); 
    }
 }