Skynet

---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks


代码:
# -*- coding: UTF8 -*-

import sys
# 最小 支持度
sup_min = int(sys.argv[1])

ss 
= ","


# 交易 数据 库
D=[
 
'A,B,C,D',
 
'B,C,E',
 
'A,B,C,E',
 
'B,D,E',
 
'A,B,C,D'
]

print "交易数据库展现" 
for arr in D : print arr
print



'''
rows=int(sys.argv[1])
D=[]
for tid in open('BuyMusic.20090722.mob.prodIds').readlines()[:rows] :
    D.append(tid.split("\n")[0].split("\t")[1])


print "读取 文件结束 BuyMusic.20090722.mob.prodIds !"
'''
#全局 频繁项 收集
sup_data_map = {}
#全局  最大频繁项 收集
is_zsup={}

# 遍历过程 临时 局部  频繁项 收集
mapL = {}

# 第一次 频繁项 收集
def find_frequent_1_itemset(I):
    
if I=='null' or I=='' : return  
    
if mapL.has_key(I): mapL[I]+=1 
    
else: mapL[I]=1

map(find_frequent_1_itemset,[ I  
for TID in D for I  in TID.split(ss) ])

# 刷选掉 小于 最小支持度 的 频繁项
def remove_not_sup_min(map,supmin=sup_min):
    
for k  in [k for k,v in map.items() if v<supmin] :
        
del map[k]
remove_not_sup_min(mapL)

print "第一次 筛选 频繁项 结束!"
print mapL

# 装载 全局 频繁项 最大频繁项
for k,v in mapL.items() : 
    sup_data_map[k]
=v
    is_zsup[k]
=v

# 判定 是否 'BD' 属于  'BCD' 中 
isInTid = lambda I,TID : len(I.split(ss)) == len([i for i in I if i in TID.split(ss)])


# 组合  [A,B] + [A,C] = [A,B.C]
def comb(arr1,arr2):
    tmap
={}
    
for v in arr1+arr2 : tmap[v]="" 
    
return tmap.keys()

# apriori 迭代核心
def runL(mapL,dep):
    mapL2 
= {}
    C
={}
    keys 
= mapL.keys()
    iik
=""
    jjk
=""
    
# 根据 上次  频繁项 ,生成本次 '可能频繁项' 集合 
    for ii in range(len(keys)) : 
        
for jj in range(ii+1,len(keys)) :
            keystr
=comb([ch for ch in keys[ii].split(ss)],[ch for ch in keys[jj].split(ss)])
            
if not len(keystr) == dep : continue
            keystr.sort()
            tk
=ss.join(keystr)
            
if not tk in C : C[tk]=(keys[ii],keys[jj])

    
#  '可能频繁项' 对比 交易数据库  计数
    for tk,z in C.items():
        
for TID in D:
            
if isInTid(tk,TID) :
                
if mapL2.has_key(tk): mapL2[tk]+=1
                
else: mapL2[tk]=1

    
# 刷选掉 小于 最小支持度 的 频繁项
    remove_not_sup_min(mapL2)
    
for k,v in  is_zsup.items() :
        
for k1,v1 in mapL2.items() :
            
if isInTid(k,k1) :
                
del is_zsup[k]
                
break
    
# 全局 频繁项 ,最大频繁项  收集 
    for k,v in mapL2.items() : 
        sup_data_map[k]
=v
        is_zsup[k]
=v
    
print ""+str(dep)+"次 筛选 频繁项 结束!" 
    
return mapL2

# 真正 运行 
ii=1
while mapL :
    ii
=ii+1
    mapL 
= runL(mapL,ii)
    
print mapL

# 全局  频繁项 中 去除 最大频繁项
for k,v in is_zsup.items() :
    
if sup_data_map.has_key(k) : del sup_data_map[k]

print "频繁项"
print sup_data_map
print 
print "最大频繁项"
print is_zsup
print 

print "可信度 展现"
for k,v in  sup_data_map.items() :
    
for k1,v1 in is_zsup.items() :
        
if isInTid(k,k1) :
            
print k,"->",k1,"\t%.1f" %((float(is_zsup[k1])/float(sup_data_map[k]))*100)+"%"




结果:
-bash-3.00$ python ap.py 2
交易数据库展现
A,B,C,D
B,C,E
A,B,C,E
B,D,E
A,B,C,D

第一次 筛选 频繁项 结束!
{'A': 3, 'C': 4, 'B': 5, 'E': 3, 'D': 3}
第2次 筛选 频繁项 结束!
{'C,D': 2, 'C,E': 2, 'A,D': 2, 'A,B': 3, 'A,C': 3, 'B,E': 3, 'B,D': 3, 'B,C': 4}
第3次 筛选 频繁项 结束!
{'A,B,D': 2, 'A,B,C': 3, 'B,C,D': 2, 'B,C,E': 2, 'A,C,D': 2}
第4次 筛选 频繁项 结束!
{'A,B,C,D': 2}
第5次 筛选 频繁项 结束!
{}
频繁项
{'A': 3, 'C': 4, 'B': 5, 'E': 3, 'D': 3, 'C,D': 2, 'C,E': 2, 'A,D': 2, 'A,B': 3, 'A,C': 3, 'A,B,D': 2, 'B,C,D': 2, 'A,C,D': 2, 'B,E': 3, 'B,D': 3, 'B,C': 4, 'A,B,C': 3}

最大频繁项
{'B,C,E': 2, 'A,B,C,D': 2}

可信度 展现
A -> A,B,C,D     66.7%
C -> B,C,E     50.0%
C -> A,B,C,D     50.0%
B -> B,C,E     40.0%
B -> A,B,C,D     40.0%
E -> B,C,E     66.7%
D -> A,B,C,D     66.7%
C,D -> A,B,C,D     100.0%
C,E -> B,C,E     100.0%
A,D -> A,B,C,D     100.0%
A,B -> A,B,C,D     66.7%
A,C -> A,B,C,D     66.7%
A,B,D -> A,B,C,D     100.0%
B,C,D -> A,B,C,D     100.0%
A,C,D -> A,B,C,D     100.0%
B,E -> B,C,E     66.7%
B,D -> A,B,C,D     66.7%
B,C -> B,C,E     50.0%
B,C -> A,B,C,D     50.0%
A,B,C -> A,B,C,D     66.7%



整理 www.blogjava.net/Good-Game
posted on 2009-08-31 14:25 刘凯毅 阅读(1683) 评论(0)  编辑  收藏 所属分类: python算法/函数

只有注册用户登录后才能发表评论。


网站导航: