Python金融数据挖掘 第八章 复习思考题1
一、问题
医院礼品店已完成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相关推荐
- Python金融数据挖掘 第八章 复习思考题2
一.问题 设有一份购物篮数据basketdata.txt,包括两部分内容. 第一部分是1000名顾客的个人信息,含7个变量:会员卡号(cardid).消费金额(value).支付方式(pmethod) ...
- Python金融数据挖掘 第八章 第1节 Apriori算法原理(2)
一.目标 1.了解关联规则算法的研究对象.意义和应用场景 2.掌握支持度与置信度的概念及计算方法 3.掌握关联规则算法的项目空间集裁剪方法 4.掌握Apriori算法的原理和实现方法 二.关联规则 1 ...
- 大学学python在金融中的应用_《Python金融数据挖掘及其应用》教学大纲
< python 金融数据挖掘及其应用> 课程教学 大纲 课程代码: 学 分: 5 学 时: 80 (其中:讲课学时: 60 实践或实验学时: 20 ) 先修课程:数学分析.高等代数.概率 ...
- Python金融数据挖掘 第7章 复习思考题 3
3.有'手机垃圾短信'数据集,将其放在文件中:sms_spam.csv,该文件共有5537行,2列,分别是类型(type,ham为非垃圾短信,spam为垃圾短信)和内容(text,短信的具体内容). ...
- Python金融数据挖掘 第11章 复习思考题1 (聚类)给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,用K均值聚类算法来训练模型,分4类。
1.题目 给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,如图11-12所示. data_multivar.txt 图11-12 数据集 da ...
- Python金融数据挖掘 第7章 第3节 (7) 案例:基于股评文本的情绪分析
1.特征词 表示一篇文本,矩阵数据,聚类.分类.预测 2.情绪.情感分析 情感值.舆论文本.文本数据,来源管,新闻.情感倾向:存在误差,不准确 3.基于股评文本的情绪分析 #网络舆情,判断指数走向 3 ...
- Python金融数据挖掘 第7章 第2节 (5)高频词
1.长度 文本长度:按照字数.标点符号.中英文 分词长度:词数,列表:list 预处理--统计词频.词,矩阵数据--深入分析,二维表,记录(文本).字段(词) 2.引入库 import jieba i ...
- Python金融数据挖掘
一.随便说说? 使用底层code构建(包.模块--模板). 实验是干啥的呀?我也不知道,yinweimeiyoutingke. def 层层封装: 1.欧式距离计算(手工计算.) 2.数学语言到机器语 ...
- 基于北京市各区二手房的数据分析(金融数据挖掘Python)
目录 1 研究背景与研究意义...................................................................................... ...
最新文章
- Luogu4099 HEOI2013 SAO 组合、树形DP
- 2-数组中重复的数字
- Idea中一个服务按多个端口同时启动
- 详细推导PCA算法(包括算法推导必备的知识)
- 读写分离怎么实现_项目中如何实现读写分离?怎么配置?
- 整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例
- django08: 视图与路由(旧笔记)
- jdk中的设计模式_JDK中的设计模式
- 对10亿个数据去重java_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
- 山东大学 2020级数据库系统 实验六
- Operation not permitted - /usr/bin/xcodeproj
- 排序类问题度量指标:Recall , MAP,MRR
- CAN应用层常用协议
- python 每天定时运行程序(傻瓜式倒计时)
- 金蝶——“免、抵、退”税操作说明及帐务处理
- 用 Python 分析《红楼梦》(2)
- oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理
- oracle迁移达梦7手顺及注意事项
- 【WCN6856】WiFi 5G 接口启动失败问题解决
- 关于我的奇怪码风以及定义乱七八糟变量的意义
热门文章
- Android 10 vivo,适配速度首次超过华为!vivo X27尝鲜Android 10,这一次真不一样
- 局域网流量监控原理(java)
- 修改CentOS-7的IP地址与SSH Secure Shell Client中文乱码问题
- 倒计时 总结 Timer Handler CountDownTimer RxJava MD
- setOnTouchListener报警告
- Win10提示已禁用IME不能输入中文
- window cmd 用法简介
- linux USB大容量设备驱动入门之读取U盘容量
- XiaomiRouter自学之路(12-改造小米路由器3使之支持spi启动)
- python数据分析实战-Python数据分析案例实战(慕课版)