一对一关联规则挖掘及Python实现

 关联规则的形式如下: 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')

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值