読者です 読者をやめる 読者になる 読者になる

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クラスがあり、それで標準偏差、分散、平均値を求めるメソッドはあったので、そこに最頻値、中央値を求めるメソッドを追加させていただきました。

http://d.hatena.ne.jp/sigisi/20111121