冰山立方体计算

在很多情况下,数据立方体的空间大多被低度量值的数据单元所占据,而这些数据单元往往是分析者很少关心的内容。冰山立方体的计算能够减少物化数据单元所占有的存储空间。
常用计算方法:
BUC:Bottom-Up Computation
Star-Cubing
MMCubing,C-Cubing等

下面,我将就BUC算法的原理及实现做具体介绍:

BUC主要思想:

buc是一种从顶点立方体逐步向下到基本立方体的计算方法,用于计算稀疏冰山立方体。首先计算整个数据立方体的度量值,然后沿着每个维度进行划分,同时检查冰山条件,对不满足条件的分枝进行剪枝操作,对满足的在下一个维度讲行递归搜索。

BUC计算流程:

  1. 首先,扫描整个输入,计算整个度量(如总计数);
  2. 针对方体的每一维进行划分 ;
  3. 针对每一个划分,对它进行聚集,为该划分创建一个元组并得到该元组的计数。判断其分组计数是否满足最小支持度;
  4. 如果满足,输出该划分的聚集元组,并在该划分上对下一维进行递归调用,否则进行剪枝操作。

BUC算法特点及缺陷:

  1. BUC算法中采用了分治策略,优点在于能够分担划分开销,减少不必要的计算消耗。
  2. BUC的性能容易受到维的次序以及不平衡数据的影响,应当以维基数的递减顺序进行划分。
  3. BUC不像多路数组聚集(MultiWay),不能利用父子关系共享聚集计算。

BUC的算法实现:

首先我引入自定义数据集,BUC-test2.csv:
a1 b1 c1 d1
a1 b1 c2 d2
a1 b1 c2 d2
a2 b1 c1 d2
a2 b2 c2 d2
a3 b3 c1 d1
a4 b4 c1 d1

import pandas as pddataList = pd.read_csv('BUC-test2.csv') #读取数据集
print(dataList)
print("维数:",dataList.columns.size) #统计数据的维数
lenN = dataList.columns.size
NumFall = [0] * lenN  # [0, 0, 0, 0]
ValueFAll = [] # [[a1,a2....],[b1,b2...]],定义一个列表value0fall用来统计并存储各维不重复的叶结点。
for j in range(lenN):ValueSingle = []  # 单个维度的取值for i in range(len(dataList)):if dataList.iloc[i, j] not in ValueSingle: #通过行号选取数据判断在不在列表ValueFall中ValueSingle.append(dataList.iloc[i, j])ValueFAll.append(ValueSingle)NumFall[j] = len(ValueSingle)
# 逐列逐行进行遍历,将每一列出现的非重复元素,加入到ValueSingle中,并统计个数,放到NumFall中print("ValueFAll:",ValueFAll)
print("NumFall:",NumFall)
print("BUC:")# 计算(temp)list出现次数:
def count(list, data):number = 0for i in range(len(data)):isIn = Truefor j in range(len(list)):if list[j] not in data.iloc[i].tolist():  # 将series对象转list才能not inisIn = Falsebreakif isIn:number = number + 1return numberdef BUC(tempList, n, curN, min_sup=3):  # curN代表当前维度游标,最小支持度设为3if curN == n:return  # 退出递归for i in range(NumFall[curN]):tempList.append(ValueFAll[curN][i])if count(tempList, dataList) >= min_sup:print("%s  :%d" % (str(tempList), count(tempList, dataList)))BUC(tempList, n, curN + 1)  # 加一维度递归调用tempList.pop()BUC(tempList, n, curN + 1)BUC([], 4, 0)

程序的输出为:

维数: 4
ValueFAll: [['a1', 'a2', 'a3', 'a4'], ['b1', 'b2', 'b3', 'b4'], ['c1', 'c2'], ['d1', 'd2']]
NumFall: [4, 4, 2, 2]
BUC:
['a1']  :3
['a1', 'b1']  :3
['b1']  :4
['b1', 'd2']  :3
['c1']  :4
['c1', 'd1']  :3
['c2']  :3
['c2', 'd2']  :3
['d1']  :3
['d2']  :4

总结:

BUC算法首先将拿到的数据进行维的划分,再对每个维进行属性的划分。例如,本实例首先将数据划分为A、B、C、D四个维度,而每个维度的划分依次为:[[‘a1’, ‘a2’, ‘a3’, ‘a4’], [‘b1’, ‘b2’, ‘b3’, ‘b4’], [‘c1’, ‘c2’], [‘d1’, ‘d2’]]。BUC算法的特点是用到了函数的递归调用,将每一个根节点的所有符合冰山条件(满足最小阈值)的子树输出,将不符合条件的子树进行剪枝操作。

