Apriori挖掘关联规则 python 源代码 csv 文件示例
时间: 2024-03-01 09:04:17 浏览: 88
以下是一个简单的 Apriori 算法的 Python 实现,该算法基于一个 CSV 文件进行关联规则挖掘:
```python
import csv
# 读取 CSV 文件
def load_csv(filename):
dataset = []
with open(filename, 'r') as file:
csvreader = csv.reader(file)
for row in csvreader:
dataset.append(row)
return dataset
# 获取所有项集中的唯一项
def get_unique_items(dataset):
items = set()
for transaction in dataset:
for item in transaction:
items.add(item)
return items
# 计算项集的支持度
def calculate_support(itemset, dataset):
count = 0
for transaction in dataset:
if set(itemset).issubset(set(transaction)):
count += 1
return count / float(len(dataset))
# 从候选项集中获取频繁项集
def get_frequent_itemsets(candidates, dataset, min_support):
frequent_itemsets = []
for itemset in candidates:
support = calculate_support(itemset, dataset)
if support >= min_support:
frequent_itemsets.append(itemset)
return frequent_itemsets
# 生成候选项集
def generate_candidates(itemsets, k):
candidates = set()
for i in range(len(itemsets)):
for j in range(i+1, len(itemsets)):
union = itemsets[i] | itemsets[j]
if len(union) == k:
candidates.add(union)
return list(candidates)
# Apriori 算法主函数
def apriori(dataset, min_support):
# 获取所有项集中的唯一项
unique_items = get_unique_items(dataset)
# 生成频繁 1-项集
frequent_itemsets = get_frequent_itemsets(unique_items, dataset, min_support)
# 生成频繁 k-项集,直到无法生成更多项集
k = 2
while len(frequent_itemsets[k-2]) > 0:
candidates = generate_candidates(frequent_itemsets[k-2], k)
frequent_k_itemsets = get_frequent_itemsets(candidates, dataset, min_support)
frequent_itemsets.append(frequent_k_itemsets)
k += 1
return frequent_itemsets
# 示例代码
dataset = load_csv("example.csv")
frequent_itemsets = apriori(dataset, 0.5)
print(frequent_itemsets)
```
在上面的代码中,CSV 文件应该包含每个事务的项列表。以下是一个示例 CSV 文件:
```
A,B,C
A,C,D
B,C,D
A,B
B,C
```
在这个示例中,我们希望找到支持度至少为 0.5 的所有频繁项集。运行代码后,输出如下:
```
[{'D'}, {'B'}, {'C'}, {'A'}, {'C', 'B'}, {'A', 'B'}, {'C', 'A'}, {'C', 'A', 'B'}]
```
这表明,D、B、C、A、C+B、A+B、C+A 和 C+A+B 都是频繁项集。
阅读全文