延长赛:码农最後的哄擡价格,高级操作:说出一口聚合分析(下)

没想到有生之年也会遇到必须写延长赛的日子
太失策了
但没写就有个东西卡在那的感觉
真是不苏胡,只好默默打开一年可能打开一个月的git库更新了
是的,这种如鲠在喉的感觉两天就让人太不舒服了

赶快把这写完才能心安理得地去写结赛心得

那麽今天来最後的Metric指标聚合吧!!

今天的参考起点

指标聚合就是将指定查询的资料进行某种运算
这个某种运算与Excel或一般SQL一样,给与函式返回结果

那麽这次就先从最日常的一次开始再马上一次结束吧

1. max:查出聚合的最大值

2. min:查出聚合的最小值

3. sum:查出聚合的总和值

4. avg:查出聚合的平均值

欸,这样也太混,所以给个两颗小栗子

一般查询聚合分析

POST /it_help/_search?size=0
{
  "query": {
      "filter": {
        "match": { "name": "java" }//仅统计名中带java
      }
  },
  "aggs": {
    "java_age_sum": { 
            "sum": {
                "field": "age",//统计栏位为年龄
                "miss": 18//若年龄值为空则以18来算
            } 
         }
  }
}
// 类似 sql :select sum(age) where name like %java%; 

然而聚合分析也支援脚本运算

POST /it_help/_search?size=0
{
  "query": {
    "constant_score": {
      "filter": {
        "term": { "name": "java" }
      }
    }
  },
  "aggs": {
    "java_ageSum": {
      "sum": {
        "script": {
          "source": "doc.age.value"
        }
      }
    }
  }
}

5. Value Count :value计数,通常跟平均一起显示,计算目标值计数,重复值也会算+1

POST /it_help/_search?size=0
{
  "aggs" : {
    "name_count" : { "value_count" : { "field" : "name" } }
  }
}
//类似 select count(*) from it_help where name <> null
但这些东西往往都要一起用,要不掺在一起做 ....

6.stats:统计聚合

//直接贴个官网的
POST /exams /_search ? size = 0 {
  "aggs": {
    "grades_stats": {
      "stats": {
        "field": "grade"
      }
    }
  }
}
//return
{ ...
  "aggregations": {
    "grades_stats": {
      "count": 2,
      "min": 50.0,
      "max": 100.0,
      "avg": 75.0,
      "sum": 150.0
    }
  }
}

7. Weighted Avg:加权平均数

关键公式: ∑(value * weight) / ∑(weight)

国中时高阶书生最爱比的分数,因为都太高了,硬要分高下
像我们这种低端伴读都比单科分数的XDD
用起来略抽象,直接上官网范例来解释

POST /exams/_doc?refresh //放入一笔资料
{
  "grade": [1, 2, 3],
  "weight": 2
}


POST /exams/_search
{
  "size": 0,
  "aggs": {
    "weighted_grade": {//宣告此聚合名称
      "weighted_avg": {//指定平均数
        "value": {
          "field": "grade"
        },
        "weight": {//指定加权平均权重
          "field": "weight"
        }
      }
    }
  }
}

//返回
{
  ...
  "aggregations": {
    "weighted_grade": {
      "value": 2.0 //=((1*2) + (2*2) + (3*2)) / (2+2+2) == 2
    }
  }
}

8. cardinality:基数聚合:不计算重复值加总

//计算资料库中有几种性别
GET /it_help/_search {
  "size": 0,
  "aggs": {
    "distinct_sex": {
      "cardinality": {
        "field": "sex"
      }
    }
  }
}
//返回
"aggregations": {
  "distinct_sex": {
    "value": 2 //理所当然的吧,就是生理男跟生理女而已
  }
}

9. boxplot:箱型图(盒须图)聚合

基础统计中我少数听得懂的几章 点我去略懂
标示出资料库中该栏位25% 50% 75% 及最大最小值

GET it_help/_search
{
  "size": 0,
  "aggs": {
    "age_boxplot": {
      "boxplot": {
        "field": "age" 
      }
    }
  }
}

//返回
{
 "aggregations": {
    "load_time_boxplot": {
      "min": 18.0,
      "max": 36.0,
      "q1": 22.0,//下四分位数
      "q2": 26.0,//中位数
      "q3": 30.0//上四位数
    }
  }
}

10.percentile:百分位数指标

...这还真是不知道该怎麽解释,就是盒须图的详细版

维基百科拷贝一波,来长长知识
百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数,以Pk表示第k百分位数。

//用法与箱型图极为相似,因为资料不够就直接拷官网的拉
GET latency/_search
{
  "size": 0,
  "aggs": {
    "load_time_outlier": {
      "percentiles": {
        "field": "load_time" 
      }
    }
  }
}
//返回
{
 "aggregations": {
    "load_time_outlier": {
      "values": {
        "1.0": 5.0,
        "5.0": 25.0,
        "25.0": 165.0,
        "50.0": 445.0,
        "75.0": 725.0,
        "95.0": 945.0,
        "99.0": 985.0
      }
    }
  }
}

好咧,以上就是敝农比较常用到的指标聚合
面试基本也只看到过这些
(通常是很随便的请列举五个)
但前五个算一个,所以再补五个,真是算够意思了
明天终於可以放心地打赛後心得了....

加班就算了,铁人还延长,这啥劳碌命XDD


对於文章中的任何用词与专业字或都可以在下面

梗图看不懂也行

蔽农会带着谦卑爲怀的心情竭尽所能回覆与说明的


<<:  如何设计自己的 RxJS Operators

>>:  拯救资工系学生的基本素养—在 Shell 上监控&背景执行 Process

使用模拟器

在Android Studio 启始画面的右下角,可以呼叫出AVD,这就是Android Virtu...

[JS] You Don't Know JavaScript [this & Object Prototypes] - this Or That?

前言 this是JavaScript中最令人困惑的关键字之一,他会自动在每个function作用域中...

【Day29】反馈元件 - Toast

元件介绍 Toast 可以提供使用者操作的反馈讯息。包含一般资讯、操作成功、操作失败、警告讯息等。预...

[DAY21]弹性讯息

Flex Messages are messages with a customizable lay...

Day 25:「好慢喔,下载多少了?」- 进度条

终於到了我们的元件篇啦!!! 今天是第一个元件,所以稍微简单一点。 我们要来做下载的进度条~ 前置...