[Elasticsearch] 聚合 - 创建条形图(Bar Chart)

创建条形图(Building Bar Charts)

聚合的一个令人激动的性质是它能够很容易地被转换为图表和图形。在本章中,我们会使用前面的样本数据集来创建出各种分析案例。我们也会展示聚合能够支持的种类。

柱状图桶(Histogram Bucket)非常有用。柱状图在本质上就是条形图,如果你创建过一份报告或者分析面板(Analytics Dashboard),毫无疑问其中会有一些条形图。柱状图通过指定一个间隔(Interval)来工作。如果我们使用柱状图来表示销售价格,你或许会指定一个值为20000的间隔。因此每20000美刀会创建一个桶。然后文档会被分配到桶中。

对于我们的仪表板,我们想要知道每个价格区间中有多少辆车。同时我们也想知道该价格桶中产生了多少收入。这是通过将该间隔中所有的车的售价累加而计算得到的。

为了达到这一目的,我们使用了一个histogram类型的聚合然后在其中嵌套了一个sum指标:

GET /cars/transactions/_search?search_type=count
{
   "aggs":{
      "price":{
         "histogram":{
            "field": "price",
            "interval": 20000
         },
         "aggs":{
            "revenue": {
               "sum": {
                 "field" : "price"
               }
             }
         }
      }
   }
}

正如你能看到的那样,我们的查询是围绕着价格聚合而建立的,该聚合包含了一个柱状图桶。该桶需要一个数值字段以及一个间隔值来进行计算。间隔用来定义每个桶有“多宽”。间隔为20000意味着我们能够拥有区间[0-19999, 20000-39999, 等]。

接下来,我们在柱状图中定义了一个嵌套的指标。它是一个sum类型的指标,会将该区间中的文档的price字段进行累加。这就得到了每个价格区间中的收入,因此我们就能够从中看出是普通车还是豪华车赚的更多。

以下是得到的响应:

{
...
   "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
               }
            }
         ]
      }
   }
}

The response is fairly self-explanatory, but it should be noted that the histogram keys correspond to the lower boundary of the interval. The key 0 means 0-19,999, the key 20000 means 20,000-39,999, and so forth. 响应是能够对其意义进行解释的,但是值得注意的是histogram键对应的是间隔的下边界。键值0表示的是0-19999,键值20000表示的是20000-39999,以此类推。

NOTE 缺失了空桶

你也许会注意到40000-60000美刀这一个间隔没有出现在响应中。histogram桶默认会省略它,因为包含空桶可能会造成输出过大,而这可能并不是我们想要的结果。

在下一节中我们会讨论如何包含空桶,返回空桶

从图形上,你可以将前面的数据表示如下:

当然,你可以使用任何生成类别和统计信息的聚合来创建条形图,并不仅限于使用histogram桶。让我们创建一个受欢迎的汽车制造商的条形图,其中包含了它们的平均价格和标准误差(Standard Error)。需要使用的而是terms桶以及一个extended_stats指标:

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

它会返回一个制造商列表(根据受欢迎程度排序)以及针对每个制造商的一些列统计信息。其中,我们对stats.avg,stats.count以及stats.std_deviation感兴趣。有了这一信息,我们能够计算出标准误差:

std_err = std_deviation / count

得到的图形如下所示:

时间: 2024-10-07 02:36:29

[Elasticsearch] 聚合 - 创建条形图(Bar Chart)的相关文章

Highcharts - Bar Chart

1. 条形图(Bar Chart)需要的数据格式类型如下: ["Luke Skywalker", "Darth Vader", "Yoda", "Princess Leia"] [2, 4, 1, 1] 2. Bar Chart代码示例: $(function () { $('#container').highcharts({ chart: { type: 'bar' }, xAxis: { categories: ['Jan

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标) 2015-01-04 来源: http://blog.csdn.net/dm_vincent/article/details/42387161 本章翻译自Elasticsearch官方指南的Aggregations-High-level Concepts一章. 高层概念(High-Level Concepts) 和查询DSL一样,聚合(Aggregations)也拥有一种可组合(Composabl

转 HighCharts笔记之: Bar Chart

最近需要做一些Web图标,研究了几个开源的第三方工具后,最后决定使用HighCharts开发: Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.目前HighCharts支持 的图表类型有曲线图.区域图.柱状图.饼状图.散状点图和综合图表. HighCharts界面美观,由于使用JavaScript编写,所以不需要像Flash和Java那样需要插件才可以运行,

ElasticSearch聚合分析

聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频uv Having查询 根据 count 进行过滤 根据其它指标进行过滤 首先展示一下我们要分析的文档结构: { "video_id": 1289643545120062253, // 视频id "video_uid": 3931482202390368051, //

Relative-Frequency|frequency|pie chart |bar chart

2.2Organizing Qualitative Data The number of times a particular distinct value occurs is called its frequency (or count) Relative-Frequency Distribution:百分比 Note: Relative-frequency distributions are better than frequency distributions for comparing

Elasticsearch聚合问题

在测试Elasticsearch聚合的时候报了一个错误.具体如下: GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } 报错信息 { "error": { "root_cause": [ { "type&qu

[Elasticsearch] 聚合 - 时间数据处理(Looking at Time)

本章翻译自Elasticsearch官方指南的Looking at Time一章. 时间数据处理(Looking at Time) 如果在ES中,搜索是最常见的行为,那么创建日期柱状图(Date Histogram)肯定是第二常见的.为什么要使用日期柱状图呢? 想象在你的数据中有一个时间戳.数据是什么不重要-Apache日志事件,股票交易日期,棒球比赛时间-任何拥有时间戳的数据都能通过日期柱状图受益.当你有时间戳时,你经常会想创建基于时间的指标信息: 今年的每个月销售了多少辆车? 过去的12小时

[Elasticsearch] 聚合的测试数据

本章翻译自Elasticsearch官方指南的Aggregation Test-Drive一章. 聚合的测试数据(Aggregation Test-Drive) 我们将学习各种聚合以及它们的语法,但是最好的学习方法还是通过例子.一旦你了解了如何思考聚合以及如何对它们进行合适的嵌套,那么语法本身是不难的. 让我们从一个例子开始.我们会建立一个也许对汽车交易商有所用处的聚合.数据是关于汽车交易的:汽车型号,制造商,销售价格,销售时间以及一些其他的相关数据. 首先,通过批量索引(Bulk-Index)

Elasticsearch聚合限制内存使用

限制内存使用 通常为了让聚合(或者任何需要访问字段值的请求)能够快点,访问fielddata一定会快点, 这就是为什么加载到内存的原因.但是加载太多的数据到内存会导致垃圾回收(gc)缓慢, 因为JVM试着发现堆里面的额外空间,甚至导致OutOfMemory异常. 最让你吃惊的是,你会发现Elaticsearch不是只把符合你的查询的值加载到fielddata. 而是把index里的所document都加载到内存,甚至是不同的 _type 的document. 逻辑是这样的,如果你在这个查询需要访