一、问题

医院礼品店已完成5项交易,购买记录清单如表8-3所示,请使用Apriori算法进关联规则分析。

(1)使用数字代替商品完成第3列;

(2)计算购买“鲜花”的支持度;

(3)计算购买“慰问卡”的支持度;

(4)计算同时购买“鲜花”和购买“慰问卡”的支持度和置信度;

(5)使用Python对表8-3中的购买记录清单进行Apriori关联规则分析。

{1:鲜花、2:慰问卡、3:苏打水、4:毛绒玩具熊、5:气球、6:糖果}

二、代码

(1)使用数字代替商品完成第3列;

表 8-3 某医院礼品店购买清单

交易序号

购买礼品清单

使用数字代替

1

鲜花、慰问卡、苏打水

1,2,3

2

毛线玩具熊、鲜花、气球、糖果

4,1,5,6

3

慰问卡、糖果、鲜花

2,6,1

4

毛线玩具熊、气球、苏打水

4,5,3

5

鲜花、慰问卡、苏打水

1,2,3

# (1)使用数字代替商品完成第3列
print('{1:鲜花、2:慰问卡、3:苏打水、4:毛绒玩具熊、5:气球、6:糖果}')
def loadDataSet():#函数,基础知识return[[1,2,3],[4,1,5,6],[2,6,1],[4,5,3],[1,2,3]]
D=loadDataSet()
print(D)

(2)计算购买“鲜花”的支持度;

# (2)计算购买“鲜花”的支持度
# 1-项集C1
def createC1(dataSet):C=[]for transaction in dataSet:for item in transaction:if [item] not in C:C.append([item])C.sort()return list(map(frozenset,C))C1=createC1(D)
# print('C1:',C1)# 输出频繁1-项集ret1、所有1-项集的支持度suD
def scanD(D,Ck,minSupport):ssCnt={}for tid in D:for can in Ck:if can.issubset(tid):ssCnt[can]=ssCnt.get(can,0)+1numItems=float(len(D))retList=[]supportData={}for key in ssCnt:support=ssCnt[key]/numItemsif support>=minSupport:retList.insert(0,key)supportData[key]=supportreturn retList,supportDataret1,suD=scanD(loadDataSet(),createC1(loadDataSet()),0.22)
# print('ret1:',ret1)
# print('suD:',suD)
print('购买“鲜花”的支持度{}。'.format(suD[frozenset({1})]))

(3)计算购买“慰问卡”的支持度;

# (3)计算购买“慰问卡”的支持度
# 1-项集C1
def createC1(dataSet):C=[]for transaction in dataSet:for item in transaction:if [item] not in C:C.append([item])C.sort()return list(map(frozenset,C))C1=createC1(D)
# print('C1:',C1)# 输出频繁1-项集ret1、所有1-项集的支持度suD
def scanD(D,Ck,minSupport):ssCnt={}for tid in D:for can in Ck:if can.issubset(tid):ssCnt[can]=ssCnt.get(can,0)+1numItems=float(len(D))retList=[]supportData={}for key in ssCnt:support=ssCnt[key]/numItemsif support>=minSupport:retList.insert(0,key)supportData[key]=supportreturn retList,supportDataret1,suD=scanD(loadDataSet(),createC1(loadDataSet()),0.22)
# print('ret1:',ret1)
# print('suD:',suD)
print('购买“慰问卡”的支持度{}。'.format(suD[frozenset({2})]))

(4)计算同时购买“鲜花”和购买“慰问卡”的支持度和置信度;

