我已经用Python完成了一个简单的频繁项集分析。到目前为止,我一直在分析所有交易(我的数据由国家/地区之间的交易组成)。下面的示例:
ReceiptCode ItemCategoryName
0000P85071000028501 Stationery
0000P85071000028501 Food
0000P85071000028501 Hobby
0000P85071000028501 Kitchen
0000P85071000028501 Stationery
0000P85071000028501 Painting
我正在对数据集执行以下一些操作:
import pandas as pd
import numpy as np
import pyodbc
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
## Query Data into dataframe
dataset = pd.read_sql_query("""some query""", cnxn)
## Transformations
dataset_tx = dataset.groupby(['ReceiptCode'])['ItemCategoryName'].apply(list).values.tolist()
te = TransactionEncoder()
te_ary = te.fit(dataset_tx).transform(dataset_tx)
df = pd.SparseDataFrame(te_ary, columns=te.columns_)
frequent_itemsets = apriori(df, min_support=0.009, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.3)
但是我想在各个国家/地区进行此分析,因此我添加了第3列,其中包含国家/地区名称(以下示例)。
ReceiptCode ItemCategoryName StoreCountryName
0000P85071000028501 Stationery Ireland
0000P85071000028501 Food Ireland
0000P85071000028501 Hobby Ireland
0000P85071000028501 Kitchen Ireland
0000P85071000028501 Stationery Ireland
0000P85071000028501 Painting Ireland
我没有对所有国家/地区重复上述步骤,而是试图将其塞入一个循环,并相应地命名所有变量,以便我能分辨出国家/地区之间的差异。 也就是说,我试图获取特定国家/地区的变量 frequent_itemsets
和 rules
变量,而无需手动进行操作。即rules_Ireland
和frequent_itemsets_Ireland
。
到目前为止,我已经将国家/地区分组到一个DataFrameGroup中,然后使用列出
g = dataset.groupby('StoreCountryName')
dfs = [group for _,group in g]
但是,我不确定如何从这里继续。如果我遍历所有dfs[i]
并创建交易列表,则不知道如何跟踪国家/地区名称。有人对此有解决方案吗?还是我完全错了?