假设有以下数据集,每行代表一个顾客在超市的购买记录: I1: 西红柿、排骨、鸡蛋 I2: 西红柿、茄子 I3: 鸡蛋、袜子 I4: 西红柿、排骨、茄子 I5: 西红柿、排骨、袜子、酸奶 I6: 鸡蛋、茄子、酸奶 I7: 排骨、鸡蛋、茄子 I8: 土豆、鸡蛋、袜子 I9: 西红柿、排骨、鞋子、土豆 请同学们编程完成以下2项操作: (1)将以上数据转换为如下图所示的布尔(0,1)值数据集,如下表所示: ID 土豆 排骨 茄子 袜子 西红柿 酸奶 鞋子 鸡蛋 I1 0 1 0 0 1 0 0 1 I2 0 0 1 0 1 0 0 0 I3 0 0 0 1 0 0 0 1 I4 0 1 1 0 1 0 0 0 I5 0 1 0 1 1 1 0 0 I6 0 0 1 0 0 1 0 1 I7 0 1 1 0 0 0 0 1 I8 1 0 0 1 0 0 0 1 I9 1 1 0 0 1 0 1 0 (2)完成2项之间的关联规则的计算,关联规则定义如下:假如有一条规则:西红柿—>排骨,则同时购买西红柿和排骨的顾客比例为4/9,而购买西红柿的顾客当中也购买了排骨的比例是4/5。这两个比例参数在关联规则中是非常有意义的度量,分别称作支持度(support)和置信度(confidence)。支持度反应了规则的覆盖范围,置信度反应了规则的可信程度。计算结果应该如下图所示: support confidence 西红柿---排骨 0.444444 0.800000 排骨---西红柿 0.444444 0.800000 袜子---鸡蛋 0.222222 0.666667 茄子---排骨 0.222222 0.500000 茄子---西红柿 0.222222 0.500000 茄子---鸡蛋 0.222222 0.500000
时间: 2024-01-02 08:04:24 浏览: 226
超市数据集
3星 · 编辑精心推荐
好的,我可以帮你完成这个任务。以下是 Python 代码实现:
## 将数据转换为布尔(0,1)值数据集
dataset = {
'I1': {'西红柿': 1, '排骨': 1, '鸡蛋': 1},
'I2': {'西红柿': 1, '茄子': 1},
'I3': {'鸡蛋': 1, '袜子': 1},
'I4': {'西红柿': 1, '排骨': 1, '茄子': 1},
'I5': {'西红柿': 1, '排骨': 1, '袜子': 1, '酸奶': 1},
'I6': {'鸡蛋': 1, '茄子': 1, '酸奶': 1},
'I7': {'排骨': 1, '茄子': 1, '鸡蛋': 1},
'I8': {'土豆': 1, '鸡蛋': 1, '袜子': 1},
'I9': {'西红柿': 1, '排骨': 1, '土豆': 1, '鞋子': 1}
}
## 统计所有物品的出现次数
item_counts = {}
for transaction in dataset.values():
for item in transaction.keys():
if item not in item_counts:
item_counts[item] = 0
item_counts[item] += 1
## 构建布尔矩阵
bool_matrix = {}
for transaction_id, transaction in dataset.items():
bool_matrix[transaction_id] = {}
for item, count in item_counts.items():
if item in transaction:
bool_matrix[transaction_id][item] = 1
else:
bool_matrix[transaction_id][item] = 0
## 输出布尔矩阵
print('ID\t', end='')
for item in item_counts.keys():
print(item, '\t', end='')
print()
for transaction_id, transaction in bool_matrix.items():
print(transaction_id, '\t', end='')
for item in item_counts.keys():
print(transaction[item], '\t', end='')
print()
## 计算关联规则
min_support = 2 ## 最小支持度
min_confidence = 0.5 ## 最小置信度
## 统计所有项集的支持度
itemsets_counts = {}
for transaction in bool_matrix.values():
for itemset in range(1, len(item_counts) + 1):
for items in itertools.combinations(item_counts.keys(), itemset):
if all([transaction[item] == 1 for item in items]):
if items not in itemsets_counts:
itemsets_counts[items] = 0
itemsets_counts[items] += 1
## 计算关联规则的支持度和置信度
rules = []
for itemset in itemsets_counts.keys():
if len(itemset) > 1:
for subset in itertools.combinations(itemset, len(itemset) - 1):
antecedent = subset
consequent = tuple(sorted(set(itemset) - set(subset)))
support = itemsets_counts[itemset] / len(bool_matrix)
confidence = itemsets_counts[itemset] / itemsets_counts[antecedent]
if support >= min_support and confidence >= min_confidence:
rules.append((antecedent, consequent, support, confidence))
## 输出关联规则
print('关联规则\t\t', 'support\t', 'confidence')
for rule in rules:
print(str(rule[0]) + '---' + str(rule[1]), '\t', round(rule[2], 6), '\t', round(rule[3], 6))
阅读全文