2016-01-08 216 views
3

我想从我已经在LinkedHashMap中填充的数据集计算百分位数。如何计算Java中的百分比?

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西港岛线开始从最高vlaue countiion列表

+0

是否存在的'value'要用于计算百分外部范围是多少?或者,1-20是范围? –

+0

价值我disply这里是即将datnamic它可能是让或更 –

+0

wnat获得每个值的百分位数 –

回答

0

首先,测试.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