You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PHP环境下使用Laravel Eloquent如何计算第一和第三四分位数?

Laravel 集合计算第一/第三四分位数实现

你当前使用的Laravel Collection类没有内置四分位数计算方法,可基于现有逻辑扩展实现,步骤如下:

1. 预处理排序数据

首先提取目标字段值并做升序排序,重置索引避免后续取值出错:

// 原有代码
$data = Data::select('created_at', 'value')->get();
$median = collect($data)->median("value");

// 新增四分位数计算前置逻辑
$sortedValues = collect($data)->pluck('value')->sort()->values();
$count = $sortedValues->count();
$q1 = $q3 = null;
if ($count < 4) {
    // 数据量过少时无法计算有效四分位数,可按需补充降级逻辑
}

2. 计算四分位数值

以下实现采用统计领域常用的线性插值法计算,结果和Excel的QUARTILE.EXC函数逻辑一致,适配绝大多数异常值识别场景:

// 计算第一四分位数Q1(25%分位)
$q1Pos = ($count - 1) * 0.25;
$q1Base = (int) floor($q1Pos);
$q1Frac = $q1Pos - $q1Base;
$q1 = $sortedValues[$q1Base];
if ($q1Frac > 0 && isset($sortedValues[$q1Base + 1])) {
    $q1 += $q1Frac * ($sortedValues[$q1Base + 1] - $sortedValues[$q1Base]);
}

// 计算第三四分位数Q3(75%分位)
$q3Pos = ($count - 1) * 0.75;
$q3Base = (int) floor($q3Pos);
$q3Frac = $q3Pos - $q3Base;
$q3 = $sortedValues[$q3Base];
if ($q3Frac > 0 && isset($sortedValues[$q3Base + 1])) {
    $q3 += $q3Frac * ($sortedValues[$q3Base + 1] - $sortedValues[$q3Base]);
}

3. 后续异常值判断规则

基于四分位数识别异常值默认采用IQR(四分位距)规则:

四分位距 $iqr = $q3 - $q1,正常取值范围为 [$q1 - 1.5 * $iqr, $q3 + 1.5 * $iqr],超出该范围的值可判定为异常值。


内容的提问来源于stack exchange,提问作者Jay Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:54:05