JavaScript:計算陣列的四分位數

2022/03/01 804 0 網站技術 , JavaScript

四分位數(Quartile)是把一串數據切成四個部分,每個部分含有 25%(1/4)的數據項目數,劃分的臨界點即為四分位數,它們的定義如下:

Q1 代表第一四分位數,即第25分位數。
Q2 代表第二四分位數,即第50分位數。
Q3 代表第三四分位數,即第75分位數。

舉例來說,有串數據為 [1, 2, 3, 4, 5, 6, 7],那麼其 Q1 是 2、Q2 是 4、Q3 是 6。我採用將中位數(Q2)去除的方式取值,你可以想成是將中位數做為切割點,分成前後段數據再取各自的中位數。目前四分位數計算沒有標準,只要找到合適的計算方式即可!

現在我們知道四分位數的概念了,就準備將這個邏輯放入 JavaScript 運作囉!首先當然要準備一個陣列放數據,我們假設這個陣列內的數據是亂序的,所以要經過一次由小到大的排序,接著還要去計算陣列的長度,以知道總共有多少項目的數據在內。再來我們要把各分位索引計算出來,再依照各分位索引是否為整數去計算值,這邊按照先前的邏輯,如果該分位索引 L 是整數,取 L 及 L-1 的平均值,否則取 L 無條件捨去之整數取值。到這邊都看不懂也沒關係,程式已經寫好在下面,有附上註解給大家參考!

window.onload = function () {
        // 有 1 到 14 共 14 個數字的陣列,輸入給它亂序
        var array = [14, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 1];

        // 陣列由小至大排序
        array.sort(function (a, b) {
            return a - b;
        });

        // 顯示排序後的陣列
        document.write("陣列:" + array + "<br>");

        // 陣列長度
        var length = array.length;

        // 各分位索引計算
        L_Q1 = length * (1 / 4) // 25分位數索引
        L_Q2 = length * (2 / 4) // 50分位數索引
        L_Q3 = length * (3 / 4) // 75分位數索引

        // 整數判斷函數
        function isInteger(obj) {
            return obj % 1 === 0
        }

        // 依照各分位索引是否為整數去計算值
        /*
        使用公式:如果該分位索引 L 是整數,取 L 及 L-1 的平均值,否則取 L 無條件捨去之整數取值。
        */
        if (isInteger(L_Q1)) {
            q1 = ((array[L_Q1] + array[L_Q1 - 1]) / 2).toFixed(3)
        } else {
            q1 = array[Math.floor(L_Q1)].toFixed(3)
        }

        if (isInteger(L_Q2)) {
            q2 = ((array[L_Q2] + array[L_Q2 - 1]) / 2).toFixed(3)
        } else {
            q2 = array[Math.floor(L_Q2)].toFixed(3)
        }

        if (isInteger(L_Q3)) {
            q3 = ((array[L_Q3] + array[L_Q3 - 1]) / 2).toFixed(3)
        } else {
            q3 = array[Math.floor(L_Q3)].toFixed(3)
        }

        // 顯示各分位數
        document.write("Q1:" + q1 + "<br>");
        document.write("Q2:" + q2 + "<br>");
        document.write("Q3:" + q3 + "<br>");
}

輸出結果如下:

陣列:1,2,3,4,5,6,7,8,9,10,11,12,13,14
Q1:4.000
Q2:7.500
Q3:11.000

CodePen

See the Pen
JavaScript:計算陣列的四分位數
by Feng, Cheng-Chi (@qwe987299)
on CodePen.


▲ 精選圖片。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