javascript - 中位数的中位数 - 这是可能的还是有不同的方式

标签 javascript math aggregation median

目前,我每天都在汇总大量数据,并且每天都在计算当前值的中位数。现在我需要将所有这些每日结果汇总到每月,当然我需要再次计算中位数。

有没有办法计算中位数的中位数并使其在统计上正确?我想避免再次使用原始数据,因为它的数量很大:)

作为一个小的概念证明,我制作了这个 javascript - 也许它有助于找到一种方法:

var aSortedNumberGroups = [];
var aSortedNumbers = [];
var aMedians = [];

Math.median = function(aData)
{
    var fMedian = 0;
    var iIndex = Math.floor(aData.length/2);
    if (!(aData.length%2)) {
        fMedian = (aData[iIndex-1]+aData[iIndex])/2;
    } else {
        fMedian = aData[iIndex];
    }

    return fMedian;
};

for (var iCurrGroupNum = 0; iCurrGroupNum < 5; ++iCurrGroupNum) {
    var aCurrNums = [];
    for (var iCurrNum = 0; iCurrNum < 1000; ++iCurrNum) {
        var iCurrRandomNumber = Math.floor(Math.random()*10001);
        aCurrNums.push(iCurrRandomNumber);
        aSortedNumbers.push(iCurrRandomNumber);
    }
    aCurrNums.sort(function(oCountA,oCountB) {
        return (iNumA < iNumB) ? -1 : 1;
    });
    aSortedNumberGroups.push(aCurrNums);
    aMedians.push(Math.median(aCurrNums));
}

console.log("Medians of each group: "+JSON.stringify(aMedians, null, 4));
console.log("Median of medians: "+Math.median(aMedians));
console.log("Median of all: "+Math.median(aSortedNumbers));

正如您将看到的,所有原始数字的中位数与中位数的中位数之间通常存在巨大的上限,我希望它们彼此非常接近。

非常感谢!

最佳答案

你实际上并没有“计算”一个中位数,而是通过重新分配到子集中“发现”它,对此唯一的优化是一个可重新加载的“刻度图”或运行计数:例如存储每次出现的次数,这样您就可以重新创建分布,而无需实际重新解析原始数据。这只是一个小的优化,但根据相关数据集的重复,您可以节省大量 MB,至少可以节省大量处理器周期。

在 JSON 中考虑它:{ '1': 3, '5': 12, '7': 4 } 规范:'1' 出现了 3 次,'5' 出现了12 次等...

然后在您想要获得中位数的时间段开始时保留这些计数。

希望这对你有帮助-ck

关于javascript - 中位数的中位数 - 这是可能的还是有不同的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415291/

相关文章:

javascript - HTML 报纸专栏

javascript - 跨域 jquery 1.6.2 ajax 调用尝试从同一域调用

javascript - 解析解三次方程的函数

ios - 惯性滚动算法与帧无关 - 预测结束位置

elasticsearch - Elasticsearch 。 _Score 在聚合中为 null。为什么?

javascript - getJSON 错误 - 不确定我哪里出错了

javascript - Android Webview HTML 加载 Javascript 问题

javascript - 围绕 Canvas 中的某个点旋转矩形

elasticsearch - 在Kibana和Elasticsearch中使用管道聚合进行可视化

Akka 的 Java 聚合器