Я создаю небольшое приложение, которое анализирует на eBay исторические цены проданных товаров
и для некоторых ключевых слов / элементов диапазон очень широк, потому что поиск слишком широкий или просто неправильный, зараженный элементом, не соответствующим образом связанным
например.
поиск цен на iphone результаты включают либо телефон, но
также зарядное устройство и аксессуары / несвязанные предметы, которые фальсифицируют данные о ценах …
так что у меня есть диапазон, который идет от $ 5 для зарядного устройства и 500 $ для
iphone
Итак, учитывая, что я постараюсь улучшить поиск на моей стороне, мне интересно, есть ли математические вычисления, чтобы исключить выбросы
скажи, что у меня есть
$1200
$549
$399
$519
$9
$599
$549
$9
$499
$399
$519
$99
$5
$5
как получить диапазон цен 300-300 долларов вместо 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));
Задача ещё не решена.
Других решений пока нет …