0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

偏差値の計算をJavaScriptとPHPで書いてみた

Last updated at Posted at 2021-04-03

きっかけ

ゲームアプリ作ってるときに

「スコアの他に順位や偏差値とか表示したら嬉しくね?」

と思ったので実装しようとした😸

(追記)
JavaScriptの記事を書いたけど
サーバー側で処理したくてPHPで書き直したのでそのコードも載せておく(メソッド分割してない)😿

偏差値を求める

下記のスコアに対する偏差値を表示してみる

// スコア一覧
[10, 30, 50, 70, 80, 100]

プログラム(JavaScript)

// 平均
const average = scores => scores.reduce((acc, current) => acc + current, 0) / scores.length

// 分散
const variance = (scores, avg) => scores.reduce((acc, current) => acc + Math.pow(current - avg, 2), 0) / scores.length

// 標準偏差
const standardDeviation = (scores, avg) => Math.sqrt(variance(scores, avg))

// 偏差値
const standardScore = (score, avg, sd) => (((score - avg) * 10) / sd) + 50

// スコア一覧
const scores = [10, 30, 50, 70, 80, 100]

// 偏差値の表示
const avg = average(scores)
const sd = standardDeviation(scores, avg)

scores.forEach((score, i) => console.log((i + 1) + "番目の偏差値: " + standardScore(score, avg, sd)))

プログラム(PHP)

$scores =  [10, 30, 50, 70, 80, 100];
$length = count($scores);
$average = array_sum($scores) / $length;

$sum = 0;
foreach ($scores as $score) {
    $sum += pow(abs($score - $average), 2);
}

foreach ($scores as $i => $score) {
    $standardScore = ($score - $average) / sqrt($sum / $length) * 10 + 50;
    echo ($i + 1) . "番目の偏差値: " . $standardScore . "\n";
}

結果

JavaScript
1番目の偏差値: 34.63300360144335
2番目の偏差値: 41.218859200824774
3番目の偏差値: 47.80471480020619
4番目の偏差値: 54.39057039958762
5番目の偏差値: 57.683498199278326
6番目の偏差値: 64.26935379865975
PHP
1番目の偏差値: 34.633003601443
2番目の偏差値: 41.218859200825
3番目の偏差値: 47.804714800206
4番目の偏差値: 54.390570399588
5番目の偏差値: 57.683498199278
6番目の偏差値: 64.26935379866

実際に使ってみた

87FBFF9B-962B-44B3-A01A-08992DCC6219.png

正しく計算されてるっぽく見える❗️😸

おわりに

ES6のナウい書き方にしてみた

アロー関数の省略記法で長くなったらどこで折り返しするんだろう...😹
(そもそも折り返したいような場合は省略せずに複数行書くべきなのかも)

あとゼロ除算の考慮とかしてないのでコピって使う場合は気を付けてね😽

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?