第12关:基于布尔数据集的一对一和多对一关联规则挖掘
任务描述
本关任务:针对以下布尔数据集,请编程计算规则“A->B”和“A,B->C”的支持度和置信度。 A B C 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0
相关知识
为了完成本关任务,你需要掌握:1.一对一关联规则挖掘,2.多对一关联规则挖掘。
一对一关联规则挖掘
基于上一关【相关知识】得出的Data布尔数据表,利用关联规则的置信度定义和支持度定义,挖掘两两项之间的关联规则。
#获取字段名称,并转化为列表
c=list(Data.columns)
c0=0.5 #最小置信度
s0=0.2 #最小支持度
list1=[] #预定义列表list1,用于存放规则
list2=[] #预定义列表list2,用于存放规则的支持度
list3=[] #预定义列表list3,用于存放规则的置信度
for k in range(len(c)):
for q in range(len(c)):
#对第c[k]个项与第c[q]个项挖掘关联规则
#规则的前件为c[k]
#规则的后件为c[q]
#要求前件和后件不相等
if c[k]!=c[q]:
c1=Data[c[k]]
c2=Data[c[q]]
I1=c1.values==1
I2=c2.values==1
t12=np.zeros((len(c1)))
t1=np.zeros((len(c1)))
t12[I1&I2]=1
t1[I1]=1
sp=sum(t12)/len(c1) #支持度
co=sum(t12)/sum(t1) #置信度
#取置信度大于等于c0的关联规则
if co>=c0 and sp>=s0:
list1.append(c[k]+'--'+c[q])
list2.append(sp)
list3.append(co)
#定义字典,用于存放关联规则及其置信度、支持度
R={'rule':list1,'support':list2,'confidence':list3}
#将字典转化为数据框
R=pd.DataFrame(R)
输出: ID rule Support confidence
0 排骨—西红柿 0.444444444 0.8
1 茄子—排骨 0.222222222 0.5
2 茄子—西红柿 0.222222222 0.5
3 茄子—鸡蛋 0.222222222 0.5
4 袜子—鸡蛋 0.222222222 0.666666667
5 西红柿—排骨 0.444444444 0.8
多对一关联规则挖掘
多对一关联规则是指前件有多个项,而后件只有一个项的关联规则。关联规则挖掘中的经典算法—Apriori算法,针对中小规模的关联规则挖掘问题具有较好的适用性。
以Data布尔数据集为例,调用apriori函数挖掘其关联规则。
示例如下:
import apriori #导入自行编写的apriori函数
outputfile = 'apriori_rules.xls' #结果文件
support = 0.2 #最小支持度
confidence = 0.4 #最小置信度
ms = '---' #连接符,默认'--',
apriori.find_rule(Data, support, confidence, ms).to_excel(outputfile)
#保存结果到Excel
输出: 正在进行第1次搜索...
数目:21...
正在进行第2次搜索...
数目:4...
结果为:
support confidence
西红柿---排骨 0.444444 0.800000
排骨---西红柿 0.444444 0.800000
袜子---鸡蛋 0.222222 0.666667
茄子---排骨 0.222222 0.500000
茄子---西红柿 0.222222 0.500000
茄子---鸡蛋 0.222222 0.500000
在输出结果中,“西红柿---排骨”代表规则“西红柿—>排骨”的支持度为0.444,置信度为0.8,表示同时购买西红柿和排骨的顾客比例为0.444,而购买西红柿的顾客当中也购买了排骨的比例是0.8。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试。
开始你的任务吧,祝你成功!
任务代码
#针对以下布尔数据集(已用一个“test12.xlsx”表格来存取,直接读取即可,字段名称为A、B、C,“#”号非表格数据):
# A B C
# 1 1 0
# 0 1 1
# 1 0 0
# 1 1 1
# 1 1 1
# 1 0 0
# 1 1 1
# 0 1 1
# 1 0 0
# 1 1 1
# 1 1 0
# 1 1 1
# 1 1 0
##请编程计算规则“A->B”和“A,B->C”的支持度和置信度,分别用sp1和co1,sp2和co2来表示
def return_values():
import pandas as pd
# 读取数据
data = pd.read_excel('test12.xlsx')
# 计算指标
total_records = len(data['A'])
AB_records = len(data[(data['A'] == 1) & (data['B'] == 1)])
ABC_records = len(data[(data['A'] == 1) & (data['B'] == 1) & (data['C'] == 1)])
A_records = len(data[data['A'] == 1])
AB_records = len(data[(data['A'] == 1) & (data['B'] == 1)])
# 计算支持度和置信度
sp1 = AB_records / total_records
co1 = AB_records / A_records
sp2 = ABC_records / total_records
co2 = ABC_records / AB_records
return (sp1,co1,sp2,co2)