JAVA有percentile函数吗_五分位算法

采用五分位算法,统计一下数据的分布情况

576c8d36d236d73416e46476514b7616.png

首先,我们设置一下五分位算法点位K值,分别采用 16%,37%,63%,84%概率

根据excel自带的函数PERCENTILE,以及 K值,分别计算出四个点位值,结果如下图所示

11747873fd7cd0de18741b27bd8a5927.png

虽然excel有自带的函数,但是java没有,必须通过自己编写程序来实现

创建 Method.java类

packagecom.test;importjava.text.DecimalFormat;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;public classMethod {/*** 五分位算法

*@authorAdministrator

**/

public static double caculateQuinte(double[] data,int k) {double point = 0.00;try{

List list =Method.createList(data);point= Method.getValue(list, k);

}catch(Exception e) {

e.printStackTrace();

}returnpoint;

}/*** 计算点位值

*@paramlist

*@paramp

*@return

*/

public static double getValue(List list,intp){//list大小

int n =list.size();double doubleData = ((double)(n-1)*p)/100;//整数部分

int i = (n-1)*p/100;

DecimalFormat decimalFormat= new DecimalFormat("########0.000000000");//小数部分

double j = Double.parseDouble(decimalFormat.format(doubleData -i));//第i个元素值

double a = list.get(i);

//第i+1个元素值

double b = list.get(i+1);return Double.parseDouble(decimalFormat.format(((1-j)*a)+(j*b)));

}/*** 倒排序

*@paramdd

*@return

*/@SuppressWarnings("unchecked")public static List createList(double...dd){

List list = new ArrayList();for(Double db : dd ){

list.add(db);

}

@SuppressWarnings("rawtypes")

Comparator comparator= newComparator() {

@Overridepublic intcompare(Object o1, Object o2) {double d1 = (double)o1;double d2 = (double)o2;if(d1 >d2){return 1;

}else if(d1 ==d2){return 0;

}else{return -1;

}

}

};

Collections.sort(list,comparator);returnlist;

}

}

标红的地方说明一下:我查看过其他网友对PERCENTILE原理的描述,他们说 a 和 b,分别取 i+1 和 i+2的值,但是我按照他们说的,计算出来的结果不对(http://www.360doc.com/content/15/0718/17/26365336_485725251.shtml)

写一个测试类Test.java

packagecom.test;public classTest {public static voidmain(String[] args) {double[] dd ={4.5077089,2.8531679,2.5365171,2.5248491,2.2526313,1.2222833,0.8638264,0.7489835,0.7429955,0.6211575,0.5247851,0.4948757,0.4946506,0.4172792,0.3435438,0.1663883,-0.014807,-0.06503,-0.334462,-0.430975,-0.478554,-2.720794,-3.328721,-5.205578};int[] k = {16,37,63,84};

System.out.println(Method.caculateQuinte(dd, k[0]));

System.out.println(Method.caculateQuinte(dd, k[1]));

System.out.println(Method.caculateQuinte(dd, k[2]));

System.out.println(Method.caculateQuinte(dd, k[3]));

}

}

看下结果,如下图所示

30aae9eebeff6dc5d831180d6d674891.png

与excel自带函数计算出的结果完全一致

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值