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