当前位置: 首页 > news >正文

Kibana:如何使用魔法公式创建具有影响力的可视化效果?(第 1 部分)

作者:来自 Elastic Vincent du Sordet

我们将看到 Kibana Lens 编辑器中的神奇数学公式如何帮助突出显示高值。


简介

在上一篇博文《作为非设计师设计直观的 Kibana 仪表板》中,我们强调了创建直观仪表板的重要性。它展示了简单的更改(分组主题、更改类型图表等)如何对理解数据产生影响。在提供 Kibana 数据分析或 Elastic Observability Engineer 课程等课程时,我们强调了这篇博文以及这些更改如何帮助将重要信息带到表面。我喜欢一种互补的方法来实现这一目标:使用两种颜色将最高数据值与常见数据值区分开来。

为了说明这个想法,我们将使用示例航班数据数据集。现在,让我们比较两个可视化,按航班总数排名前 10 个目的地国家。哪个可视化的影响更大?

如果你选择第二个,你可能想知道如何使用 Kibana Lens 编辑器来实现这一点。去年准备认证时,我找到了一种实现这一结果的方法。秘诀是使用两个不同的层和一些神奇的公式。这篇文章将解释 Lens 公式中的数学如何帮助创建两个数据颜色可视化。

我们将从第一个示例开始,该示例仅强调我们关注的数据集的最高值。第二个示例描述了如何突出显示其他高值(如上图所示)。

[注意:本博客文章中解释的技巧可以从 v 7.15 开始应用]

导入数据

我们可以按照如下的步骤来导入我们的示例数据:

这样我们就添加了需要用到的实力 sample flight dataset。

仅强调最高值

要了解数学如何帮助区分高值与普通值,让我们从第一个例子开始:仅强调最高值。

我们先从水平条形图开始:

我们需要确定当前正在检查的范围的最高值。我们将使用一个适当的 overall_* 函数:overall_max(),一个管道函数(相当于查询 DSL 中的管道聚合)。

在我们的示例中,我们按国家/地区(目的地)对航班进行分组。这意味着我们计算每个 DestCountry(= 1个存储桶)的航班数量。overall_max() 将选择哪个存储桶具有最高值。

这里的数学技巧是将每个存储桶的航班数量除以在所有存储桶中找到的最大值。只有一个存储桶将返回 1:与overall_max() 找到的最大值匹配的存储桶。所有其他存储桶将返回 <1 和 >0 的值。我们使用 floor() 来确保任何 0.xxx 值都四舍五入为 0。

现在,我们可以用 count() 将它乘以 1,这样我们就得到了第一层的公式!

Layer 1: count()*floor(count()/overall_max(count()))

从这里开始,在 Lens Editor 中,我们复制图层以调整包含其余数据的第二层的公式。我们需要在公式中附加另一个 count(),后跟减号运算符。这是另一个技巧。在此层中,我们只需确保不显示最高值,这只会发生一次。这是当 count() = total_max() 时,当我们将它们相除时,其值为 = 1。

Layer 2: count() - count()*floor(count()/overall_max(count()))

为了实现这两个图层的完美合并,我们需要在这两个图层中做以下调整:

  • 选择 bar horizontal stacked 
  • 垂直轴:将 “Rank by” 更改为 “Custom”,并确保排序功能为 “Count”

以下是两个图层的最终设置:

在上面,我们创建了一个最初的可视化图。我们最终为两个图层的配置如下:

Layer 1: count()*floor(count()/overall_max(count()))
Layer 2: count() - count()*floor(count()/overall_max(count()))

这种可视化对于时间序列数据也很有效,你需要快速突出显示哪个时间段(下例中为 12 小时)的航班数量最多:

在表面之上

基于我们之前所做的工作,我们可以扩展这种方法,以获得表面以上的其他高值。让我们看看我们在引言中使用了哪种公式来创建可视化图:

对于此可视化,我们使用了 round() 函数的一个属性。此函数仅引入大于最高值 50% 的值。

让我们复制第一个可视化并用 round() 替换 floor() 函数。

Layer 1: count()*round(count()/overall_max(count()))
Layer 2: count() - count()*round(count()/overall_max(count()))

这是一个简单的解决方案。如果我们想通过添加更多高值来进一步扩展第一层,该怎么办?例如,我们希望所有值都高于平均值。

为此,我们使用 overall_average()作为新的参考值,而不是 overall_max() 参考,以分离第1层中的合格值。由于我们正在与所有桶中的平均值进行比较,因此除法可能会返回大于 1 的值。

这里,clamp() 函数很好地解决了这个问题。

根据公式参考,clamp() “将值从最小值限制到最大值”。将 clamp() 和 floor() 结合起来可确保只有两个可能的输出值:作为参数给出的最小值 ( 0 ) 或最大值 ( 1 )。

应用于我们的航班数据集,它突出显示了航班数量超过平均水平的国家目的地:

