JavaScriptやTypeScriptで中央値を取得する

JavaScript

JavaScriptやTypeScriptで中央値を取得したい!

業務でNodeを使ってツールを作成した際に中央値を取得したい時がありましたのでまとめておきます。

フロントエンドでのJavaScriptTypeScriptの処理でも同様に使用できるので、ご活用ください。

  • 合計を計算したい!
  • 平均を取得したい!

という場合は、こちらに記事にまとめておきましたのでこちらを参照してください!

中央値とは?

中央値とは、データの並びでちょうど真ん中のところの値のことです。

データを集計する際に、外れ値が存在する場合などは平均よりもこの中央値の方が適していることが多いです。

例えば、Webページの速度を計測して集計するのを例とすると、特定のネットワーク状況によっては稀に大きな値をとってしまう事も考えられます。

そのような場合だと、平均の値に大きく影響してしまうため、指針の一つとして中央値も取っておくと参考になりますね!

JavaScriptやTypeScriptで中央値を出す方法

中央値の計算方法

中央値の計算方法はこちらのサイトにある通りなので、これをプログラムにしていきます。

中央値はメディアン(Median)ともよばれます。データを小さい順に並べたときにちょうど真ん中に来る値のことです。
例えば「1, 1, 2, 4, 5, 8, 9, 10, 11」というデータの場合、中央値は「5」です。もしデータの数が偶数の場合、例えば「1, 1, 2, 4, 5, 8, 9, 10, 11,14」というデータの場合、中央にある2つの値「5」と「8」の平均が中央値となります。したがって、中央値は(5+8)/2=6.5です。

https://bellcurve.jp/statistics/course/4317.html

サンプルコード

こちらがサンプルコードとなります。

  • データの数が奇数個の場合は、真ん中の値(arr[half])を返します。
  • データの数が偶数個の場合は、中央にある2つの値の平均((arr[half – 1] + arr[half]) / 2)を返します。

JavaScript

const median = (numbers) => {
    const half = (numbers.length / 2) | 0
    const arr = numbers.sort((a, b) => {
        return a - b;
    })

    if (arr.length % 2) {
        return arr[half]
    }
    return (arr[half - 1] + arr[half]) / 2
}

console.log(median([100, 200, 300, 400, 500]));
console.log(median([100, 200, 300, 400, 500, 600]));
console.log(median([600, 600, 100, 200, 300, 400, 500]));

TypeScript

const median = (numbers: number[]) => {
  const half = (numbers.length / 2) | 0
  const arr = numbers.sort((a, b) => {
    return a - b
  })

  if (arr.length % 2) {
    return arr[half]
  }
  return (arr[half - 1] + arr[half]) / 2
}

console.log(median([100, 200, 300, 400, 500]))
console.log(median([100, 200, 300, 400, 500, 600]))
console.log(median([600, 600, 100, 200, 300, 400, 500]))

実行結果

こちらが実行結果になります。

ちゃんと中央値が求められているのがわかるかと思います!

# JavaScript
% node index.js
300
350
400

# TypeScript
% ts-node index.ts
300
350
400

まとめ

今回は、JavaScriptやTypeScriptを用いて中央値を取得する方法について纏めました!

基本的な計算方法は、業務でもよく使うことになると思うので、毎回ググるのではなくメモったり参考になるやつをブックマークしておくと、すぐに作業できて良いですね!

オススメの関連商品

Note一覧

コメント

タイトルとURLをコピーしました