计算四分位( Quartile ) Q1、Q2、Q3的值

浏览:100 发布日期:2020/02/19 分类:基础算法 关键字: 四分位,Quartile
计算四分位( Quartile ) Q1、Q2、Q3的值,默认选择n-1方法,这样结果与excel相同。
/**  
    * 计算四分位( Quartile ) Q1、Q2、Q3的值
    * @access public 
    * @param array $arr 要计算的一维数组
    * @return array $result 下标0-2 分别对应Q1、Q2、Q3
    */ 
    public function myquartile($arr)
    {
        // 获取数组长度
        $length = count($arr);

        // 如果数组为空或数组长度小于5时,返回空。
        if ($arr == null || $length == 0) return $result = [0=>'',1=>'',2=>''];
        if ($length < 5) return $result = [0=>'',1=>'',2=>''];
        
        // 数组排序
        sort($arr);

        // 初始化变量
        $result = array();  #储存结果
        $q = array();       #储存位置

        // 确定位置
        // 计算方法参考百度百科
        // 使用n-1方法。
        $q[0] = 1 + ($length - 1 ) * 0.25;
        $q[1] = 1 + ($length - 1 ) * 0.5;
        $q[2] = 1 + ($length - 1 ) * 0.75;
        // n+1方法结果也对,但是与excel不相同
        // $q[0] = ($length + 1 ) * 0.25;
        // $q[1] = ($length + 1 ) * 0.5;
        // $q[2] = ($length + 1 ) * 0.75;

        // 计算每个位置对应的值
        foreach ($q as $key => $value) {
            if(is_int($value))      # 如果位置是整数,则直接取位置对应的值
            {
                $result[$key] = $arr[$value-1];
            }else{
            # 如果位置不是整数。计算公式:大数*位置小数 + 小数*(1-位置小数)          
                $tempNum = $value;
                $temp = intval($tempNum);
                $tempNum = $tempNum - $temp;
                $result[$key] = $arr[$temp] * $tempNum + $arr[$temp-1] * (1-$tempNum);
            }
        }

        return $result;
    }

附件 Quartile.zip ( 925 B 下载:0 次 )

评论( 相关
后面还有条评论,点击查看>>