apriori算法python实现 csv,并且将结果可视化
时间: 2023-08-16 09:06:08 浏览: 106
以下是使用Python实现Apriori算法并从CSV文件读取数据的示例代码。此外,使用matplotlib库将结果绘制成图表。
```python
import csv
import itertools
from collections import defaultdict
import matplotlib.pyplot as plt
# 从CSV文件中读取数据
def load_data(file_path):
data = []
with open(file_path, 'r') as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
data.append(row)
return data
# 获取所有单项集
def get_itemset(data):
itemset = set()
for row in data:
for item in row:
itemset.add(item)
return itemset
# 获取所有频繁项集
def get_frequent_itemset(data, min_support):
itemset = get_itemset(data)
itemset_support = defaultdict(int)
for row in data:
for item in itemset:
if item in row:
itemset_support[item] += 1
frequent_itemset = set()
for item in itemset:
if itemset_support[item]/len(data) >= min_support:
frequent_itemset.add(frozenset([item]))
k = 2
while True:
candidate_itemset = set([i.union(j) for i in frequent_itemset for j in frequent_itemset if len(i.union(j)) == k])
if not candidate_itemset:
break
candidate_itemset_support = defaultdict(int)
for row in data:
for item in candidate_itemset:
if item.issubset(row):
candidate_itemset_support[item] += 1
frequent_itemset = set([itemset for itemset in candidate_itemset if candidate_itemset_support[itemset]/len(data) >= min_support])
k += 1
return frequent_itemset
# 绘制频繁项集的支持度图表
def plot_support(frequent_itemset, data, min_support):
itemset_support = defaultdict(int)
for row in data:
for item in frequent_itemset:
if item.issubset(row):
itemset_support[item] += 1
sorted_itemset_support = sorted(itemset_support.items(), key=lambda x: x[1], reverse=True)
plt.bar(range(len(sorted_itemset_support)), [support/len(data) for itemset, support in sorted_itemset_support])
plt.xticks(range(len(sorted_itemset_support)), [','.join(itemset) for itemset, support in sorted_itemset_support], rotation=90)
plt.xlabel('Itemset')
plt.ylabel('Support')
plt.title(f'Frequent itemsets (minimum support = {min_support})')
plt.show()
# 测试代码
data = load_data('transactions.csv')
min_support = 0.5
frequent_itemset = get_frequent_itemset(data, min_support)
print(frequent_itemset)
plot_support(frequent_itemset, data, min_support)
```
在此示例代码中,我们首先使用 `load_data` 函数从CSV文件中读取数据。然后,我们使用 `get_frequent_itemset` 函数获取所有频繁项集。最后,我们使用 `plot_support` 函数将频繁项集的支持度绘制成图表。
请注意,此示例代码假定CSV文件中的每个项目都是单个项,并用逗号分隔。如果您的CSV文件格式有所不同,您可能需要调整代码以适应您的数据格式。
阅读全文