冰山立方体这里听的不是很明白,BUC算法也是有点懵,借着实验也整理一下思路吧。

一、冰山立方体与BUC算法简介

1. 冰山立方体

2. BUC算法

  • 算法简介
  • 算法流程

  • 举例

二、代码实现

1. 输入数据 input.csv

给冰山立方体设定了a, b, c, d四个维度,其取值分别有

a: a1, a2

b: b1, b2, b3, b4

c: c1, c2

d: d1, d2

并取最小支持度

随机选择测试数据如下:

a1   b1  c1
a1  b1  c1
a1  b1  c2
a1  b1  c2
a2  b1  c2
a2  b2  c1
a2  b3  c2
a2  b3  c2
a2  b4  c1

2. python代码

import numpy as np# 读入数据
file = open(r"input.csv", 'r', encoding='utf-8')
data = []
for line in file:line = line.replace("\n", "")data.append(line.split(","))
file.close()
print(data)numDims = len(data[0]) # 维的总数
cardinality = [] # cardinality[i]存放第i维的取值个数
min_sup = 3 # 最小支持度为3
outputRec = [] # 当前输出记录
dataCount = [] # 存放每个值的出现次数
result = {}for i in range(numDims):cardinality.append(0)tmp = {}dataCount.append(tmp)
# 计算每个值在data中出现的次数,储存在dataCount中
for i in range(len(data)):for j in range(numDims):#print(data[i][j])if data[i][j] not in list(dataCount[j].keys()):cardinality[j] = cardinality[j] + 1 # 如果该值没有出现过,则该维度上的取值数目加一dataCount[j][data[i][j]] = 1 # 如果该值没有出现过,把该值出现的次数初始化为一else:dataCount[j][data[i][j]] = dataCount[j][data[i][j]] + 1 # 如果该值之前出现过,则该值出现的次数加一print("cardinality:", cardinality)
print("dataCount:", dataCount)# 计算某个项集组合出现的次数,target是一个列表,比如想要计算['a1','b2']出现过多少次,则写成countPairs(['a1','b2'])
def countPairs(input, target):count = 0for record in input:flag = Truefor x in target:if x not in record:flag = Falseif flag:count = count + 1return count# 递归计算
# input是子列表
# dim是当前计算的维度(从dim计算到last dim)
def BUC(input, dim):if dim>=numDims:return# 得到子记录,从dim->lastDimsub_input = []for record in input:tmp = []for i in range(dim,numDims):tmp.append(record[i])sub_input.append(tmp)for line in sub_input:#print(line)xx = []print(len(line))xx.append(line[0])if countPairs(sub_input, xx) < min_sup: # 先判断当前值是否满足min_sup,若不满足,剪枝continueelse:result[tuple(xx)] = countPairs(sub_input, xx) # 将单项加入到result中#if dim>=1:for i in range(1,numDims-dim): # 若当前维值满足min_sup,则从dim+1->numDims依次计算count值xy = []#print(x)xy.append(line[0])#print("i:",i)xy.append(line[i])if xy not in list(result.keys()) and countPairs(sub_input, xy)>=min_sup: # 如果未在结果中但是count>=min_sup,那么把它加到结果中result[tuple(xy)] = countPairs(sub_input, xy)print(result)BUC(input,dim+1)BUC(data, 0)
print("result:", result)

3. 输出结果 result

理想输出应该是递归地输出满足最小支持度的冰山立方体单元

本次输出的结果为

result: {('a1',): 3, ('a1', 'b1'): 3, ('a2',): 5, ('a2', 'c2'): 3, ('b1',): 4, ('b1', 'c2'): 3, ('c1',): 3, ('c2',): 5}

参考内容

1. 夹心学长的博客 https://blog.csdn.net/yanjiaxin1996/article/details/80140489

2. https://blog.csdn.net/mamianskyma/article/details/15494471

BUC算法简介与python实现相关推荐

  1. 各项异性扩散(Anisotropic diffusion)--算法简介(python)代码实现

    各项异性扩散(Anisotropic diffusion)–算法简介(python)代码实现 学习博文 https://blog.csdn.net/qq_38784098/article/detail ...

  2. nmf算法 python_NMF算法简介及python实现

    [ pca算法用于原始数据维数较高时对数据进行降维 关于pca算法的学习,有一篇分析特别详细的论文http://www.cs.otago.ac.nz/cosc453/student_tutorials ...

  3. 蒙特卡洛算法简介及其python实现

    本篇简要介绍一下蒙特卡洛算法的思想以及通过两个实例简要介绍一下蒙特卡洛算法的python实现. 一.蒙特卡洛算法 1.蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世 ...

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

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

  5. 数据挖掘BUC算法计算冰山立方体的python实现

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

  6. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  7. 数据结构与算法:算法简介

    数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...

  8. Apriori算法介绍(Python实现)

    导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...

  9. DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略

    DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介.代码实现.代码调参之详细攻略 目录 GD算法的简介 GD/SGD算法的代码实现 1.Matlab编程实现 GD算法的改进算法 GD算法中 ...

最新文章

  1. Ubuntu 12.04安装firefox 26中的flash plugin方法
  2. android ndk常见的问题及解决的方法
  3. 常见的物联网通信协议
  4. weex css单位,Weex系列(7) ——踩坑填坑的总总
  5. k8s operator开发脚手架kubebuilder 3.2.0安装脚本整理
  6. 多轮对话之对话管理:Dialog Management
  7. 在最美好的年华里,不要辜负最美的自己
  8. 【转载】架构师需要了解的Paxos原理、历程及实战
  9. 洪磊父亲避谈洪磊获释 拘留已过24小时留滞期
  10. 封装连接mysql数据库_封装连接mysql数据库
  11. sublime与python交互
  12. 并发编程之——写锁源码分析
  13. [C++]动态规划系列之币值最大化
  14. rs485如何使用_气体检测仪rs485和4-20ma接线方式有什么区别,该如何选择最优的接线方式...
  15. 台式计算机的显卡,2019显卡天梯图 台式机显卡GPU桌面显卡排名
  16. 展锋芒,一遇风云便化龙
  17. 移动APP开发框架盘点
  18. Minecraft Java版1.11_Editing Java版1.11-pre1
  19. java给图片加水印
  20. 神舟笔记本WLAN打不开的解决方法

热门文章

  1. jmeter非GUI模式如何压测并生成测试报告
  2. SNA中心论的相关概念
  3. php获取下周时间,从PHP获取下周的日期
  4. 第 12 代智能英特尔酷睿移动式处理器
  5. GPU加速的QT5.6.0交叉编译到4412
  6. 测试打呼噜的软件,打呼噜人群福音!这款app能检测鼾声并提供一站式止鼾方案...
  7. 信息安全专家李钊博士:信息物理系统安全措施
  8. 互联网之父访华 称将把互联网送到整个太阳系
  9. ad5764的回读,硬件spi接口
  10. 政策“风云突变”!新东方市值蒸发超近2000亿!俞敏洪何去何从?