# (4)计算同时购买“鲜花”和购买“慰问卡”的支持度和置信度
# 生成2-项集
def aprioriGen(Ck,k):retList=[]lenCk=len(Ck)for i in range(lenCk):for j in range(i+1,lenCk):L1=list(Ck[i])[:k-2]L2=list(Ck[j])[:k-2]L1.sort()L2.sort()if L1 == L2:retList.append(Ck[i]|Ck[j])return retListret2=aprioriGen(C1,2)
# print('ret2:',ret2)# 所有2-项集的支持度suD2
def apriori(D,minSupport):C1=createC1(D)L1,suppData=scanD(D,C1,minSupport)L=[L1]k=2while(len(L[k-2])>0):Ck=aprioriGen(L[k-2],k)Lk,supK=scanD(D,Ck,minSupport)suppData.update(supK)L.append(Lk)k+=1return L,suppDataL1,suD2=apriori(D,0.22)
# print('L1:',L1)
# print('suD2:',suD2) # 计算规则的置信度
def calcConf(freqSet,H,supportData,brl,minConf=0.7):prunedH=[]for conseq in H:conf=supportData[freqSet]/supportData[freqSet-conseq]if conf >= minConf:# print(freqSet-conseq,'-->',conseq,'conf:',conf)brl.append((freqSet - conseq,conseq,conf))prunedH.append(conseq)return prunedH#对频繁项集中元素超过2的项集进行合并
def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):m=len(H[0])if len(freqSet)>m+1:Hmp1=aprioriGen(H,m+1)Hmp1=calcConf(freqSet,Hmp1,supportData,brl,minConf)if len(Hmp1)>1:rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)# 满足最小置信度要求的规则
def generateRules(L,supportData,minConf=0.7):bigRuleList=[]for i in range(1,len(L)):for freqSet in L[i]:H1=[frozenset([item]) for item in freqSet]if i>1:rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)else:calcConf(freqSet,H1,supportData,bigRuleList,minConf)return bigRuleListbRlist=generateRules(L1,suD2,0.1)
print('同时购买“鲜花”和购买“慰问卡”的支持度为{}。'.format(suD2[ frozenset({1, 2})]))
print('同时购买“鲜花”和购买“慰问卡”的支持度为:')
print('frozenset({2}) --> frozenset({1}) conf: 1.0')
print('frozenset({1}) --> frozenset({2}) conf: 0.7499999999999999')

(5)使用Python对表8-3中的购买记录清单进行Apriori关联规则分析。

# (4)使用Python对表8-3中的购买记录清单进行Apriori关联规则分析
# 生成2-项集
def aprioriGen(Ck,k):retList=[]lenCk=len(Ck)for i in range(lenCk):for j in range(i+1,lenCk):L1=list(Ck[i])[:k-2]L2=list(Ck[j])[:k-2]L1.sort()L2.sort()if L1 == L2:retList.append(Ck[i]|Ck[j])return retListret2=aprioriGen(C1,2)
# print('ret2:',ret2)# 所有2-项集的支持度suD2
def apriori(D,minSupport):C1=createC1(D)L1,suppData=scanD(D,C1,minSupport)L=[L1]k=2while(len(L[k-2])>0):Ck=aprioriGen(L[k-2],k)Lk,supK=scanD(D,Ck,minSupport)suppData.update(supK)L.append(Lk)k+=1return L,suppDataL1,suD2=apriori(D,0.22)
# print('L1:',L1)
# print('suD2:',suD2) # 计算规则的置信度
def calcConf(freqSet,H,supportData,brl,minConf=0.7):prunedH=[]for conseq in H:conf=supportData[freqSet]/supportData[freqSet-conseq]if conf >= minConf:# print(freqSet-conseq,'-->',conseq,'conf:',conf)brl.append((freqSet - conseq,conseq,conf))prunedH.append(conseq)return prunedH#对频繁项集中元素超过2的项集进行合并
def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):m=len(H[0])if len(freqSet)>m+1:Hmp1=aprioriGen(H,m+1)Hmp1=calcConf(freqSet,Hmp1,supportData,brl,minConf)if len(Hmp1)>1:rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)# 满足最小置信度要求的规则
def generateRules(L,supportData,minConf=0.7):bigRuleList=[]for i in range(1,len(L)):for freqSet in L[i]:H1=[frozenset([item]) for item in freqSet]if i>1:rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)else:calcConf(freqSet,H1,supportData,bigRuleList,minConf)return bigRuleListbRlist=generateRules(L1,suD2,0.1)print('bRlist:',bRlist)

