我有一組1000000個市場籃子,每個市場籃子包含1-4個項目。我想計算每個獨特組合購買的頻率。在市場購物籃中計算獨特的組合頻率
的數據被組織成這樣:
[in] print(training_df.head(n=5))
[out] product_id
transaction_id
0000001 [P06, P09]
0000002 [P01, P05, P06, P09]
0000003 [P01, P06]
0000004 [P01, P09]
0000005 [P06, P09]
在這個例子中[P06,P09]具有2的頻率和所有其它組合具有爲1的頻率。我已經創建瞭如下的二進制矩陣和計算爲這樣的各個項目的頻率:
# Create a matrix for the transactions
from sklearn.preprocessing import MultiLabelBinarizer
product_ids = ['P{:02d}'.format(i+1) for i in range(10)]
mlb = MultiLabelBinarizer(classes = product_ids)
training_df1 = training_df.drop('product_id', 1).join(pd.DataFrame(mlb.fit_transform(training_df['product_id']),
columns=mlb.classes_,
index=training_df.index))
# Calculate the support count for each product (frequency)
train_product_support = {}
for column in training_df1.columns:
train_product_support[column] = sum(training_df1[column]>0)
如何計算的1-4項存在於所述數據中的每個唯一組合的頻率是多少?
這就是我將如何解決這個問題,但我猜想順序無關緊要。因此,我會拋出'key = sorted(key)'來進行相同項目的任何排列 –
'defaultdict'可能更適合與https://docs.python.org/3/library/collections.html collections.defaultdict – dashiell
可能還需要一個'frozenset'而不是'str' https://docs.python.org/3/library/stdtypes.html#frozenset – dashiell