【问题标题】:Calculate an average value for the bar chart using the most frequent value使用最频繁的值计算条形图的平均值
【发布时间】:2017-10-13 18:02:12
【问题描述】:

如果我使用带箱的条形图绘制“价格”数据(使用 Python)的值,我会得到以下结果:

所以,价格在 0 到 15 之间。让我们假设这些是一天中某个特定时间的价格值分布。

在 Kibana 中,我想创建一个线图来计算每小时的平均价格。如果我申请Average BucketAverage,那么基本上平均值是从数据中计算出来的。但是,在我的情况下,“平均值”基本上是直方图中最常见的值。

例如,在上面给出的图表中,平均值为1.1,因为它有多个800 条目。

如何在 Kibana 中计算这种“平均值”?

【问题讨论】:

  • 我猜你需要 Pipeline Avg Bucket 聚合。例如,如果我的平均每小时分布是 3,4,5,4,5,2,那么平均桶聚合将是 (3+4+5+4+5+2)/6 = 3.833。你需要这个 3.833,对吧?
  • @HatimStovewala:不,我需要最频繁的值,我将这个频繁的值称为“平均”。所以,我不想以经典方式计算平均值,因为对于我的应用程序来说它没有意义。在您的样本数据中,答案将在 4 到 5 之间,例如(4+5)/2 = 4.5
  • 为什么不直接使用 histogram 聚合而不是 price
  • @YuWatanabe:好的,谢谢。在这种情况下,Kibana 中的参数Interval 应该等于0.2 才能正确反映我的示例?我应该使用Average Bucket吗?
  • @YuWatanabe:我应该使用Average BucketMax 聚合吗?我想既然我想获得最大条目数的 bin,我应该在 Average Bucket 中使用 Max,不是吗?

标签: elasticsearch kibana


【解决方案1】:

让我们理清你的目标。你的目标是,

找出每小时出现次数最多的价格。

这太高级,无法在 kibana 上实现,让我们在 elasticsearch 上下文中实现。

  1. 将 x 轴设置为每小时间隔的日期时间
  2. 在每个小时桶中查找出现次数最多的价格

这可以通过下面的设置来完成。

y 轴

设置为指标聚合 - 平均

x 轴

使用

设置为日期直方图
  1. 字段:您的时间戳
  2. 间隔:每小时

以下是您案例的重要部分。

拆分系列

设置为条款

  1. 字段:价格
  2. 排序方式:自定义指标(计数)
  3. 顺序:降序
  4. 尺寸:1

    “聚合”:{ “2”:{ “日期直方图”:{ "字段": "@timestamp", “间隔”:“1h”, "time_zone": "亚洲/东京", “min_doc_count”:1 }, “聚合”:{ “3”:{ “条款”:{ “字段”:“价格”, “大小”:1, “命令”: { “_count”:“desc” } }, “聚合”:{ “1”:{ “平均”:{ “字段”:“价格” } } } } } } }

如果您查看 kibana 中的查询,您会发现第二个术语聚合只是返回计数最高的文档。

【讨论】:

  • 不应该是"Average Bucket" -> Y轴的聚合"Max"吗?
  • 如果您只想要直方图桶内的 max 价格。那么答案是 yes 。我只是假设你的想法。
  • 我只想每小时获得一个数字。在 X 轴上,我有几个小时。我在问题中显示的直方图是某个特定时间的价格分布,例如 15:00 到 16:00 之间。因此,在 Y 轴上,我想获得每小时最频繁的价格。因此,我假设在 X 轴上我应该按“小时”分组,而在 Y 轴上我应该使用“平均桶”->“直方图”->“价格”,然后是聚合“最大”->“价格” .正如我从您的回答中了解到的那样,这将为您提供我所需要的。
  • 我明白了。您需要做的就是将 x-axisAggregation 设置为 date histogram (interval hour) 并设置 Metric Aggregationsy 轴Max 。然后您将在每个小时内获得最高价格。
  • 不应该是最高价。这应该是最常见的价格。所以,我应该为每个小时选择最频繁的垃圾箱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多