2016-01-08 4 views
3

Я пытаюсь вычислить Percentile из наборов данных, которые я заполнил в 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 Виль начать countiion с самой высокой vlaue в списке

+0

Есть внешний диапазон 'value' вы хотите использовать для расчета процентили? Или, '' 1-20' диапазон? –

+0

Значение i disply here is coming 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 
Смежные вопросы