关联规则的形式如下: A、B满足:A、B是T的真子集,并且A和B的交集为空集。其中A称为前件,B称为后件。 关联规则有事也表示形如“如果…那么…”,前者是规则成立的条件,后者是条件下发生的结果。支持度和置信度有以下计算公式: 支持度表示为项集A、B同时发生的概率,而置信度则表示为项集A发生 的条件下项集B发生的概率。
布尔关联规则挖掘是指将事物数据集转化为布尔(0、1)值数据集,并在布尔数据集基础上挖掘关联规则的一种方法。在布尔数据集上挖掘关联规则的取值要么是0,要么是1,计算关联规则的支持度和置信度仅通过求和运算即可完成。
一对一关联规则是指规则的前件和后件都只有一项,这种关联规则的挖掘相对简单,直接利用关联规则支持度和置信度的计算公式计算即可。下面我们介绍Python的实现方法。具体计算流程及思路如下: 1.事务数据集转化为布尔(0、1)值数据表,算法如下: 首先,定义一个空的字典D和包含所有商品的列表tiem=['西红柿','排骨','鸡蛋','茄子','袜子','酸奶','土豆','鞋子']。 其次,定义一个长度与数据集长度(事务个数)相同的一维全0数组z,循环操作商品列表tiem,对每一个商品,搜索其所在事务序号(行号),并将事务序号对应的z位置修改为1,同时以商品作为键,z作为值,添加到字典D中。 最后,将D转化为数据框。
示例代码及结果如下:
tiem=['西红柿','排骨','鸡蛋','茄子','袜子','酸奶','土豆','鞋子']
import pandas as pd
import numpy as np
data = pd.read_excel('tr.xlsx',header = None)
data=data.iloc[:,1:]
D=dict()
for t in range(len(tiem)):
z=np.zeros((len(data)))
li=list()
for k in range(len(data.iloc[0,:])):
s=data.iloc[:,k]==tiem[t]
li.extend(list(s[s.values==True].index))
z[li]=1
D.setdefault(tiem[t],z)
Data=pd.DataFrame(D) #布尔值数据表
2.利用关联规则的置信度定义和支持度定义,挖掘两两项之间的关联规则,并将结果导出到Excel文件中,Python计算程序示例代码及结果(表6-2)如下:
#获取字段名称,并转化为列表
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)
#将结果导出到Excel
R.to_excel('rule1.xlsx')