================================================================================
  Question 52: Association Rule Mining using Apriori Algorithm
================================================================================

FULL QUESTION:
Task:
Using the Groceries dataset (https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/groceries.csv):
1. Load and parse the transactions.
2. One-Hot encode transactions using mlxtend.preprocessing.TransactionEncoder.
3. Build models using the Apriori algorithm to identify frequent itemsets (min_support = 1%).
4. Develop association rules using mlxtend.frequent_patterns.association_rules.
5. Identify and print the most frequent single items.
6. List the top five association rules sorted by highest lift value.

SHORT QUESTION:
Market basket analysis identifying frequent itemsets and high-lift association rules using the Apriori algorithm.

================================================================================
README & SETUP INSTRUCTIONS:
================================================================================
# Question 52: Association Rule Mining using Apriori Algorithm

- Prerequisites: Python 3.x, Pandas, MLxtend (pip install pandas mlxtend).
- Setup: Downloads 'groceries.csv' automatically if not found locally.
- How to Run: python question_52.py
- Expected Behavior: Parses transactions, computes frequent itemsets via Apriori, and prints top items and top 5 rules by lift.

================================================================================
SOURCE CODE FILES:
================================================================================

1. question_52.py
--------------------------------------------------------------------------------
import warnings
warnings.filterwarnings('ignore', category=DeprecationWarning)

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules

with open('groceries.csv', 'r') as f:
    transactions = [line.strip().split(',') for line in f if line.strip()]

te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df_encoded = pd.DataFrame(te_ary, columns=te.columns_)

frequent_itemsets = apriori(df_encoded, min_support=0.01, use_colnames=True)

top_items = frequent_itemsets[frequent_itemsets['itemsets'].apply(len) == 1]
print("=== TOP FREQUENT ITEMS ===")
print(top_items.sort_values(by='support', ascending=False).head(5))

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.0)
top_5_lift = rules.sort_values(by='lift', ascending=False).head(5)

print("\n=== TOP 5 RULES BY LIFT ===")
print(top_5_lift[['antecedents', 'consequents', 'support', 'confidence', 'lift']])
--------------------------------------------------------------------------------
