我正在尝试从我在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
答案 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