查找具有频繁项集的对应行

我的数据集是一个与客户购买信息相当的邻接矩阵。示例玩具数据集:


p = {'A': [0,1,0,1], 'B': [1,1,1,1], 'C': [0,0,1,1], 'D': [1,1,1,0]}

df = pd.DataFrame(data=p)

df

现在我对频繁项集感兴趣,所以我使用了先验 fim:


from mlxtend.frequent_patterns import apriori

frequent_itemsets = apriori(df, min_support=0.1, use_colnames=True)

frequent_itemsets

现在我们看到项集 (D,B) 出现在 75% 的数据集中。但我实际上对这个项目集出现在哪些行感兴趣,因为索引有一些信息(哪个客户购买了这些项目)。


很快,我很好奇如何在我的数据集中进行过滤以查看哪些行与特定项目集相对应。这个包/库中是否有这样的功能。这样我就可以过滤第 0,1 行和第 2 行中出现的项目集 (D,B)?


aluckdog
浏览 104回答 1
1回答

catspeake

似乎没有直接的方法可以通过apriori. 但是,一种方法如下:from mlxtend.frequent_patterns import apriorifrequent_itemsets = apriori(df, min_support=0.1, use_colnames=True)# lists of columns where value is 1 per rowcols = df.dot(df.columns).map(set).values.tolist()# use sets to see which rows are a superset of the sets in colsset_itemsets = map(set,frequent_itemsets.itemsets.values.tolist())frequent_itemsets['indices'] = [[ix for ix,j in enumerate(cols) if i.issubset(j)]                                  for i in set_itemsets]print(frequent_itemsets)    support   itemsets       indices0      0.50        (A)        [1, 3]1      1.00        (B)  [0, 1, 2, 3]2      0.50        (C)        [2, 3]3      0.75        (D)     [0, 1, 2]4      0.50     (A, B)        [1, 3]5      0.25     (A, C)           [3]6      0.25     (A, D)           [1]7      0.50     (C, B)        [2, 3]8      0.75     (B, D)     [0, 1, 2]9      0.25     (C, D)           [2]10     0.25  (A, B, C)           [3]11     0.25  (A, B, D)           [1]12     0.25  (C, B, D)           [2]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python