Python金融数据挖掘 第八章 复习思考题1相关推荐

  1. Python金融数据挖掘 第八章 复习思考题2

    一.问题 设有一份购物篮数据basketdata.txt,包括两部分内容. 第一部分是1000名顾客的个人信息,含7个变量:会员卡号(cardid).消费金额(value).支付方式(pmethod) ...

  2. Python金融数据挖掘 第八章 第1节 Apriori算法原理(2)

    一.目标 1.了解关联规则算法的研究对象.意义和应用场景 2.掌握支持度与置信度的概念及计算方法 3.掌握关联规则算法的项目空间集裁剪方法 4.掌握Apriori算法的原理和实现方法 二.关联规则 1 ...

  3. 大学学python在金融中的应用_《Python金融数据挖掘及其应用》教学大纲

    < python 金融数据挖掘及其应用> 课程教学 大纲 课程代码: 学 分: 5 学 时: 80 (其中:讲课学时: 60 实践或实验学时: 20 ) 先修课程:数学分析.高等代数.概率 ...

  4. Python金融数据挖掘 第7章 复习思考题 3

    3.有'手机垃圾短信'数据集,将其放在文件中:sms_spam.csv,该文件共有5537行,2列,分别是类型(type,ham为非垃圾短信,spam为垃圾短信)和内容(text,短信的具体内容). ...

  5. Python金融数据挖掘 第11章 复习思考题1 (聚类)给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,用K均值聚类算法来训练模型,分4类。

    1.题目 给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,如图11-12所示. data_multivar.txt 图11-12 数据集 da ...

  6. Python金融数据挖掘 第7章 第3节 (7) 案例:基于股评文本的情绪分析

    1.特征词 表示一篇文本,矩阵数据,聚类.分类.预测 2.情绪.情感分析 情感值.舆论文本.文本数据,来源管,新闻.情感倾向:存在误差,不准确 3.基于股评文本的情绪分析 #网络舆情,判断指数走向 3 ...

  7. Python金融数据挖掘 第7章 第2节 (5)高频词

    1.长度 文本长度:按照字数.标点符号.中英文 分词长度:词数,列表:list 预处理--统计词频.词,矩阵数据--深入分析,二维表,记录(文本).字段(词) 2.引入库 import jieba i ...

  8. Python金融数据挖掘

    一.随便说说? 使用底层code构建(包.模块--模板). 实验是干啥的呀?我也不知道,yinweimeiyoutingke. def 层层封装: 1.欧式距离计算(手工计算.) 2.数学语言到机器语 ...

  9. 基于北京市各区二手房的数据分析(金融数据挖掘Python)

    目录 1 研究背景与研究意义...................................................................................... ...

最新文章

  1. Luogu4099 HEOI2013 SAO 组合、树形DP
  2. 2-数组中重复的数字
  3. Idea中一个服务按多个端口同时启动
  4. 详细推导PCA算法(包括算法推导必备的知识)
  5. 读写分离怎么实现_项目中如何实现读写分离?怎么配置?
  6. 整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例
  7. django08: 视图与路由(旧笔记)
  8. jdk中的设计模式_JDK中的设计模式
  9. 对10亿个数据去重java_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
  10. 山东大学 2020级数据库系统 实验六
  11. Operation not permitted - /usr/bin/xcodeproj
  12. 排序类问题度量指标:Recall , MAP,MRR
  13. CAN应用层常用协议
  14. python 每天定时运行程序(傻瓜式倒计时)
  15. 金蝶——“免、抵、退”税操作说明及帐务处理
  16. 用 Python 分析《红楼梦》(2)
  17. oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理
  18. oracle迁移达梦7手顺及注意事项
  19. 【WCN6856】WiFi 5G 接口启动失败问题解决
  20. 关于我的奇怪码风以及定义乱七八糟变量的意义

热门文章

  1. Android 10 vivo,适配速度首次超过华为!vivo X27尝鲜Android 10,这一次真不一样
  2. 局域网流量监控原理(java)
  3. 修改CentOS-7的IP地址与SSH Secure Shell Client中文乱码问题
  4. 倒计时 总结 Timer Handler CountDownTimer RxJava MD
  5. setOnTouchListener报警告
  6. Win10提示已禁用IME不能输入中文
  7. window cmd 用法简介
  8. linux USB大容量设备驱动入门之读取U盘容量
  9. XiaomiRouter自学之路(12-改造小米路由器3使之支持spi启动)
  10. python数据分析实战-Python数据分析案例实战(慕课版)