目 录CONTENT

文章目录

Python数据挖掘入门与实践第四章代码实现

小磊
2023-05-09 / 0 评论 / 0 点赞 / 644 阅读 / 376 字 / 正在检测是否收录...

数据地址

import pandas as pd
import numpy as np
from collections import defaultdict
from efficient_apriori import apriori

# 数据读取以及预处理
data_filename = 'data/u.data'
data = pd.read_csv(data_filename, header=None, sep='\t', names=['用户ID', '电影ID', '评分', '日期'])
data['日期'] = pd.to_datetime(data['日期'], unit='s')
data['用户喜欢该电影'] = data['评分'] > 3
favorable_ratings = data[data["用户喜欢该电影"]]
favorable_reviews_by_users = dict((k, frozenset(v))
                                  for k, v in favorable_ratings.groupby("用户ID")["电影ID"])

# 创建电影编号与电影名的映射集
data_filename_name = 'data/u.item'
data_name = pd.read_csv(data_filename_name, sep='|', encoding='utf-16', header=None)
num_name = dict((k + 1, v[1]) for k, v in data_name.iterrows())

# 这里没有手动实现Apriori算法而是使用efficient_apriori包中别人已经实现的Apriori算法
X = list(favorable_reviews_by_users.values())
itemsets, rules = apriori(X, 0.2, 0.6)

for item in rules:
    print('当观众喜欢:', end='')
    for i in range(len(item.lhs)):
        print("\"", num_name.get(item.lhs[i]), "\"", end='')
        if i < len(item.lhs) - 1:
            print('和', end='')
    print('电影时,他们也喜欢', end='')
    for i in range(len(item.rhs)):
        print("\"", num_name.get(item.rhs[i]), "\"", end='')
        if i < len(item.rhs) - 1:
            print('和', end='')
    print('电影的置信度为:{0:.2f}%'.format(item.confidence * 100), end='')
    print(',提升度为:{0:.2f}%'.format(item.lift * 100))
0

评论区