IT铁人第27天 Elasticsearch 使用python查询资料 Aggregations:Percentiles/Percentile Ranks

今天的文章要讲的是Percentiles(百分位数)跟Percentile Ranks(百分位数排名)
以下是这次的测试资料
https://ithelp.ithome.com.tw/upload/images/20201011/20129976e8aquufOiv.png

Percentiles

・这种聚合方式会回传一个或多个百分位数,这些百分位数所代表的是一定百分比的观察值出现的点,例如第95个百分位数是大於观察值的95%的值。

・百分位数通常用於查找异常值。在正态分布中,第0.13和第99.87个百分位数代表与平均值的三个标准差,任何超出三个标准偏差的数据通常被视为异常。

・预设会回传[ 1, 5, 25, 50, 75, 95, 99 ]的百分位数。(第25、50、75位数就是第1四分位数、中位数、第3四分位数)

・回传的数值是近似值

aggs query:

{
  "aggs": {
    "grades_outlier": {
      "percentiles": {
        "field": "grades.eng"
      }
    }
  }
}

结果:

"aggregations" : {
  "grades_outlier" : {
    "values" : {
      "1.0" : 43.0,
      "5.0" : 43.0,
      "25.0" : 69.0,
      "50.0" : 82.5,
      "75.0" : 98.0,
      "95.0" : 100.0,
      "99.0" : 100.0
    }
  }
}

也可以透过可变参数percents决定回传的百分位数
aggs query:

{
  "aggs": {
    "grades_outlier": {
      "percentiles": {
        "field": "grades.eng",
        "percents": [0.13 ,90, 91, 92, 93, 93, 95, 99.5, 99.87]
      }
    }
  }
}

结果:

"aggregations" : {
  "grades_outlier" : {
    "values" : {
      "0.13" : 43.0,
      "90.0" : 99.8,
      "91.0" : 99.92,
      "92.0" : 100.0,
      "93.0" : 100.0,
      "93.0" : 100.0,
      "95.0" : 100.0,
      "99.5" : 100.0,
      "99.87" : 100.0
    }
  }
}

也可以使用脚本调整,调整的内容取决於使用者的目的,这边简单的做个范例
aggs query

{
  "aggs": {
    "grades_outlier": {
      "percentiles": {
        "field": "grades.eng",
        "percents": [0.13 ,90, 91, 92, 93, 93, 95, 99.5, 99.87],
        "script": {
          "lang": "painless", 
          "source": "doc['grades.eng'].value - 20"
        }
      }
    }
  }
}

结果:

"aggregations" : {
  "grades_outlier" : {
    "values" : {
      "0.13" : 23.0,
      "90.0" : 79.8,
      "91.0" : 79.92,
      "92.0" : 80.0,
      "93.0" : 80.0,
      "93.0" : 80.0,
      "95.0" : 80.0,
      "99.5" : 80.0,
      "99.87" : 80.0
    }
  }
}

#脚本的内容就别太在意,这边只是简单的告诉大家可以使用脚本依据使用者的目的调整结果

想知道更多实际应用方使可以参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html#_script_10

Percentile Ranks

这种聚合方式则和Percentiles相反,是推算数值大约为多少百分位数

回传的数值是近似值

aggs query:

{
  "aggs": {
    "grades_rp": {
      "percentile_ranks": {
        "field": "grades.eng",
        "values": [40]  #指定要推测的数值
      }
    }
  }
}

结果:

"aggregations" : {
  "grades_rp" : {
    "values" : {
      "40.0" : 6.4102564102564115
    }
  }
}

一样可以使用脚本调整

{
  "aggs": {
    "grades_rp": {
      "percentile_ranks": {
        "field": "grades.eng",
        "values": [40],
        "script": {
          "source": "doc['grades.eng'].value - 10"
        }
      }
    }
  }
}

结果:

"aggregations" : {
  "grades_rp" : {
    "values" : {
      "40.0" : 12.820512820512823
    }
  }
}

可以应用在算PR值

今天的文章就到这边,谢谢大家


<<:  故事二十六:今天来玩玩资料透视表!

>>:  [Day 27]粗糙集特徵选择简介-5

Twinkle Tray 多显示器屏幕亮度调节工具

Twinkle Tray是一款支持多显示器的屏幕亮度调节工具,让你可以在一块屏幕上调节所有的显示器亮...

请问服务路由器的IP地址怎麽算?

各位前辈们好,我想询问这题怎麽解~ 我查了很多资料还是不知道怎麽解 谢谢各位前辈 一部路由器有A、B...

Day 18 Odoo画面新增栏位显示

不罗嗦! 直接上图 基本上要先在odoo原生的Xml找到你要放置新栏位的位置, 然後使用xpath语...

第35天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10258...

Day 12 Develop audio player

Function of timer and compare functionality of ha...