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.aygfsteel.com/Good-Game
          posted on 2009-08-31 14:25 劉凱毅 閱讀(1815) 評論(0)  編輯  收藏 所屬分類: python算法/函數
          主站蜘蛛池模板: 古交市| 通海县| 茂名市| 韶山市| 明水县| 晴隆县| 康马县| 康平县| 白城市| 内黄县| 昌邑市| 榆社县| 镇巴县| 湾仔区| 紫阳县| 连平县| 鄂托克前旗| 阜宁县| 阿坝| 潮安县| 博野县| 连平县| 定州市| 宣汉县| 南平市| 普定县| 安图县| 许昌市| 崇左市| 天祝| 离岛区| 平乡县| 准格尔旗| 如皋市| 东安县| 邵武市| 郎溪县| 栾川县| 滕州市| 福安市| 石柱|