Statistics Calculator

by wio_dude

HTML

<ol id="output" class="console"></ol>

CSS

.console {
    font-family: courier;
    background-color: #000000;
    color: #aaaaaa;
    padding: 10px;
}

JavaScript

/*
 *  Statistics
 */

var output = document.querySelector('#output');
function print(x) {
    output.innerHTML += '<li>' + x + '</li>';
}

var g11_ft = [
    [0, 7],
    [1, 3],
    [2, 4],
    [3, 8],
    [4, 9],
    [5, 2],
    [6, 1],
    [7, 2],
    [8, 2],
    [9, 0],
    [10, 2],
    [11, 0],
    [12, 0],
    [13, 0],
    [14, 0],
    [20, 2]
];

var g12_ft = [
    [0, 2],
    [1, 4],
    [2, 5],
    [3, 5],
    [4, 8],
    [5, 6],
    [6, 6],
    [7, 3],
    [8, 1],
    [9, 1],
    [10, 0],
    [11, 0],
    [12, 0],
    [13, 0],
    [14, 0],
    [20, 0]
];

var stats = calcStats(g11_ft);
print('Grade 11 Stats');
for (x in stats) {
    print(x + ': ' + stats[x]);
}
print("");

stats = calcStats(g12_ft);
print('Grade 12 Stats');
for (x in stats) {
    print(x + ': ' + stats[x]);
}


function calcStats(ft) {
    var stats = {
        'total' : 0,
        'sum' : 0,
        'min' : null,
        'max' : null,
        'range' : null,
        'q1' : null,
        'median' : null,
        'q3' : null,
        'iqr' : null,
        'mean' : null,
        'stddev' : null
    };
    for (var i = 0; i < ft.length; i++) {
        var value = ft[i][0];
        var frequency = ft[i][1];
        stats.total += frequency;
        stats.sum += value * frequency;
        if (frequency > 0) {
            if (stats.min == null || stats.min > value) {
                stats.min = value;
            }
            if (stats.max == null || stats.max < value) {
                stats.max = value;
            }
        }
    }
    stats.range = stats.max - stats.min;
    stats.mean = stats.sum / stats.total;
    stats.median = getMedian(ft, 0, stats.total - 1);
    if (stats.total % 2 == 0) {
        var n = stats.total / 2;
        stats.q1 = getMedian(ft, 0, n);
        stats.q3 = getMedian(ft, n + 1, stats.total - 1);
    } else {
        var n = (stats.total - 1) / 2;
        stats.q1 = getMedian(ft, 0, n);
        stats.q3 = getMedian(ft, n, stats.total - 1);
    }
   ...