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

# 1. LOAD TRANSACTIONAL DATASET (10 TRANSACTIONS)

transactions = [
    ["Milk", "Bread", "Butter"],
    ["Bread", "Butter"],
    ["Milk", "Bread"],
    ["Milk", "Bread", "Eggs"],
    ["Bread", "Butter", "Eggs"],
    ["Milk", "Bread", "Butter"],
    ["Milk", "Eggs"],
    ["Bread", "Butter"],
    ["Milk", "Bread", "Butter", "Eggs"],
    ["Bread", "Eggs"]
]

print("Total Transactions:", len(transactions))

# 2. ONE-HOT ENCODING

encoder = TransactionEncoder()
encoded = encoder.fit_transform(transactions)

df = pd.DataFrame(encoded, columns=encoder.columns_)

print("\nOne-Hot Encoded Data:")
print(df.astype(int))

# 3. APPLY APRIORI (MINIMUM SUPPORT = 30%)

frequent_items = apriori(
    df, min_support=0.3, use_colnames=True
)

print("\nFrequent Itemsets:")
print(frequent_items)

# 4. GENERATE ASSOCIATION RULES (MINIMUM CONFIDENCE = 60%)

rules = association_rules(
    frequent_items,
    num_itemsets=len(transactions),
    metric="confidence",
    min_threshold=0.6
)

# 5. DISPLAY SUPPORT, CONFIDENCE AND LIFT

print("\nAssociation Rules:")
print(rules[[
    "antecedents", "consequents",
    "support", "confidence", "lift"
]])
