推荐引擎:基于余弦相似度书籍推荐Python实现

简介: 推荐引擎:基于余弦相似度书籍推荐Python实现
# -*- coding: utf-8 -*-
# @Date    : 2019-02-14
# @Author  : Peng Shiyu
from copy import deepcopy
import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 数据准备:{书名: 评分}
# user = {"红楼梦", "西游记", "水浒传", "三国演义"}
user1 = {"红楼梦": 4, "西游记": 3}
user2 = {"红楼梦": 5, "西游记": 6, "水浒传": 3}
user3 = {"红楼梦": 4, "西游记": 3, "三国演义": 5}
user4 = {"西游记": 4, "三国演义": 5}
data = [
    user1,
    user2,
    user3,
    user4
]
# 特征提取
dict_vectorizer = DictVectorizer(dtype=np.int32, sparse=False)
result = dict_vectorizer.fit_transform(data)
books = dict_vectorizer.get_feature_names()
print(dict_vectorizer.get_feature_names())
print(result)
# 余弦相似度矩阵
user_similarity = cosine_similarity(result)
print(user_similarity)
for user_id, user_looked in enumerate(data):
    user_suggest = user_similarity[user_id].tolist()
    # 找到与之相似度最高的两个人
    user_suggest_bak = deepcopy(user_suggest)
    user_suggest_bak.sort(reverse=True)
    max_similar = user_suggest_bak[1: 3]
    print(max_similar)
    max_index = list(map(user_suggest.index, max_similar))
    print(max_index)
    suggest = {}
    for index, user in enumerate([data[i] for i in max_index]):
        for key, value in user.items():
            if key not in user_looked:
                suggest[key] = user_suggest[index] * value
    print(suggest)
"""
['三国演义', '水浒传', '红楼梦', '西游记']
[[0 0 4 3]
 [0 3 5 6]
 [5 0 4 3]
 [5 0 0 4]]
[[1.         0.90837374 0.70710678 0.37481703]
 [0.90837374 1.         0.64231723 0.44799204]
 [0.70710678 0.64231723 1.         0.81719329]
 [0.37481703 0.44799204 0.81719329 1.        ]]
[0.9083737430941391, 0.7071067811865475]
{'水浒传': 3.0, '三国演义': 4.541868715470695}
[0.9083737430941391, 0.6423172335936725]
{'三国演义': 4.999999999999999}
[0.8171932929538644, 0.7071067811865475]
{}
[0.8171932929538644, 0.44799203576793445]
{'红楼梦': 2.2399601788396724, '水浒传': 1.3439761073038032}
"""
相关文章
|
存储 数据采集 数据可视化
【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】
【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】
|
算法 Python
【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
273 1
|
定位技术 Python
福利!基于 ArcGIS Pro 的Python 教学书籍开放下载
福利!基于 ArcGIS Pro 的Python 教学书籍开放下载
477 0
|
数据采集 数据可视化 前端开发
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
本文介绍了一个基于Python和Django框架的当当网书籍数据采集与可视化分析项目,该项目实现了数据采集、用户登录注册、后台管理,并利用数据清洗、分析和可视化技术在前端展示分析结果。
330 0
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
|
数据采集 小程序 API
Python实现isbn查询书籍详细信息
Python实现通过isbn码查询书籍详细信息
578 0
|
搜索推荐 Python
Python之由公司名推算出公司官网(余弦相似度)
Python之由公司名推算出公司官网(余弦相似度)
|
机器学习/深度学习 设计模式 数据可视化
【干货】Python参考书籍
【干货】Python参考书籍
|
算法 数据可视化 搜索推荐
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
180 11
Python print() 打印两个 list ,实现中间换行
Python print() 打印两个 list ,实现中间换行
|
数据采集 机器学习/深度学习 设计模式
盘点35个Python书籍Python爱好者不容错过
盘点35个Python书籍Python爱好者不容错过
138 0
盘点35个Python书籍Python爱好者不容错过