如何利用项目矩阵扫描候选项目集

tcbh2hod  于 2022-10-02  发布在  Python
关注(0)|答案(1)|浏览(151)

我正在做一个小的数据挖掘项目,我遇到了一个问题,那就是扫描‘项目矩阵’并计算每个候选项目集的出现次数。

This is the what candidate itemsets look like. It is a list of several frozensets.
[{'🌭', '🍔', '🍕'},
 {'🍆', '🍉', '🍑'},
 {'🍆', '🍊', '🍑'},
 {'🌭', '🍔', '🍦'},
 {'🌭', '🌮', '🍕'}]

下面是我得到的项目矩阵。对于我的候选项目集中的每个候选人,我需要检查它是否是项目矩阵每一行的子集。换句话说,我必须计算每个候选项集每行出现的次数,并将其相加。

我试着运行循环,也就是:对于矩阵的每一行,我检查每个候选者是否有任何一个是该行的子集。如果是,那么计数+1。但是,我不能用字典来做它,因为集合是不可访问的。现在我对这个问题感到有点沮丧。

为了使该示例可重现,我将表情符号更改为字符串。

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
           ['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
           ['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
           ['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
           ['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
df

candidate_set = [{'Apple', 'Milk'}, {'Eggs', 'Milk'}, {'Onion', 'Yogurt'}]

要找出总共有多少次是真的,例如“Apple”和“Milk”,在每一行都是真的。

如有任何帮助,我们将不胜感激!谢谢

pod7payv

pod7payv1#

这里有一个简短的、可重复使用的例子,说明了一种方法:

import pandas as pd

df = pd.DataFrame(
    {
        "Apple": [True, False, False, False, True],
        "Milk": [True, True, False, False, True],
        "Eggs": [False, False, True, True, True],
        "Onion": [True, False, True, False, True],
        "Yogurt": [False, False, True, False, False],
    }
)

candidate_set = [{"Apple", "Milk"}, {"Eggs", "Milk"}, {"Onion", "Yogurt"}]
counts = {
    tuple(pair): df.loc[df[sorted(pair)[0]] & df[sorted(pair)[1]], :].shape[0]
    for pair in candidate_set
}

print(f"{counts=}")

# Output

counts={('Apple', 'Milk'): 2, ('Milk', 'Eggs'): 1, ('Yogurt', 'Onion'): 1}

相关问题