溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java分位點(diǎn)計(jì)算方法是什么

發(fā)布時(shí)間:2021-12-16 19:19:42 來(lái)源:億速云 閱讀:427 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“Java分位點(diǎn)計(jì)算方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    Java 分位點(diǎn)(分位值)計(jì)算

    有一個(gè)需求

    給出一段時(shí)間的PB(平均市凈率),然后選擇這段時(shí)間的某一天,計(jì)算這天的分位值.

    很簡(jiǎn)單的一個(gè)數(shù)理統(tǒng)計(jì)學(xué)科的問(wèn)題,對(duì)于畢業(yè)多年的學(xué)渣還是有必要記錄以下相關(guān)問(wèn)題的計(jì)算方法.

    例如:

    取最近1.1-1.10號(hào)的pb分別是(1,1,2,2,3,3,4,4,5,5),我傳入1.1號(hào)

    那么返回我值是:0%,如果傳入1.10號(hào)返回100%

    那么怎么建立數(shù)學(xué)模型呢?

    注:分位值說(shuō)明:

    Pn為n分位值。表示被調(diào)查群體中有n%的數(shù)據(jù)小于此數(shù)值。n的大小反應(yīng)市場(chǎng)的不同水平,通常使用P10、P25、P50、P75、P90來(lái)表示市場(chǎng)的不同水平。

    • 10分位值:表示有10%的數(shù)據(jù)小于此數(shù)值,反映市場(chǎng)的低端水平。

    • 25分位值:表示有25%的數(shù)據(jù)小于此數(shù)值,反映市場(chǎng)的較低端水平。

    • 50分位值:表示有50%的數(shù)據(jù)小于此數(shù)值,反映市場(chǎng)的中等水平。

    • 75分位值:表示有75%的數(shù)據(jù)小于此數(shù)值,反映市場(chǎng)的較高端水平。

    • 90分位值:表示有90%的數(shù)據(jù)小于此數(shù)值,反映市場(chǎng)的高端水平。

    例:求下例一組數(shù)據(jù)的25分位,50分位,75分位值:
    A=【65 23 55 78 98 54 88 90 33 48 91 84】

    解:

    方法一:

    1、先把上面12個(gè)數(shù)按從小到大排序

    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個(gè)數(shù)有11個(gè)間隔,每個(gè)四分位間11/4=2.75個(gè)數(shù)

    3、

    ① 計(jì)算25分位:

    第1個(gè)四分位數(shù)為上面12個(gè)數(shù)中的第1+2.75=3.75個(gè)數(shù)

    指第3個(gè)數(shù)對(duì)應(yīng)的值48及第3個(gè)數(shù)與第4個(gè)數(shù)之間的0.75位置處,即:48+(0.75)*(54-48)=52.5 (52.5為25分位值)。

    ② 計(jì)算50分位:

    第2個(gè)四分位數(shù)為上面12個(gè)數(shù)中的第1+2.752=6.5個(gè)數(shù)

    指第6個(gè)數(shù)對(duì)應(yīng)的值65及第6個(gè)數(shù)與第7個(gè)數(shù)之間的0.5位置處,即:65+(0.5)(78-65)=71.5 (71.5為50分位值)。

    【中位值也可以用一種很簡(jiǎn)單的方法計(jì)算,按從小到大排列后:

    若數(shù)組中數(shù)的個(gè)數(shù)為奇數(shù),則最中間那個(gè)數(shù)對(duì)應(yīng)的值則為中位值;

    若數(shù)組中數(shù)的個(gè)數(shù)為偶數(shù),則取中間兩個(gè)數(shù)值的平均值則為中位值,如上78+65)/2=71.5】

    ③ 計(jì)算75分位:

    第3個(gè)四分位數(shù)為上面12個(gè)數(shù)中的第1+2.753=9.

    指第9個(gè)數(shù)對(duì)應(yīng)的值88及第9個(gè)數(shù)與第10個(gè)數(shù)之間的0.25位置處,即:88+(0.25)(90-88)=88.5 (88.5為75分位值)。

    【將1到100分為10等分,則有10個(gè)10分位,用以上的方法可計(jì)算10分位值和90分位值。(以上實(shí)例的P10=34.5,P90=90.9)】

    下面用Java 代碼實(shí)現(xiàn)

    相關(guān)方法

    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);
            }
        }

    測(cè)試接口

    @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("查詢服務(wù)數(shù)據(jù)");
        }
    正常輸出

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

    Java分位點(diǎn)計(jì)算方法是什么

    完成需求

    上面的分析是,知道百分位,求百分位對(duì)應(yīng)的數(shù)值? 而我們的需求是利用樣本時(shí)間里面的某個(gè)值,求對(duì)應(yīng)的百分位是多少?經(jīng)過(guò)查閱很多資料沒(méi)有找到相關(guān)公式,當(dāng)然有大佬知道可以提示一下.總歸問(wèn)題還是要解決的. 這邊使用的解決方案是,把樣本數(shù)據(jù)分成100個(gè)點(diǎn),求每個(gè)百分位對(duì)應(yīng)的數(shù)值,然后與樣本中的目標(biāo)數(shù)據(jù)一 一對(duì)比,求其最接近的那個(gè)數(shù).就間接取到了目標(biāo)數(shù)據(jù)的百分位值

    核心代碼

    Java分位點(diǎn)計(jì)算方法是什么

    Java 求百分位數(shù)

    說(shuō)明一下

    百分位數(shù),統(tǒng)計(jì)學(xué)術(shù)語(yǔ),如果將一組數(shù)據(jù)從小到大排序,并計(jì)算相應(yīng)的累計(jì)百分位,則某一百分位所對(duì)應(yīng)數(shù)據(jù)的值就稱為這一百分位的百分位數(shù)??杀硎緸椋阂唤Mn個(gè)觀測(cè)值按數(shù)值大小排列。如,處于p%位置的值稱第p百分位數(shù)。

    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];
      }
     }

    “Java分位點(diǎn)計(jì)算方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI