如何在Java中使用Map中的数据集计算95个百分位数。

问题描述 投票:1回答:2

我想计算的是 95% percentile 我的数据集在Java中。我的数据集会有类似这样的内容-

我将有一个 ConcurrentHashMap 它的键值对是这样的

Key = 30
Value = 10

这意味着30毫秒内有10个电话打回来了。

另一个例子-

Key = 20
Value = 5

也就是说,在20毫秒内有5个电话打回来了。

所以从上面的地图,我想用Java计算95%的百分位数。

谁能提供任何例子,如何在Java中从我的上述地图做?谢谢你的帮助

更新代码:-

以下是我得到的代码,它可以计算出地图中的第95个百分位数。

/**
 * A simple method to log 95th percentile information
 */
private static void logPercentileInfo() {

    double total = 0;
    for (Map.Entry<Long, Long> entry : CassandraTimer.histogram.entrySet()) {
        long value = entry.getKey() * entry.getValue();
        total += value;
    }

    double sum = 0.95*total;

    double totalSum = 0;

    SortedSet<Long> keys = new TreeSet<Long>(CassandraTimer.histogram.keySet());
    for (long key : keys) {

        totalSum += CassandraTimer.histogram.get(key);

        if(totalSum >= sum) {
            System.out.println(key);
        }
    }

}

谁能看一下,让我知道我写的是否正确?

java percentile
2个回答
5
投票

算法是:将地图中的所有值相加,计算出总和的95%,按升序迭代地图中的键值,保持总值的运行,当总和等于或超过之前计算出的总和的95%时,键值应该是第95个百分位数。


© www.soinside.com 2019 - 2024. All rights reserved.