PHP:基于历史数据的价格范围/平均值计算

时间:2016-11-06 18:01:45

标签: php average median

我正在建立一个小应用程序,分析ebay销售商品的历史价格 对于某些关键字/项目,范围非常广泛,因为搜索过于宽泛或完全错误,被项目感染不正确

例如

  

搜索iphone的价格结果包括手机,但是   还有掺假价格数据的充电器和配件/无关物品......   所以我有一个范围从充电器5美元到500美元   iphone

所以,鉴于我会尝试改进我的搜索,我想知道是否有数学计算来排除异常值

说我有

$1200
$549
$399
$519
$9
$599
$549
$9
$499 
$399
$519
$99
$5
$5

如何让价格范围达到$ 300- $ 600而不是$ 10- $ 800左右......

她的ebelow当前的php即时使用...不确定是否是最好的

    function remove_outliers($dataset, $magnitude = 1)
{
    $count     = count($dataset);
    $mean      = array_sum($dataset) / $count;                                                                                             // Calculate the mean
    $deviation = sqrt(array_sum(array_map("sd_square", $dataset, array_fill(0, $count, $mean))) / $count) * $magnitude;                    // Calculate standard deviation and times by magnitude
    return array_filter($dataset, function ($x) use ($mean, $deviation) {return ($x <= $mean + $deviation && $x >= $mean - $deviation);}); // Return filtered array of values that lie within $mean +- $deviation.
}

function sd_square($x, $mean)
{
    return pow($x - $mean, 2);
}

function calculate_median($arr)
{
    sort($arr);
    $count     = count($arr);             
    $middleval = floor(($count - 1) / 2);  
    if ($count % 2) { 
        $median = $arr[$middleval];
    } else { 
        $low    = $arr[$middleval];
        $high   = $arr[$middleval + 1];
        $median = (($low + $high) / 2);
    }
    return $median;
}

 $prices = remove_outliers($prices); //$prices is the array with all the prices stored
 $trend  = calculate_median($prices);
$trend  = round(($trend));
$min    = round(min($prices));
$max    = round(max($prices));

0 个答案:

没有答案