Java分位点计算方法是什么
本篇內容介紹了“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 代碼實現
相關方法
privatestaticdoublegetPercentile(List<Double>dataList,doublep){
intn=dataList.size();
dataList.sort(newComparator<Double>(){
//從小到大排序
@Override
publicintcompare(Doubleo1,Doubleo2){
if(o1==null||o2==null){
return0;
}
returno1.compareTo(o2);
}
});
doublepx=p*(n-1);
inti=(int)java.lang.Math.floor(px);
doubleg=px-i;
if(g==0){
returndataList.get(i);
}else{
return(1-g)*dataList.get(i)+g*dataList.get(i+1);
}
}
測試接口
@RequestMapping("CalcPercentile")
@ResponseBody
publicRCalcPercentile(@Param("per")doubleper){
double[]arrs={2,4,5,1,3,3,4,1,2,5};
List<Double>doubleList=newArrayList<>();
for(doublecurrArr:arrs){
doubleList.add(currArr);
}
doublepercentile=getPercentile(doubleList,per);
returnR.ok().message("查詢服務數據");
}
正常輸出
輸入1也就是100%,正常輸出5.0,輸入0.5,輸出3.0
完成需求
上面的分析是,知道百分位,求百分位對應的數值? 而我們的需求是利用樣本時間里面的某個值,求對應的百分位是多少?經過查閱很多資料沒有找到相關公式,當然有大佬知道可以提示一下.總歸問題還是要解決的. 這邊使用的解決方案是,把樣本數據分成100個點,求每個百分位對應的數值,然后與樣本中的目標數據一 一對比,求其最接近的那個數.就間接取到了目標數據的百分位值
核心代碼
Java 求百分位數
說明一下
百分位數,統計學術語,如果將一組數據從小到大排序,并計算相應的累計百分位,則某一百分位所對應數據的值就稱為這一百分位的百分位數。可表示為:一組n個觀測值按數值大小排列。如,處于p%位置的值稱第p百分位數。
java代碼
publicstaticdoublepercentile(double[]data,doublep){
intn=data.length;
Arrays.sort(data);
doublepx=p*(n-1);
inti=(int)java.lang.Math.floor(px);
doubleg=px-i;
if(g==0){
returndata[i];
}else{
return(1-g)*data[i]+g*data[i+1];
}
}
總結
以上是生活随笔為你收集整理的Java分位点计算方法是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现超市库存管理系统
- 下一篇: zookeeper -- 第四章 zoo