如何计算Java中的百分位数?

时间:2016-01-08 05:19:28

标签: java percentile

我正在尝试从我在LinkedHashMap中填充的数据集中计算Percentile。

Key             Value
1               1
2               1
3               1
4               6
5               10
5               19
7               19
8               20

如何获得每个值的百分位数? 我正在使用以下代码,我认为这些代码没有给出正确的百分位数。

float i = test.size();
float k = test.size();

if (test.size() > 1) {
    float  n = (i-1)*100/i;

    for (int j = 0; j <=i ; ) {
        if (i == 1) {
            System.exit(0);
        }
        float  a = (i-1)*100/k;
        System.out.println("Percentile of lastvalue "+a);

        i--;
        System.out.println("Size of i "+i);
    }
} else {
    System.out.println("Bye");
}

如果有人可以帮助我,请帮助

我正在寻找像这样的输出

Percentile of lastvalue 83.333336

Percentile of lastvalue 66.666664

Percentile of lastvalue 50.0
Percentile of lastvalue 33.333332

Percentile of lastvalue 16.666666

Percentiile将从列表中的最高值启动countiion

2 个答案:

答案 0 :(得分:0)

首先,test.size()返回LinkedHashMap中的条目数,这可能不是您想要的。如果我理解正确,您想要计算所有值之和的每个值相对大小(百分位数)。这就是我的代码片段完成的内容。

另外,你已经写了两次密钥5,我相信你不是故意的(LinkedHashMaps或散列表通常不支持重复密钥)。因此我将5的最后一个改为6。

import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;

class CalcPercentiles
{
  public static void calcPercentiles(LinkedHashMap hashMap) {
    int size = hashMap.size();

    List<Integer> value_list = new ArrayList(hashMap.values());

    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += value_list.get(i);
    }

    for (int i = 0; i < size; i++) {
        System.out.println(100 * value_list.get(i) / (float) sum);
    }
  }

  public static void main(String[] args)
  {
    LinkedHashMap hashMap = new LinkedHashMap();
    hashMap.put(1, 1);
    hashMap.put(2, 1);
    hashMap.put(3, 1);
    hashMap.put(4, 6);
    hashMap.put(5, 10);
    hashMap.put(6, 19);
    hashMap.put(7, 19);
    hashMap.put(8, 20);
    CalcPercentiles.calcPercentiles(hashMap);
  }
}

输出:

1.2987013
1.2987013
1.2987013
7.7922077
12.987013
24.675325
24.675325
25.974026

答案 1 :(得分:0)

您还可以使用番石榴的分位数来计算分位数\百分位数数据- https://guava.dev/releases/23.0/api/docs/com/google/common/math/Quantiles.html