ElasticSearch 2 (30) - 信息聚合系列之条形图

摘要

版本

elasticsearch版本: elasticsearch-2.x

内容

聚合还有一个令人激动的特性就是能够十分容易地将它们转换成图表和图形。本章中,我们会关注于各种各样的分析并反复“蹂躏”我们示例中的数据。我们也会展现聚合可以支持的不同种类的图表。

直方图(histogram)桶特别有用,它本质上是一个条形图,如果有创建报表或分析仪表盘的经验,那么我们会毫无疑问的发现里面有一些图表是条形图。直方图是根据指定的间隔显示的,如果需要售价的直方图,我们可能指定的间隔值为 20,000。它会每 $20,000 创建新桶。然后文档会被分到对应的桶中。

对于仪表盘来说,我们希望知道每个售价区间内汽车的销量。我们还会想知道每个售价区间内汽车所带来的收入,可以通过对每个区间内已售汽车的售价求和得到。

可以用 histogram 和一个嵌套的 sum 度量得到我们想要的答案:

  GET /cars/transactions/_search
{
"size" : 0,
"aggs":{
"price":{
"histogram":{ #1
"field": "price",
"interval": 20000
},
"aggs":{
"revenue": {
"sum": { #2
"field" : "price"
}
}
}
}
}
}

#1 histogram 桶要求两个参数:一个数值字段以及一个定义桶大小间隔字段。

#2 sum 度量嵌套在每个售价区间内,用来显示每个区间内的总收入。

如我们所见,查询是围绕 price 聚合构建的,它包含一个 histogram 桶。这个桶要求一个供计算的数值字段,以及一个间隔大小。这个间隔值定义了桶的“宽度”。20000 这个宽度表示我们得到的返回是 [0-19999, 20000-39999, ...]

接着,我们在直方图内定义嵌套的度量,这个 sum 度量会将售价范围内每个文档的售价字段里的值加起来。这可以为我们提供每个售价区间的收入,从而可以发现到底是普通家用车赚钱还是奢侈车赚钱。

响应结果如下:

  {
...
"aggregations": {
"price": {
"buckets": [
{
"key": 0,
"doc_count": 3,
"revenue": {
"value": 37000
}
},
{
"key": 20000,
"doc_count": 4,
"revenue": {
"value": 95000
}
},
{
"key": 80000,
"doc_count": 1,
"revenue": {
"value": 80000
}
}
]
}
}
}

结果很容易理解,不过应该注意到直方图的键值是区间的下限。键 0 代表区间 0-19,999,键 20000 代表区间 20,000-39,999 等等。

注意

我们可能会注意到空的区间,比如:$40,000-60,000,没有出现在响应中。histogram 桶默认会忽略它,因为它有可能会导致不希望的潜在错误输出。

我们会在下一小节中讨论如何包括空桶。返回空桶(Returning Empty Buckets)

可以在图 Figure 35, “Sales and Revenue per price bracket” 中看到以上数据直方图的图形化表示。

Figure 35. Sales and Revenue per price bracket

当然,我们可以为任何聚合输出的分类和统计结果创建条形图,而不只是直方图桶。让我们以最受欢迎 10 种汽车以及它们的平均售价、标准差这些信息创建一个条形图。我们会用到 terms 桶和 extended_stats 度量:

  GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"makes": {
"terms": {
"field": "make",
"size": 10
},
"aggs": {
"stats": {
"extended_stats": {
"field": "price"
}
}
}
}
}
}

它会按受欢迎度返回制造商列表以及它们各自的统计信息。我们会对 stats.avgstats.countstats.std_deviation 信息特别感兴趣,并用它们计算出标准误差:

std_err = std_deviation / count

创建图表如图 Figure 36, “Average price of all makes, with error bars”.

Figure 36. Average price of all makes, with error bars

参考

elastic.co:

Building Bar Charts

ElasticSearch 2 (30) - 信息聚合系列之条形图的更多相关文章

  1. ElasticSearch 2 (37) - 信息聚合系列之内存与延时

    ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...

  2. ElasticSearch 2 (38) - 信息聚合系列之结束与思考

    ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...

  3. ElasticSearch 2 (36) - 信息聚合系列之显著项

    ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...

  4. ElasticSearch 2 (35) - 信息聚合系列之近似聚合

    ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...

  5. ElasticSearch 2 (34) - 信息聚合系列之多值排序

    ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...

  6. ElasticSearch 2 (33) - 信息聚合系列之聚合过滤

    ElasticSearch 2 (33) - 信息聚合系列之聚合过滤 摘要 聚合范围限定还有一个自然的扩展就是过滤.因为聚合是在查询结果范围内操作的,任何可以适用于查询的过滤器也可以应用在聚合上. 版 ...

  7. ElasticSearch 2 (32) - 信息聚合系列之范围限定

    ElasticSearch 2 (32) - 信息聚合系列之范围限定 摘要 到目前为止我们看到的所有聚合的例子都省略了搜索请求,完整的请求就是聚合本身. 聚合与搜索请求同时执行,但是我们需要理解一个新 ...

  8. ElasticSearch 2 (31) - 信息聚合系列之时间处理

    ElasticSearch 2 (31) - 信息聚合系列之时间处理 摘要 如果说搜索是 Elasticsearch 里最受欢迎的功能,那么按时间创建直方图一定排在第二位.为什么需要使用时间直方图? ...

  9. ElasticSearch 2 (29) - 信息聚合系列之测试驱动

    ElasticSearch 2 (29) - 信息聚合系列之测试驱动 摘要 我们可以用以下几页定义不同的聚合和它们的语法,但学习聚合的最佳途径就是用实例来说明.一旦我们获得了聚合的思想,以及如何合理地 ...

随机推荐

  1. CSS 文本

    CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. 缩进文本 把 Web 页面上的段落的第一行缩进,这是一种最常用的文本格式化 ...

  2. 容器内部设置JVM的Heap大小

    容器内部利用脚本来获取容器的CGroup资源限制,并通过设置JVM的Heap大小. Docker1.7开始将容器cgroup信息挂载到容器中,所以应用可以从 /sys/fs/cgroup/memory ...

  3. 无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件

    1.问题症状 已经处于Debug模式,运行时完全正常,但是一调试就出现对话框,显示出错信息:“无法找到“XXX.exe”的调试信息,或者调试信息不匹配.未使用调试信息生成二进制文件.” 2.解决方法 ...

  4. Vim2.1-Vim简明教程【CoolShell】【非原创】

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

  5. php实现远程网络文件下载到服务器指定目录(方法一)

    PHP实现远程网络文件下载到服务器指定目录(方法一) <?php function getFile($url, $save_dir = '', $filename = '', $type = 0 ...

  6. Android病毒家族及行为(一)

    1病毒名称:a.remote.GingerMaste中文名:病毒家族:GingerMast病毒类别:远程控制恶意行为:获取root权限,同时连接远端服务器,在其指令控制下静默下载其它恶意软件,给用户手 ...

  7. 网络对抗技术 2017-2018-2 20152515 Exp2 后门原理与实践

    1.实验内容 (1)使用netcat获取主机操作Shell,cron启动 (0.5分) 关于netcat:是一个底层工具,进行基本的TCP UDP数据收发.常被与其他工具结合使用,起到后门的作用. 相 ...

  8. Educational Codeforces Round 41 (Rated for Div. 2)(A~D)

    由于之前打过了这场比赛的E题,而后面两道题太难,所以就手速半个多小时A了前4题. 就当练手速吧,不过今天除了C题数组开小了以外都是1A A Tetris 题意的抽象解释可以在Luogu里看一下(话说现 ...

  9. ucos获得系统时间OSTimeGet();

    OSTimeGet() 获得系统节拍值OSTime,滴答定时器中断一次OSTime++.

  10. 模拟赛 sutoringu

    sutoringu 题意: 询问有多少一个字符串内有多少个个子区间,满足可以分成k个相同的串. 分析: 首先可以枚举一个长度len,表示分成的k个长为len的串.然后从1开始,每len的长度分成一块, ...