SQL进阶技巧:如何计算块熵?

news2024/11/17 10:47:32

目录

0 信息量定义

信息熵

1 块熵定义

2 问题描述

​3 数据准备

 4 问题分析

 5 小结

想要进一步了解SQL这门艺术语言的,可以订阅我的专栏数字化建设通关指南,将在该专栏进行详细解析。专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。

数字化建设通关指南

主要内容:(1)SQL进阶实战技巧

(2)数仓建模实战技巧和个人心得



0 信息量定义

信息量是指从N 个相等可能事件中选出一个事件所需要的信息度量或含量,也就是在辩识N 个事件中特定的一个事件的过程中所需要提问是或否的最少次数。

在一个系统中,等可能事件的数量越多,事件的发生概率也就越低,传递究竟是哪个事件发生所需的比特信号也就越多。

举个例子,假如有两个相互隔离的房间A、B,二者只能通过01信号传递信息。当A房间投掷了一个硬币时,我们至少需要使用

个比特信号告诉B房间是正面朝上还是反面朝上。类似地,当A房间投掷了一个有8个面的骰子时,我们至少需要


​个比特的信号来传递该信息。

假如系统中有的N个等可能事件,那么我们将log2^{_{}^{N}}称为信息量。由于等可能事件的发生概率为1/N,则信息量的公式可以写作


 推而广之,假设事件x 的发生概率为p (x) ,则传递该事件发生需要的最少比特信号位(即信息量)为

信息熵

信息熵用于衡量整个事件空间包含的平均信息量,即信息量的平均期望。将事件空间中所有事件发生的概率,乘以该事件的信息量,即可得到信息熵:

 

1 块熵定义

“块熵”(Block Entropy)通常用于描述信息理论中的一种概念,特别是在压缩和编码方面。它是指将数据流划分为连续的块,并对每个块计算熵的过程。

在块熵中,数据流被分割成固定大小(k kk)的块(或窗口),然后对每个块应用熵的计算方法。这有助于分析数据在不同块之间的变化或随时间的演变。一般的,当k kk取1 11时,块熵将退化为信息熵

2 问题描述

假设有以下数字序列作为数据流:

data_stream=[0,1,0,0,1,1,0,1,0,1]

计算这个时间序列的块熵,其中k = 2 。
将时间序列分成长度为2 22的历史块:
第一个历史块: [0, 1]
第二个历史块: [1, 0]
第三个历史块: [0, 0]
第四个历史块: [0, 1]
第五个历史块: [1, 1]
第六个历史块: [1, 0]
第七个历史块: [0, 1]
第八个历史块: [1, 0]
第九个历史块: [0, 1]
这些历史块的分布律为:

因此该序列的块熵为:

3 数据准备

create table block_entropy as
    (select stack(
                    10,
                    0,
                    1,
                    0,
                    0,
                    1,
                    1,
                    0,
                    1,
                    0,
                    1
            ) as(block)
     );

 4 问题分析

第一步:计算k2 block

select id
                        , collect_list(block) over (order by id rows between current row and 1 following) k2
                   from block_entropy

 第二步:计算k2块个数及块的总个数

select k2,
              max(ttl_cnt) ttl_cnt,
              count(1)     k2_cnt
       from (select id,
                    k2,
                    count(1) over () ttl_cnt
             from (select id
                        , collect_list(block) over (order by id rows between current row and 1 following) k2
                   from block_entropy) t
             where size(k2) = 2) t
       group by k2

 

第三步:按照信息量公式计算

select k2,
        -(k2_cnt / ttl_cnt) * log2(k2_cnt / ttl_cnt) log2
 from (select k2,
              max(ttl_cnt) ttl_cnt,
              count(1)     k2_cnt
       from (select id,
                    k2,
                    count(1) over () ttl_cnt
             from (select id
                        , collect_list(block) over (order by id rows between current row and 1 following) k2
                   from block_entropy) t
             where size(k2) = 2) t
       group by k2) t

第四步:对所有的信息量进行求和,计算最终的结果值即熵值。

快熵完整的计算SQL如下:

select cast(sum(log2) as decimal(18, 5)) block_entropy
from (select k2,
             -(k2_cnt / ttl_cnt) * log2(k2_cnt / ttl_cnt) log2
      from (select k2,
                   max(ttl_cnt) ttl_cnt,
                   count(1)     k2_cnt
            from (select id,
                         k2,
                         count(1) over () ttl_cnt
                  from (select id
                             , collect_list(block) over (order by id rows between current row and 1 following) k2
                        from block_entropy) t
                  where size(k2) = 2) t
            group by k2) t) t
;

 5 小结

在实际应用中,块熵可用于识别数据中的模式、周期性或其他结构,并有助于设计有效的压缩算法或数据处理方法。例如,在音频处理中,可以将音频信号划分为连续的时间窗口,并对每个窗口的信号进行熵计算,以了解音频信号的频谱特性或声音事件的分布。在网络数据传输中,块熵可以用于检测数据流中的重复模式或压缩数据以减少带宽消耗。

想要进一步了解SQL这门艺术语言的,可以订阅我的专栏数字化建设通关指南,将在该专栏进行详细解析。
专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。


数字化建设通关指南


主要内容:
(1)SQL进阶实战技巧

可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得

       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

240927-各种卷积最清晰易懂blender动画展示

240927-一些常用卷积清晰易懂的blender动画展示(Conv、GConv、DWConv、1*1Conv、Shuffle) 在几个月前,写过一篇关于卷积过程中输入图像维度变化的博客240627_关于CNN中图像维度变化问题_图像的尺寸为什么又四个维度-CSDN博客,但是…

