Laravel Eloquent:计算数据集的四分位数

laravel eloquent:计算数据集的四分位数

本文介绍了如何在 Laravel Eloquent 中计算数据集的第一和第三四分位数。通过自定义函数,我们可以方便地对 Eloquent 查询结果进行统计分析,从而识别异常值或进行更深入的数据挖掘。本文提供了一个清晰的 PHP 实现,并解释了如何将其应用于 Laravel 项目中。

在数据分析中,四分位数是描述数据分布的重要统计量。第一四分位数(Q1)代表数据集中较小的前 25% 的值,第三四分位数(Q3)代表数据集中较小的 75% 的值。在 Laravel 项目中,我们经常需要从数据库中提取数据并计算其四分位数,以便进行异常值检测、数据可视化等操作。

以下是如何在 PHP 中实现计算四分位数的函数:

<?php

/**
 * 计算给定数组的指定四分位数
 *
 * @param array $Array  待计算的数组
 * @param float $Quartile 四分位数,例如:0.25 代表第一四分位数,0.75 代表第三四分位数
 * @return float|int  计算结果
 */
function Quartile(array $Array, float $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];
  }
}

/**
 * 计算数组的平均值
 *
 * @param array $Array 待计算的数组
 * @return float 平均值
 */
function Average(array $Array) {
  return array_sum($Array) / count($Array);
}

/**
 * 计算数组的标准差
 *
 * @param array $Array 待计算的数组
 * @return float|null 标准差,如果数组元素少于 2 个,则返回 null
 */
function StdDev(array $Array) {
  if( count($Array) < 2 ) {
    return null;
  }

  $avg = Average($Array);

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

  return sqrt((1 / (count($Array) - 1)) * $sum);
}
登录后复制

使用示例:

假设我们有一个 Data 模型,并且想要计算 value 字段的第一和第三四分位数。

<?php

namespace App/Http/Controllers;

use App/Models/Data;
use Illuminate/Http/Request;

class DataController extends Controller
{
    public function calculateQuartiles()
    {
        $data = Data::select('value')->get()->pluck('value')->toArray();

        $firstQuartile = Quartile($data, 0.25);
        $thirdQuartile = Quartile($data, 0.75);

        // 输出结果或进行其他处理
        echo "第一四分位数 (Q1): " . $firstQuartile . "/n";
        echo "第三四分位数 (Q3): " . $thirdQuartile . "/n";

        // 可以使用四分位距 (IQR) 来识别异常值
        $iqr = $thirdQuartile - $firstQuartile;
        $upperBound = $thirdQuartile + 1.5 * $iqr;
        $lowerBound = $firstQuartile - 1.5 * $iqr;

        echo "异常值上限: " . $upperBound . "/n";
        echo "异常值下限: " . $lowerBound . "/n";

        return view('data.quartiles', [
            'firstQuartile' => $firstQuartile,
            'thirdQuartile' => $thirdQuartile,
            'upperBound' => $upperBound,
            'lowerBound' => $lowerBound,
        ]);
    }
}
登录后复制

代码解释:

  1. Data::select(‘value’)->get(): 使用 Eloquent 从 Data 模型中查询 value 字段的所有数据。
  2. pluck(‘value’)->toArray(): 将 Eloquent 集合转换为包含 value 值的数组。
  3. Quartile($data, 0.25): 调用 Quartile 函数计算第一四分位数。
  4. Quartile($data, 0.75): 调用 Quartile 函数计算第三四分位数。
  5. IQR = Q3 – Q1: 计算四分位距 (Interquartile Range)。
  6. UpperBound = Q3 + 1.5 * IQR 和 LowerBound = Q1 – 1.5 * IQR: 计算识别异常值的上限和下限。超出这些范围的数据点通常被认为是异常值。

注意事项:

  • 确保 Data 模型已经正确配置,并且数据库连接可用。
  • 根据实际情况调整异常值检测的阈值(例如,使用不同的 IQR 倍数)。
  • 该方法适用于数值型数据。对于非数值型数据,需要进行适当的转换。

总结:

通过自定义 Quartile 函数,我们可以方便地在 Laravel 项目中计算数据集的四分位数,从而进行数据分析和异常值检测。 结合Eloquent,可以方便地从数据库提取数据并进行分析,为业务决策提供支持。 还可以根据需求扩展这些函数,例如添加计算百分位数的功能。

以上就是Laravel Eloquent:计算数据集的四分位数的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/1458730.html

发表回复

Your email address will not be published. Required fields are marked *