java实现四分位数
一、介绍
四分位数是把数列分成四等份的数值:
1.把所有数值从小到大排列
2.把数列分割成四等份
3.在"分割点"位置的数值就是四分位数
例如:
例子:5、7、4、4、6、2、8
从小到大排列:2、4、4、5、6、7、8
分割成四等份:
结果是:
- 第一四分位数(Q1) = 4
- 第二四分位数(Q2),也是中位数, = 5
- 第三四分位数(Q3) = 7
有时"分割点" 是在两个数之间……这时四分位数便是那两个数的平均值。
例子:1、3、3、4、5、6、6、7、8、8
已经是顺序排列了
分割成四等份:
四分位数 2 是在第 5 和第 6个数的正中间:
Q2 = (5+6)/2 = 5.5
结果是:
- 第一四分位数(Q1) = 3
- 第二四分位数(Q2) = 5.5
- 第三四分位数(Q3) = 7
二、四分位距
“四分位距” 是从 Q1 到 Q3:
等于第三四分位数与第一四分位数的差:
例如:
四分位距是:
Q3 − Q1 = 7 − 4 = 3
三、箱须图
我们可以用"箱须图"来显示这些重要的数值:
最后我们来看一个完整的例子:
例如:箱须图和四分位距数据是
4、17、7、14、 18、12、3、16、10、4、4、11
从小到大排列:
3、4、4、4、7、10、11、12、14、16、17、18
分割成四等份
3、4、4 | 4、7、10 | 11、12、14 | 16、17、18
所有的四分位数都在数与数的中间:
- 第一四分位数(Q1) = (4+4)/2 = 4
- 第二四分位数(Q2) = (10+11)/2 = 10.5
- 第三四分位数(Q3) =(14+16)/2 = 15
并且:
- 最小值是 3,
- 最大值是 18
我们有充足的数据去画箱须图了:
四分位距是:
Q3 − Q1 = 15 − 4 = 11
四、代码示例
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
double[] data = {5102, 5010, 4992, 4996, 5063, 5082, 5070, 5067, 5147, 5146};
Arrays.sort(data);
double q1 = calculateQuantile(data, 0.25);
double q2 = calculateQuantile(data, 0.5);
double q3 = calculateQuantile(data, 0.75);
System.out.println("第一四分位数(Q1): " + q1);
System.out.println("第二四分位数(Q2): " + q2);
System.out.println("第三四分位数(Q3): " + q3);
}
private static double calculateQuantile(double[] data, double percentile) {
double index = (data.length - 1) * percentile;
int floor = (int) Math.floor(index);
int ceil = (int) Math.ceil(index);
if (floor == ceil) {
return data[floor];
} else {
double lowerValue = data[floor] * (ceil - index);
double upperValue = data[ceil] * (index - floor);
return lowerValue + upperValue;
}
}
}
计算的结果为:
第一四分位数(Q1): 5023.25
第二四分位数(Q2): 5068.5
第三四分位数(Q3): 5097.0