首页 > 解决方案 > Laravel Eloquent 如何在 php 上获得第一和第三四分位数?

问题描述

我正在尝试使用第一个和第三个四分位数查找异常值。这是我目前拥有的:

$data = Data::select('created_at', 'value')
        ->get();

$median = collect($data)->median("value");

标签: phplaraveleloquentquartile

解决方案


您可以像这样创建一个私有函数:

function Quartile($Array, $Quartile) {
  sort($Array);
  $pos = (count($Array) - 1) * $Quartile;

  $base = floor($pos);
  $rest = $pos - $base;

  if( isset($Array[$base+1]) ) {
    return $Array[$base] + $rest * ($Array[$base+1] - $Array[$base]);
  } else {
    return $Array[$base];
  }
}

function Average($Array) {
  return array_sum($Array) / count($Array);
}

function StdDev($Array) {
  if( count($Array) < 2 ) {
    return;
  }

  $avg = Average($Array);

  $sum = 0;
  foreach($Array as $value) {
    $sum += pow($value - $avg, 2);
  }

  return sqrt((1 / (count($Array) - 1)) * $sum);
}

然后,你可以调用Quartile()方法取决于你想要哪个四分位数,如果你想要第一个四分位数,那么把0.25as$Quartile的参数值,对于第三个四分位数,它的0.75

来源答案


推荐阅读