【问题标题】:Counting the occurrences of frequent pairs efficiently有效计算频繁对的出现次数
【发布时间】:2020-12-29 06:58:11
【问题描述】:

我有一个大型的购物篮数据库 (N = 31101),我想计算频繁配对的出现次数。我正在使用get_sup 函数来执行此操作。我能够用分钟计算频繁项目的数量。但是,计算频繁配对的时间太长了,因为有 269745 对,并且所有这些配对都必须在 N 个篮子中检查。

我正在使用 get_sup 函数中的 for 循环来执行此操作。 Spark 中是否还有其他技巧可以用来提高效率。

def get_sup(x):
  x_sup = 0
  for t in shared_itemset.value:
    if x.issubset(t):
    #if set({x}).issubset(set(t)):
      x_sup +=1
  if x_sup >= sup:
      return x, x_sup
  else:
      return ()

data = sc.textFile('browsing.txt')

itemset = data.map(lambda line: ([item for item in line.strip().split(' ')]))
shared_itemset = sc.broadcast(itemset.map(lambda x: frozenset(x)).collect())

c1 = data.flatMap(lambda line: line.strip().split(' ')).distinct()
c1 = c1.map(lambda x : frozenset({x}))
print(c1.count())----------------------------------------------- 12592

f1 = c1.map(get_sup).filter(lambda x: x)
print(f1.count())----------------------------------------------- 735

f1.persist()
f1m = f1.map(lambda x: tuple(x[0]))
f1c = f1m.cartesian(f1m).map(lambda x: frozenset(x[0]+x[1])).filter(lambda x: len(x)>1).distinct()

# f1c has 269745 elements and has data structure frozenset({'FRO11987', 'GRO73461'})
 
f2 = f1c.map(get_sup).filter(lambda x: x) pairs

谢谢。对于整个数据集使用this file

【问题讨论】:

    标签: python pyspark data-mining apriori


    【解决方案1】:

    此解决方案可能有效:对于每个篮子,它都会计算其元素的可能对,然后检查 pair 是否在这些元素中。然后它输出包含该对的篮子的百分比。

    from itertools import permutations
    b1 = [1, 2, 3, 4]
    b2 = [4, 5, 6]
    baskets = [b1, b2]
    pair = [1, 2]
    
    def finder(baskets, pair):
        baskets_asstr = [''.join(map(str, i)) for i in baskets]
        pairsOfEveryBasket = [["".join(i) for i in permutations(baskets_asstr[j], 2)] for j in range(len(baskets_asstr))]
        zipped = list(zip(baskets_asstr, pairsOfEveryBasket))
        pair_str = "".join([str(i) for i in pair])
        num = 0
        for i in zipped:
            if pair_str in i[1]:
                num += 1
        return (num/len(baskets_asstr)
    
    finder(baskets, pair)
    

    【讨论】:

    • 我认为我的问题并不清楚。所以,我有 N 个篮子,每个篮子都有任意数量的物品。现在,我有一对项目(假设 P = (a,b))。我想从有这对的 N 个篮子中得到 K 数。谢谢。
    • 顺序有影响吗?比如说,P(a,b) 是否等于 P(b,a)?
    • @user3443033 我已经编辑了我的回复,也许它会起作用
    猜你喜欢
    • 2019-05-11
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多