新手教学系列——在MySQL分表中批量调整表结构的实践与优化

在当今的互联网业务中,随着数据量的不断增长,单个数据库的处理能力往往难以满足高并发、高性能的要求。因此,分库分表已经成为解决数据库扩展性问题的主流方案之一。然而,分表虽然能有效提升数据库的读写性能,但也带来了一个新的挑战:当业务需求变化时,需要对大量分表进…

【DAY20240927】经典深度学习模型对比:LeNet5、CNN、ResNet20、AlexNet、TextCNN 与 VGG-11

文章目录 前言一、LeNet5二、CNN三、AlexNet四、ResNet20五、TextCNN六、VGG-11 前言 We leverage 6 models to deal with the data, i.e., LeNet5 (LeNet) (LeCun et al. 1989), a synthetic CNN network (CNN), ResNet20 (ResNet) (He et al.2016), AlexNet (Krizhevsky, Su…

矿山、石场重型机械设备数据集-挖掘机-自卸卡车-轮式装载机

描述 本项目旨在创建一个高效的计算机或机器视觉模型,用于在建筑工地检测不同种类的施工设备,我们从三个类别开始:挖掘机、卡车和轮式装载机。 数据集的理学硕士提供。 原始图像(v1)包含: 1,532个标注…

Git的安装 + 基本操作

一、Git初识 1. 提出问题 ​ 不知道你在工作或学习中,有没有遇到这样的情况:我们在创建并编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个一个的副本,保…

中东电商:下一个蓝海,Google Cloud和Google Maps助力企业乘风破浪

随着“一带一路”倡议的深入推进,中东地区已成为全球瞩目的新兴市场。庞大的年轻消费群体、丰富的石油资源以及不断完善的数字基础设施,为中国企业提供了前所未有的发展机遇。中东电商市场,无疑是下一个蓝海! 中东电商市场&#x…

学日语必备神器!这4款翻译APP你用过吗?

小伙伴们,你们有没有在日常生活或工作中遇到过需要翻译日语的场景呢?无论是阅读日本原著、工作文档还是和日本小伙伴交流,一个好的翻译工具绝对能成为你的贴心小助手;今天,我就来跟大家分享几款我个人非常喜欢的日语翻…

开放原子超级链内核XuperCore可搭建区块链

区块链是一种分布式数据库技术,它以块的形式存储数据,并使用密码学方法保证数据的安全性和完整性。 每个块包含一定数量的交易信息,并通过加密链接到前一个块,形成一个不断增长的链条。 这种设计使得数据在网络中无法被篡改,因为任何尝试修改一个块的数据都会破坏整个链的…

鼎阳加油-IOC关键技术问题的解决记

鼎阳SDS6204示波器EPICS IOC的搭建-CSDN博客 这款示波器在labview下工作的很好,以前搭建逐束团3D系统时连续几个月不间断的工作连接从没断过线,并做过速率测试,单通道时10Hz的波形更新速率都可以达到: 鼎阳SDS6204示波器波形读取…

hive分区详细教程

为什么要分区? 为了提高sql的查询效率 比如: select * from orders where create_date20230826; 假如数据量比较大,这个sql就是全表扫描,速度肯定慢。 可以将数据按照天进行分区,一个分区就是一个文件夹,当…

C++之STL—常用算术生成算法

#include <numeric> accumulate(iterator beg, iterator end, value); // 计算容器元素累计总和 // beg 开始迭代器 // end 结束迭代器 // value 起始值 fill (iterator beg, iterator end, value); // 向容器中填充元素 // beg 开始迭代器 // end 结束迭代器 // val…

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言 随着生成式 AI 的快速发展&#xff0c;基于 AI 开发框架构建 AI 应用的诉求迅速增长&#xff0c;涌现出了包括 LangChain、LlamaIndex 等开发框架&#xff0c;但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言&a…

32. Java栈和队列

1. 前言 栈和队列相关的题目是校招中出现频率一般,但是是属于相对基础的题型。我们要关注两类问题,栈和队列的添加和删除操作,以及栈和队列之间的区别和联系。 2. 栈和队列 2.1 数据结构 首先我们给出栈和队列的数据结构定义: (1)栈(Stack):允许在某一端插入元素(…

【PyTorch入门】编程杂谈·1(文件、字典结构、字符串统计、结果保存)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;PyTorch入门宝典_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…

创作一个JavaScript案例,提示工程师请了解一下。

预期 提问1&#xff1a; web开发im的聊天记录展示的实现思路和代码实战。用户数据结构{nickName&#xff0c;uerID&#xff0c;msg,picture}。当nickName"主人"的时候聊天内容底色绿色&#xff0c;主人的聊天记录是靠左显示&#xff0c;其他人靠右显示。数据内容有长…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中&#xff0c;经常需要为 3D 对象添加可交互的标签&#xff0c;以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示&#xff0c;如何在 Three.js 中为对象创建可点击的标签&#xff0c;点击标签可以展开详细信息&#xff0c;再次点击可以关…

JAVA集成工作流实际项目操作参考,springboot,vue,activiti,在线流程绘制,会签,退回,网关,低代码,

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻&#xff01;&#xff01;&#xff01; 结构体类型的声明 咱们在讲操作符那个章节中&#xff0c;对于结构体类型的声明进行了讲解&#xff0c;咱们先来回忆一下&#xff0c;为后面的讲解作准备…