Я использую Apyori API для создания ассоциации из моего набора данных.
#categorize central region into a basket
basket = (df
.groupby(['Customer Name', 'Sub-Category'])['Quantity']
.sum().unstack().reset_index().fillna(0)
.set_index('Customer Name'))
#create a function to normalize the data
#any >1 values will return 1, any <1 values will return 0
def encode_units(x):
if x <= 0:
return 0
if x>=1:
return 1
#apply the function to basket
basket_sets = basket.applymap(encode_units)
basket_sets
#find frequent itemset, which minimum support is at least 0.35
frequent_itemsets = apriori(basket_sets, min_support=0.35, use_colnames=True)
#generate rules with corresponding support, lift and confidence
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
a = rules[(rules['lift'] >= 1) & (rules['confidence'] >= 0.8)]
t = a.sort_values(['lift', 'confidence'], ascending=False)[['antecedents', 'consequents', 'lift', 'support', 'confidence']]
Тогда я получил результат:
antecedents consequents lift support confidence
74 (Accessories, Storage) (Paper) 1.114737 0.353090 0.858896
166 (Storage, Furnishings) (Paper) 1.106141 0.378310 0.852273
170 (Phones, Storage) (Paper) 1.103379 0.372005 0.850144
146 (Binders, Storage) (Paper) 1.094049 0.460277 0.842956
etc...
Как мне округлить лифт, поддержку и уверенность до 4 десятичных знаков, а также положить индекс предшествующих элементов, после чего отобразить? Спасибо
======================== Обновления ================== ==
Я использовал t.index = np.arange(1,len(t)+1)
для замены индекса, но округление я все еще продолжал находить решение.
======================== updates2 =================== =
Хорошо, я нашел ответ, используя
t.lift = t.lift.apply(np.round, decimals=4)
t.support = t.support.apply(np.round, decimals=4)
t.confidence = t.confidence.apply(np.round, decimals=4)