Ok nehmen wir an, Sie Ihre Datenpunkte in einem Array haben etwa so:
<?php $dataset = array(20.50, 80.30, 70.95, 15.25, 99.97, 85.56, 69.77); ?>
Dann können Sie die folgende Funktion verwenden (siehe Kommentare für das, was geschieht), um alle Zahlen zu entfernen, die außerhalb fallen der Mittelwert +/- Standardabweichung mal eine Größenordnung stellen Sie (Standard: 1):
<?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);
}
?>
Für Ihr Beispiel diese Funktion die folgenden mit einer Größe von 1 zurück:
Array
(
[1] => 80.3
[2] => 70.95
[5] => 85.56
[6] => 69.77
)
Ausreißer basierend auf was? – dynamic
vielleicht mit Mathe-Erweiterung: [http://www.php.net/manual/en/book.stats.php](http://www.php.net/manual/en/book.stats.php) – bitWorking
@ llnk basierend auf den Zahlen im angegebenen Ergebnis. Von dem, was ich verstehe, würden die Ausreißer auf den inneren und äußeren Quartilen basieren ... aber andererseits gebe ich bereitwillig zu, dass ich in statistischer Mathematik nicht groß bin. – eComEvo