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

transactions = [
    ["milk", "bread"],
    ["bread", "butter"],
    ["milk", "bread", "butter"],
    ["milk", "eggs"],
    ["bread", "eggs"],
    ["milk", "bread"],
    ["bread", "butter", "eggs"],
    ["milk", "bread", "eggs"],
    ["bread", "butter"],
    ["milk", "butter"]
]

encoder = TransactionEncoder()
data = encoder.fit_transform(transactions)
df = pd.DataFrame(data, columns=encoder.columns_)

print("Transaction Data:")
print(df)

frequent = apriori(df, min_support=0.3, use_colnames=True)
print("\nFrequent Itemsets:")
print(frequent)

rules = association_rules(
    frequent,
    num_itemsets=len(df),
    metric="confidence",
    min_threshold=0.6
)

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