PHPで最頻値、中央値を求める関数つくった。
<?php class Statistics { //平均値を求める関数 public function average(array $values) { return (float) (array_sum($values) / count($values)); } public function variance(array $values) { // 平均値を求める $ave = self::average($values); $variance = 0.0; foreach ($values as $val) { $variance += pow($val - $ave, 2); } return (float) ($variance / count($values)); } public function standardDeviation(array $values) { // 分散を求める $variance = self::variance($values); // 分散の平方根 return (float) sqrt($variance); } //偏差値を求める public function standardScore( $target, array $arr) { return ( $target - self::average($arr) ) / self::standardDeviation($arr) * 10 + 50; } /* * 最頻値を求める */ public function mode(array $values) { //最頻値を求める。それぞれの頻出回数を計算して配列に入れる。 $data = array_count_values($values); $max = max($data);//配列から最大値を取得する。 $result[0] = array_keys($data,$max); return $result[0]; } /* *中央値を求める関数 */ public function median(array $values){ sort($values); if (count($values) % 2 == 0){ return (($values[(count($values)/2)-1]+$values[((count($values)/2))])/2); }else{ return ($values[floor(count($values)/2)]); } } } ?>
sigisiさんがつくったStatisticsクラスがあり、それで標準偏差、分散、平均値を求めるメソッドはあったので、そこに最頻値、中央値を求めるメソッドを追加させていただきました。