Java 分位点(分位值)计算方式

 更新时间:2021年12月15日 10:03:32   作者:Think-Yang  
这篇文章主要介绍了Java 分位点(分位值)计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java 分位点(分位值)计算

有一个需求

给出一段时间的PB(平均市净率),然后选择这段时间的某一天,计算这天的分位值.

很简单的一个数理统计学科的问题,对于毕业多年的学渣还是有必要记录以下相关问题的计算方法.

例如:

取最近1.1-1.10号的pb分别是(1,1,2,2,3,3,4,4,5,5),我传入1.1号

那么返回我值是:0%,如果传入1.10号返回100%

那么怎么建立数学模型呢?

注:分位值说明:

Pn为n分位值。表示被调查群体中有n%的数据小于此数值。n的大小反应市场的不同水平,通常使用P10、P25、P50、P75、P90来表示市场的不同水平。

  • 10分位值:表示有10%的数据小于此数值,反映市场的低端水平。
  • 25分位值:表示有25%的数据小于此数值,反映市场的较低端水平。
  • 50分位值:表示有50%的数据小于此数值,反映市场的中等水平。
  • 75分位值:表示有75%的数据小于此数值,反映市场的较高端水平。
  • 90分位值:表示有90%的数据小于此数值,反映市场的高端水平。

例:求下例一组数据的25分位,50分位,75分位值:
A=【65 23 55 78 98 54 88 90 33 48 91 84】

解:

方法一:

1、先把上面12个数按从小到大排序

1 23
2 33
3 48
4 54
5 55
6 65
7 78
8 84
9 88
10 90
11 91
12 98

2、12个数有11个间隔,每个四分位间11/4=2.75个数

3、

① 计算25分位:

第1个四分位数为上面12个数中的第1+2.75=3.75个数

指第3个数对应的值48及第3个数与第4个数之间的0.75位置处,即:48+(0.75)*(54-48)=52.5 (52.5为25分位值)。

② 计算50分位:

第2个四分位数为上面12个数中的第1+2.752=6.5个数

指第6个数对应的值65及第6个数与第7个数之间的0.5位置处,即:65+(0.5)(78-65)=71.5 (71.5为50分位值)。

【中位值也可以用一种很简单的方法计算,按从小到大排列后:

若数组中数的个数为奇数,则最中间那个数对应的值则为中位值;

若数组中数的个数为偶数,则取中间两个数值的平均值则为中位值,如上78+65)/2=71.5】

③ 计算75分位:

第3个四分位数为上面12个数中的第1+2.753=9.

指第9个数对应的值88及第9个数与第10个数之间的0.25位置处,即:88+(0.25)(90-88)=88.5 (88.5为75分位值)。

【将1到100分为10等分,则有10个10分位,用以上的方法可计算10分位值和90分位值。(以上实例的P10=34.5,P90=90.9)】

下面用Java 代码实现

相关方法

private static double getPercentile(List<Double> dataList, double p) {
        int n = dataList.size();
        dataList.sort(new Comparator<Double>() {
            //从小到大排序
            @Override
            public int compare(Double o1, Double o2) {
                if(o1 == null || o2== null){
                return 0;
                }
                return o1.compareTo(o2);
            }
        });
        double px =  p*(n-1);
        int i = (int)java.lang.Math.floor(px);
        double g = px - i;
        if(g==0){
            return dataList.get(i);
        }else{
            return (1-g)*dataList.get(i)+g*dataList.get(i+1);
        }
    }

测试接口

    @RequestMapping("CalcPercentile")
    @ResponseBody
    public R CalcPercentile(@Param("per") double per){
        double[] arrs = {2,4,5,1,3,3,4,1,2,5};
        List<Double> doubleList = new ArrayList<>();
        for (double currArr : arrs) {
            doubleList.add(currArr);
        }
        double percentile = getPercentile(doubleList, per);
        return R.ok().message("查询服务数据");
    }

正常输出

输入1也就是100%,正常输出5.0,输入0.5,输出3.0

在这里插入图片描述

完成需求

上面的分析是,知道百分位,求百分位对应的数值? 而我们的需求是利用样本时间里面的某个值,求对应的百分位是多少?经过查阅很多资料没有找到相关公式,当然有大佬知道可以提示一下.总归问题还是要解决的. 这边使用的解决方案是,把样本数据分成100个点,求每个百分位对应的数值,然后与样本中的目标数据一 一对比,求其最接近的那个数.就间接取到了目标数据的百分位值

核心代码

在这里插入图片描述

Java 求百分位数

说明一下

百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。

java代码

 public static double percentile(double[] data,double p){
  int n = data.length;
  Arrays.sort(data);
  double px =  p*(n-1);
  int i = (int)java.lang.Math.floor(px);
  double g = px - i;
  if(g==0){
   return data[i];
  }else{
   return (1-g)*data[i]+g*data[i+1];
  }
 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot mybatis-config 和 log4j 输出sql 日志的方式

    Spring Boot mybatis-config 和 log4j 输出sql 日志的方式

    这篇文章主要介绍了Spring Boot mybatis-config 和 log4j 输出sql 日志的方式,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Hadoop Combiner使用方法详解

    Hadoop Combiner使用方法详解

    这篇文章主要介绍了 Hadoop Combiner使用方法详解的相关资料,希望通过本文能帮助到大家让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 浅析java中asList的使用详解

    浅析java中asList的使用详解

    Java中的asList方法是数组工具类 Arrays中的一个静态方法,asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,本文通过示例代码给大家介绍java asList使用,感兴趣的朋友一起看看吧
    2021-10-10
  • SpringMVC文件上传的配置实例详解

    SpringMVC文件上传的配置实例详解

    本文通过实例代码给大家介绍SpringMVC文件上传的配置相关内容,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • Spring中@Autowired注解的原理详解

    Spring中@Autowired注解的原理详解

    这篇文章主要介绍了Spring中@Autowired注解的原理详解,对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,需要的朋友可以参考下
    2023-11-11
  • 虚拟机linux中jdk安装配置方法

    虚拟机linux中jdk安装配置方法

    这篇文章主要为大家详细介绍了虚拟机linux中jdk安装配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • java导出大批量(百万以上)数据的excel文件

    java导出大批量(百万以上)数据的excel文件

    这篇文章主要为大家详细 介绍了java导出大批量即百万以上数据的excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • java时间 java.util.Calendar深入分析

    java时间 java.util.Calendar深入分析

    这篇文章主要介绍了java时间 java.util.Calendar深入分析的相关资料,需要的朋友可以参考下
    2017-02-02
  • 通过字节码看java中this的隐式传参详解

    通过字节码看java中this的隐式传参详解

    这篇文章主要给大家介绍了关于如何通过字节码看java中this的隐式传参的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Mybatis学习笔记之动态SQL揭秘

    Mybatis学习笔记之动态SQL揭秘

    这篇文章主要给大家介绍了关于Mybatis学习笔记之动态SQL的相关资料,小编觉得挺不错的,对大家学习或者使用Mybatis会有一定的帮助,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论