序列模式挖掘——GSP算法实战

GSP算法实战

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

#统计组合出现次数
def cou_ls(LS):#LS为列表
    dic={}
    for i in LS:
        dic[i]=dic.get(i,0)+1
    return dic

#删除支持度小于2的
def cut_m(item):#item为字典
    for k in list(item.keys()):
        if item[k]<2:
            del item[k]
    return item

import pandas as pd
with open('gsp.csv')as f:
    dataset=pd.read_csv(f)
    LS=[]
    for i in range(dataset.shape[0]):#5行2列
        ls=[]
        ls=list(set(dataset['booknumber'][i].split(',')))#每行元素出现多次需要去重
        LS.extend(ls)
    m=cou_ls(LS)
    print('所有一项集:',m)
    #去掉支持度小于最小阀值2
    item_1=cut_m(m)
    print('L1:')
    print(item_1)

所有一项集: {‘b’: 5, ‘a’: 3, ‘c’: 4, ‘d’: 3, ‘g’: 1, ‘e’: 3, ‘f’: 2, ‘h’: 1}
L1:
{‘b’: 5, ‘a’: 3, ‘c’: 4, ‘d’: 3, ‘e’: 3, ‘f’: 2}

在这里插入图片描述

#将频繁一项组合,生成二项集
name=list(item_1.keys())#提取频繁一项
name_new=[i+j for i in name for j in name]#将频繁一项进行组合生成二项
LS=[]
for n in name:
    #print(n)
    for i in dataset['booknumber']:
        ls=[]
        i_c=i.split(',')#print(i_c)#将字符串转为列表
        if n in i_c:#找到以n[0]开头的位置
            in_dex=i_c.index(n) 
            for m in range(in_dex+1,len(i_c)):#从此处开始遍历列表
                ls.append(n+i_c[m])#该列表可能出现的两两组合
            ls=list(set(ls))#去重
            #print("ls",ls)
            LS.extend(ls)
print('所有二项集:',LS)
item=cou_ls(LS)#统计组合出现次数
item_2=cut_m(item)#删除支持度小于2的
print('L2:')
print(item_2)

所有二项集: [‘ba’, ‘bc’, ‘be’, ‘bf’, ‘bb’, ‘bg’, ‘bc’, ‘bf’, ‘bb’, ‘ba’, ‘be’, ‘bd’, ‘bc’, ‘be’, ‘bd’, ‘bb’, ‘ba’, ‘bc’, ‘ad’, ‘aa’, ‘ac’, ‘ab’, ‘af’, ‘ah’, ‘aa’, ‘ab’, ‘aa’, ‘ac’, ‘ab’, ‘ad’, ‘ae’, ‘cc’, ‘ca’, ‘cb’, ‘cf’, ‘ce’, ‘cb’, ‘cg’, ‘ce’, ‘cd’, ‘ce’, ‘ca’, ‘cb’, ‘cd’, ‘dc’, ‘da’, ‘db’, ‘dc’, ‘db’, ‘dd’, ‘da’, ‘de’, ‘ef’, ‘eg’, ‘eb’, ‘ed’, ‘ec’, ‘ee’, ‘fc’, ‘fe’, ‘fb’, ‘ff’, ‘fg’, ‘fa’, ‘fb’, ‘ff’]
L2:{‘ba’: 3, ‘bc’: 4, ‘be’: 3, ‘bf’: 2, ‘bb’: 3, ‘bd’: 2, ‘ad’: 2, ‘aa’: 3, ‘ac’: 2, ‘ab’: 3, ‘ca’: 2, ‘cb’: 3, ‘ce’: 3, ‘cd’: 2, ‘dc’: 2, ‘da’: 2, ‘db’: 2, ‘fb’: 2, ‘ff’: 2}

#N项合并
def con_(dic,n):
    LS_2=[]
    lev_2=list(dic.keys())
    for i in range(len(lev_2)):
        lev_2_=lev_2.copy()
        lev_2_.pop(i)#去掉本身
        ls_2=[]
        for j in range(len(lev_2_)):
            if lev_2[i][-(n-1):]==lev_2_[j][0:(n-1)]:#合并,去掉相同部分
                ls_2.append(lev_2[i]+lev_2_[j][-1])
            #print('-',ls_2)
        LS_2.extend(ls_2)
    return LS_2
def two_union(Item,n):#传入上一级得到的频繁项和项数
    item=con_(Item,n)#所有组合项
    #三项
    ls_k=[]
    index_=0
    for i in dataset['booknumber']:
        #print("i",i)
        for k in item:
            #print("k",k)
            i_c=i.split(',')#print(i_c)#将字符串转为列表
            l=[j in i_c for j in k]#判断组合项中元素是否都在i_c中
            if all(l):#所有元素都在列表中
                ic_k=''
                for w in k:
                    if i_c !=[]:
                        for j in i_c:
                            if j == w:
                                ic_k=ic_k+j
                                index_=i_c.index(j)#当前找到的元素位置
                                i_c=i_c[index_+1:]#遍历子序列寻找
                                break #找到了就停止
                            else:
                                continue#没找到继续向后
                            #print(m)
                #print('*',ic_k)
                if ic_k==k:
                    ls_k.append(ic_k)
    m=cou_ls(ls_k)#所有项集
    item_=cut_m(m)#删除支持度小于2的
    print('所有{}项集:{}'.format(n+1,m))
    print('L{}:{}'.format(n+1,item_))
    return item_

在这里插入图片描述

item_3=two_union(item_2,2)
所有3项集:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
L3:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
所有4项集:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
L4:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
item_5=two_union(item_4,4)
所有5项集:{'adcba': 2}
L5:{'adcba': 2}
n=2
while len(item_2)>1:
    item_2=two_union(item_2,n)
    n=n+1
所有3项集:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
L3:{'adc': 2, 'ada': 2, 'adb': 2, 'aca': 2, 'acb': 2, 'aba': 3, 'abc': 2, 'cba': 2, 'dca': 2, 'dcb': 2, 'dba': 2, 'dbc': 2, 'bcb': 2, 'bce': 3, 'bfb': 2, 'bff': 2, 'bbf': 2, 'fbf': 2, 'abb': 2, 'bcd': 2}
所有4项集:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
L4:{'adca': 2, 'adcb': 2, 'adba': 2, 'adbc': 2, 'acba': 2, 'dcba': 2, 'bfbf': 2}
所有5项集:{'adcba': 2}
L5:{'adcba': 2}

整理课件不易,走过路过觉得课程内容不错,请帮忙点赞、收藏!Thanks♪(・ω・)ノ**

参考文献

(1)https://blog.csdn.net/dpengwang/article/details/96437216

(2)https://blog.csdn.net/weixin_30276935/article/details/99331932?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242

(3)https://blog.csdn.net/qq_36523839/article/details/82191677?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param

(4)https://blog.csdn.net/qq_43372138/article/details/89279586

(5)https://blog.csdn.net/qq1010885678/article/details/45230011?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值