首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在没有弹性离群点的情况下聚集一个平均值?

有没有办法在没有弹性离群点的情况下聚集一个平均值?
EN

Stack Overflow用户
提问于 2020-12-31 07:57:12
回答 1查看 194关注 0票数 1

我需要一种方法来创建一个转换,它将聚集一个字段的平均值,但没有异常值(假设只有10%-90%百分位数之间的值)。例如,如果我有以下文件:

代码语言:javascript
复制
[
{someField:1},
{someField:2},
{someField:3},
{someField:4},
{someField:5},
{someField:6},
{someField:7},
{someField:8},
{someField:9},
{someField:10}
]

它将计算出2-9的平均数。

编辑的:将"value“重命名为"someField”

EN

回答 1

Stack Overflow用户

发布于 2020-12-31 12:51:17

你可以用一个一次完成这个,但是你必须编写百分位数函数,然后是avg函数--我写了一个这里。但是这个脚本不会有表现力,所以我不认为它值得…的努力

相反,我建议首先检索百分位界

代码语言:javascript
复制
POST myindex/_search
{
  "size": 0,
  "aggs": {
    "boundaries": {
      "percentiles": {
        "field": "value",
        "percents": [
          10,
          90
        ]
      }
    }
  }
}

生成[1.5, 9.5],然后将这些数字插入到加权平均聚合

代码语言:javascript
复制
POST myindex/_search
{
  "size": 0,
  "aggs": {
    "avg_without_outliers": {
      "weighted_avg": {
        "value": {
          "field": "value"
        },
        "weight": {
          "script": {
            "source": "def v = doc.value.value; return v <= params.min || v >= params.max ? 0 : 1",
            "params": {
              "min": 1.5,
              "max": 9.5
            }
          }
        }
      }
    }
  }
}

weight要么是0,要么是1,这取决于正在遍历的特定文档是否是异常值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65518140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档