度数分布
解説/アルゴリズム
度数分布
86, 20, 71, 43, 39, 66, 59, 50, 83, 63
48, 31, 80, 79, 100, 92, 83, 44, 52, 56
上記は 1 組男子 20 人のテスト結果のデータ。
このようなデータの傾向を調べるためには、値を適当な区間に分け、その区間ごとにデータの個数を集計する。
階級(点) 以上~未満 | 度数(人) |
---|---|
0 ~ 20 | 0 |
20 ~ 40 | 3 |
40 ~ 60 | 7 |
60 ~ 80 | 4 |
80 ~ 100 | 5 |
100 ~ 120 | 1 |
集計して区間ごとにまとめた表を度数分布表
といい、各区間を階級
、区間の幅を階級の幅
、階級の中央の値を階級値
、各階級に入るデータの個数を度数
と呼ぶ。
相対度数
25, 27, 38, 46, 52, 54, 66, 71, 76, 76
78, 82, 91, 96, 98
新たに 1 組女子 15 人のテスト結果のデータで度数分布表を作る。
階級(点) 以上~未満 | 度数(人) |
---|---|
0 ~ 20 | 0 |
20 ~ 40 | 3 |
40 ~ 60 | 3 |
60 ~ 80 | 5 |
80 ~ 100 | 4 |
100 ~ 120 | 0 |
男子と女子の度数分布表ができたので比較をするために 2 つの表を結合する。
階級(点) 以上~未満 | 度数(人/男子) | 度数(人/女子) |
---|---|---|
0 ~ 20 | 0 | 0 |
20 ~ 40 | 3 | 3 |
40 ~ 60 | 7 | 3 |
60 ~ 80 | 4 | 5 |
80 ~ 100 | 5 | 4 |
100 ~ 120 | 1 | 0 |
男子と女子では人数が違うので単に比較しただけだとデータの傾向が分かりづらい。
このような場合は各階級の度数が全体のどれぐらい占めているか、つまり割合で表すとよい。
階級(点) 以上~未満 | 相対度数(男子) | 相対度数(女子) |
---|---|---|
0 ~ 20 | 0 | 0 |
20 ~ 40 | 0.15 | 0.2 |
40 ~ 60 | 0.35 | 0.2 |
60 ~ 80 | 0.2 | 0.33 |
80 ~ 100 | 0.25 | 0.27 |
100 ~ 120 | 0.05 | 0 |
各階級の度数を、度数の合計で割った値を相対度数
と呼ぶ。
コード解説
// 元データ
const data = [
86, 20, 71, 43, 39, 66, 59, 50, 83, 63, 48, 31, 80, 79, 100, 92, 83, 44, 52,
56,
];
// 度数分布表
const table: number[] = [];
// 階級の幅
const range = 20;
// テストの最大の点(100が100~120の範囲なので120)
const max = 120;
// 階級の数
const rMax = Math.ceil(max / range);
// 各階級の度数を0にしておく
for (let i = 0; i < rMax; i++) {
table[i] = 0;
}
// 各データを階級の幅で割ることで階級を取得
// 該当の階級の値を増やす
data.forEach((v) => {
const i = Math.floor(v / range);
table[i]++;
});
// 度数分布表の出力
table.forEach((b, i) => {
const rangeMin = range * i;
const rangeMax = range * (i + 1);
console.log(`${rangeMin}以上 ${rangeMax}未満: ${table[i]}人`);
});
0以上 20未満: 0人
20以上 40未満: 3人
40以上 60未満: 7人
60以上 80未満: 4人
80以上 100未満: 5人
100以上 120未満: 1人