数据挖掘BUC算法计算冰山立方体的python实现相关推荐

  1. 数据挖掘BUC计算冰山立方体及Python实现

    因课程实验所需,对BUC算法进行了Python实现,过程多有坎坷,在此一记,以助后人. 一.关于BUC及冰山立方体的介绍 可参照如下链接: [数据挖掘概念与技术]学习笔记5-数据立方体技术 - CSD ...

  2. 数据挖掘BUC算法实现

    算法描述: 根据给定的数据集,递归计算从0维到最大维的元组出现次数,若大于等于min_sup,则加入结果,若小于min_sup,则剪枝. 举个例子: 数据集如下: a1,b1 a1,b2 a2,b1 ...

  3. 【数据挖掘笔记五】数据立方体技术

    5.数据立方体技术 数据仓库系统在各种粒度上为多维数据的交互分析提供OLAP工具,OLAP工具使用数据立方体和多维数据模型对汇总数据提供灵活的访问,因此重点要关注数据立方体的技术.数据立方体技术包括数 ...

  4. buc算法java实现,数据挖掘概念与技术(hanjiawei)阅读笔记--第五章(数据立方体技术)...

    BUC 1.BUC(Botom-Up Construction)概念 从顶点方体向下计算冰山立方体 计算稀疏冰山立方体的算法 基于先验性质进行剪枝 ### 2.算法计算 例A(a1,a2,a3),B( ...

  5. BUC算法及其Python实现

    数据分析有时候需要对多个维度上的数据进行聚集操作,完全立方体的聚集操作的复杂度是 2n2^n2n,过于复杂,而且有一些维度由于数据过小我们不需要去关心,因此需要对这种聚集操作进行剪枝,取其中符合的部分 ...

  6. 浅析部分物化以及冰山立方体的计算方法Star-Cubing

    冰山立方体是部分物化的方体. 这里我们先了解部分物化的概念:有选择地计算整个可能的方体集中一个适当的子集.我们可以计算数据立方体的一个子集,它只包含满足用户指定的某种条件(如每个单元的元组计数大于某个 ...

  7. 使用python用递归的方法实现冰山立方体BUC算法(以水果分类数据为例)

    冰山立方体BUC算法是一种计算稀疏立方体的构建算法,在构建数据立方体的过程中,如果构建完整的数据仓库可能会花费大量的计算.存储和时间成本. 不过因为在应用过程中大部分的数据都是稀疏的,我们就可以通过冰 ...

  8. 数据挖掘冰山立方体构建算法:BUC及实现

    1.冰山立方体知识: waiting... 2.代码实现: 实现思路:全程模拟,写的时候理解还不够透彻,第一轮算出频率大于min_sup的集合,然后根据此集合开始不断向下扩展,筛选所有大于min_su ...

  9. BUC算法简介与python实现

    冰山立方体这里听的不是很明白,BUC算法也是有点懵,借着实验也整理一下思路吧. 一.冰山立方体与BUC算法简介 1. 冰山立方体 2. BUC算法 算法简介 算法流程 举例 二.代码实现 1. 输入数 ...

最新文章

  1. 斯坦福CS330 2019秋季课程视频全新上线,专注多任务与元学习
  2. 大道至简第一章观后感(伪代码)
  3. 数据清洗最基础的10个问题,基本涵盖目前常见的数分场景!
  4. 力扣--让字符串成为回文串的最少插入次数
  5. 基于jsp的教师科研工作量_javaweb教师工作量管理系统
  6. C#LeetCode刷题之#704-二分查找(Binary Search)
  7. 【华为云技术分享】干货分享丨jvm系列:dump文件深度分析
  8. CCF NOI1050 矩阵乘法
  9. python制作查询工具发给别人使用_Python 制作查询商品历史价格的小工具
  10. 数据分析:穿越致富的正确姿势
  11. 沟通在日常管理工作中的重要性
  12. 软件测试设计之——场景设计法,判定表法
  13. 解决无线网络不稳定的两个方案几个方法
  14. MATLAB冒号用法
  15. python经济学_用python学习中级微观经济学【WARP篇】
  16. python非可选参数_带plac的可选参数的默认值和非默认值 - python
  17. 简述对linux系统的认识,对Linux的初步认识
  18. python网络编程 赵宏_2018年Python爱好者社区历史文章合集(作者篇)
  19. 数据库与文件的数据存储的区别
  20. 导纳矩阵 matlab,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程

热门文章

  1. 中国交通物流行业规模预测及未来发展趋势分析报告2021-2027年
  2. php curl 小偷,问问小偷无验证码文件(需要空间支持php-curl模块)
  3. 李弘毅老师GAN笔记(一),对抗生成网络(GAN)简单介绍
  4. 华为推谷歌系统智能手机火拼微软三星
  5. 普林斯顿算法-Percolation(渗透问题)
  6. 工作电子邮箱怎么注册,电子邮箱格式怎么写?
  7. 十种获取被动收入的方法
  8. box-sizing:border-box的作用
  9. 呼伦贝尔~根河~鄂温克族
  10. 美法官:甲骨文与谷歌专利诉讼无法和解