Layer 1: count()*clamp(floor(count()/overall_average(count())),0,1)
Layer 2: count() - count()*clamp(floor(count()/overall_average(count())),0,1)

它还提供了使用其他动态引用的选项。例如,我们可以将所有大于最高值的 60% 的值放置在表面上方(> 0.6*overall_max(count()))。我们可以调整公式如下:


count()*clamp(floor(count()/(0.6*overall_max(count()) ) ),0,1)

结论

在第一部分中,我们已经了解了创建双色直方图的主要技巧:

  • 两层:一层用于最高值,一层用于剩余值
  • 可视化类型:水平/垂直堆叠条形图
  • 为了分离数据,我们使用一个公式,其中只有最高值返回 1,否则返回 0

然后在第二部分中,我们已经了解了如何扩展此原则以包含表面上方的更多高值。这种方法可以总结如下:

  • 从关注高值的第 1 层开始:count()*<返回 0 或 1 的公式>
  • 复制该层并调整公式:
  • ( count() - count()*<返回 0 或 1 的公式>)

最后,我们提供了 4 个通用公式,可用于为你的仪表板增添趣味:

1. Only the highest
Layer 1

count()*floor(count()/overall_max(count()))

Layer 2

count() - count()*floor(count()/overall_max(count()))

2.1. Above the surface : high values (above 50% of the max value)
Layer 1

count()*floor(count()/overall_max(count()))

Layer 2

count() - count()*floor(count()/overall_max(count()))

2.2. Above the surface : all values above the overall average
Layer 1

count()*clamp(floor(count()/overall_average(count())),0,1)

Layer 2

count() - count()*clamp(floor(count()/overall_average(count())),0,1)

2.2. Above the surface : all the values greater than 60% of the highest
Layer 1

count()*clamp(floor(count()/(0.6*overall_max(count()) ) ),0,1)

Layer 2

count() - count()*clamp(floor(count()/(0.6*overall_max(count()) ) ),0,1)

通过注册免费试用 Elastic Cloud 或免费下载 Elastic Stack 的自管理版本,亲自尝试这些示例。如果你对入门有其他问题,请前往 Kibana 论坛或查看 Kibana 文档指南。

在下一篇博客文章中,我们将看到新函数 ifelse()(在版本 8.6 中引入)如何通过更高级的公式大大简化可视化的创建。

参考文献

  • 作为非设计师设计直观的 Kibana 仪表板
  • Kibana:Lens 编辑器 - 使用公式进行数学运算
  • 在此讨论中发现 clamp() 函数(感谢 Marco!)

原文:Kibana: How to create impactful visualisations with magic formulas ? (part 1) — Elastic Observability Labs

相关文章:

Kibana:如何使用魔法公式创建具有影响力的可视化效果?(第 1 部分)

作者&#xff1a;来自 Elastic Vincent du Sordet 我们将看到 Kibana Lens 编辑器中的神奇数学公式如何帮助突出显示高值。 简介 在上一篇博文《作为非设计师设计直观的 Kibana 仪表板》中&#xff0c;我们强调了创建直观仪表板的重要性。它展示了简单的更改&#xff08;分组…...

【C++】多态and多态原理

目录 一、多态的概念 二、多态的定义及实现 &#x1f31f;多态的构成条件 &#x1f31f;虚函数 &#x1f31f;虚函数的重写 &#x1f320;小贴士&#xff1a; &#x1f31f;C11 override 和 final &#x1f31f;重载、重写&#xff08;覆盖&#xff09;、重定义&#xf…...

C# 实现二维数据数组导出到 Excel

目录 功能需求 范例运行环境 Excel DCOM 配置 设计实现 组件库引入 ​编辑​ 方法设计 生成二维数据数组 核心方法实现 调用示例 总结 功能需求 将数据库查询出来的数据导出并生成 Excel 文件&#xff0c;是项目中经常使用的一项功能。本文将介绍通过数据集生成二维…...

nlohmann::json中有中文时调用dump转string抛出异常的问题

问题描述 Winodows下C开发想使用一个json库&#xff0c;使用的nlohmann::json&#xff0c;但是遇到json中使用中文时&#xff0c;转成string&#xff0c;会抛出异常。 nlohmann::json contentJson;contentJson["chinese"] "哈哈哈";std::string test con…...

Unity中InputField一些属性的理解

先看代码&#xff1a; using UnityEngine; using UnityEngine.UI;public class TestInput : MonoBehaviour {[SerializeField]InputField inputField;void Start(){Debug.Log(inputField.text);Debug.Log(inputField.text.Length);Debug.Log(inputField.preferredWidth);Debug…...

【webpack4系列】webpack构建速度和体积优化策略(五)

文章目录 速度分析&#xff1a;使用 speed-measure-webpack-plugin体积分析&#xff1a;使用webpack-bundle-analyzer使用高版本的 webpack 和 Node.js多进程/多实例构建资源并行解析可选方案使用 HappyPack 解析资源使用 thread-loader 解析资源 多进程并行压缩代码方法一&…...

从零开始搭建 PHP

&#x1f6e0;️ 从零开始搭建 PHP 环境&#xff1a;详细教程 PHP&#xff08;Hypertext Preprocessor&#xff09;是最流行的后端脚本语言之一&#xff0c;广泛用于构建动态网站和 Web 应用程序。在开始 PHP 开发之前&#xff0c;首先需要搭建 PHP 运行环境。无论你使用的是 …...

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表 文章目录 数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表前言一、十字链表结构例子 复杂例子 二、邻接多重表&#xff08;Adjacency Multilist&#xff09;例子 前言 除了之前的邻接矩阵和邻接表 …...

eth-trunk 笔记

LACP&#xff1a;Link Aggregation Control protocol 链路聚合控制协议 将多条以太网物理链路捆绑在一起成为一条逻辑链路&#xff0c;从而实现增加链路带宽的目的。同时&#xff0c;这些捆绑在一起的链路通过相互间的动态备份&#xff0c;可以有效地提高链路的可靠性 一、配…...

通信工程学习:什么是接入网(AN)中的TF传送功能

接入网&#xff08;AN&#xff09;中的TF传送功能 在通信工程中&#xff0c;TF&#xff08;Transfer Function&#xff09;传送功能是指为接入网&#xff08;AN&#xff09;不同位置之间提供通道和传输介质&#xff0c;以实现数据的有效传输。以下是关于TF传送功能的详细解释&a…...

【JavaEE】IO基础知识及代码演示

目录 一、File 1.1 观察get系列特点差异 1.2 创建文件 1.3.1 delete()删除文件 1.3.2 deleteOnExit()删除文件 1.4 mkdir 与 mkdirs的区别 1.5 文件重命名 二、文件内容的读写----数据流 1.1 InputStream 1.1.1 使用 read() 读取文件 1.2 OutputStream 1.3 代码演示…...

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…...

[技术杂谈]暗影精灵8plus电竞版台式机安装和使用注意

最近买回二手台式机准备做深度学习训练模型使用。由于个人不是十分有钱&#xff0c;因此下血本入手一台&#xff0c;不然深度学习玩不转。配置&#xff1a;i9-12900K / 64G d4 3733频率 / 1TSSD2TB机械 / RTX3090 24G显卡 旗舰版 机箱45L超大机箱。买回来后整体不错&#…...

【加密算法基础——AES解密实践】

AES 解密实践 AES 解密是对使用 AES 加密算法加密的数据进行恢复的过程。 常用的解密方式有三种&#xff1a; 在线解密工具&#xff1a;格式比较好控制&#xff0c;但是有些在线工具兼容性不好&#xff0c;有时候无法解出&#xff0c;不知道是自己的密文密钥没找对&#xff0…...

Spring01

spring框架 spring是轻量级的容器框架 spring framework 1、Spring核心学习内容 IOC、AOp, jdbcTemplate,声明式事务 2、IOC:控制反转&#xff0c;孚以管理部8号对象 3.AOP:切面编程4.JDBCTemplate:是spring提供一套访问数据库的技术,应用性强&#xff0c;相对好理解5.声明式…...

gogps 利用广播星历解算卫星位置matlab函数satellite_orbits详细注解版

主要注释了广播星历计算GPS BDS卫星位置的。 function [satp, satv] satellite_orbits(t, Eph, sat, sbas)% SYNTAX: % [satp, satv] satellite_orbits(t, Eph, sat, sbas); % % INPUT: % t clock-corrected GPS time % Eph ephemeris matrix % sat satellite…...

Oracle按照某一字段值排序并显示,相同的显示序号

Oracle按照某一字段值排序并显示,相同的显示序号 最近的工作遇到对于相同的字段,按照序号去显示值,并对相同的值进行排序 实验了半天,感觉满意的答案,分享给大家 第一种: ROW_NUMBER 语法: ROW_NUMBER() OVER (ORDER BY your_column) AS sequence_number 说明: 根据your_column…...

【Java基础】String详解

文章目录 String一、String 概述1、基本特性2、不可变性3、String、StringBuilder、StringBuffer 二、字符串 创建与内存分配1、字面量 / 双引号2、new关键字3、StringBuilder.toString()4、intern() 方法5、小结 三、字符串 拼接1、常量常量2、变量 拼接3、final变量 拼接4、拼…...

cmd命令

常用命令 查看电脑名称&#xff1a; hostname 查看网卡信息&#xff1a; ipconfig 快速打开网络设置界面&#xff1a; control.exe netconnections 或 rundll32.exe shell32.dll,Control_RunDLL ncpa.cpld 打开防火墙设置&#xff1a; wf.msc 指定网卡设置IP地址&#…...

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】 《中文Python穿云箭量化平台》是纯Python开发的量化平台&#xff0c;因此其中很多Python模块&#xff0c;我们可以自己设计新的量化工具&#xff0c;例如自己新的行…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...