                             PRACTICAL NO:10.1
                         ASSOCIATION-APRIORI
GROCERIES DATASET
CODE:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
data = pd.read_csv("groceries.csv")
print("First 5 rows of raw data:\n", data.head())
transactions = data.values.astype(str).tolist()
transactions = [[item for item in row if item != 'nan' and item != 'None'] for row in transactions]
print("\nFirst 2 cleaned transactions:\n", transactions[:2])
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df = pd.DataFrame(te_ary, columns=te.columns_)
print("\nOne-hot encoded shape:", df.shape)
frequent_itemset = apriori(df, min_support=0.01, use_colnames=True)
print(f"Total frequent itemsets found: {len(frequent_itemset)}")
top_15 = frequent_itemset.nlargest(n=15, columns='support').copy()
top_15['itemset_str'] = top_15['itemsets'].apply(lambda x: ', '.join(list(x)))
plt.figure(figsize=(12, 6))
colors = ['#FFB6C1', '#ADD8E6', '#98FB98', '#FFD700', '#FFA07A', '#87CEEB', '#FFC0CB', '#FF69B4', '#00FA9A', '#FF6347']
sns.barplot(x='itemset_str', y='support', data=top_15, hue='itemset_str', palette=colors[:len(top_15)], legend=False)
plt.xticks(rotation=45, ha='right')
plt.title("Top Frequent Itemsets by Support")
plt.tight_layout()
plt.show()
rules = association_rules(frequent_itemset, metric="lift", min_threshold=1)
rules = rules.sort_values(by=['support'], ascending=False)
rules["antecedent_len"] = rules["antecedents"].apply(lambda x: len(x))
rules["consequent_len"] = rules["consequents"].apply(lambda x: len(x))
rule_3_filtered = rules[(rules['antecedent_len'] >= 2) & 
                        (rules['confidence'] > 0.3) & 
                        (rules['lift'] > 1)].sort_values(by=['lift', 'support'], ascending=False)
print("\nRule 3 (Antecedent Len >= 2, Conf > 0.3, Lift > 1):\n", rule_3_filtered.head())
rule_4_filtered = rules[(rules['consequent_len'] >= 2) & 
                        (rules['lift'] > 1)].sort_values(by=['lift', 'confidence'], ascending=False)
print("\nRule 4 (Consequent Len >= 2, Lift > 1):\n", rule_4_filtered.head())
print("---------------------ACCURACY METRICS-------------------------------")
rules = association_rules(frequent_itemset, metric="lift", min_threshold=1)
print(rules)
rules = association_rules(frequent_itemset,metric="confidence",min_threshold=1)
print(rules)
rules = association_rules(frequent_itemset,metric="leverage",min_threshold=1)
print(rules)
rules = association_rules(frequent_itemset,metric="conviction",min_threshold=1)
print(rules)
OUTPUT: