【Python】基于协同过滤的书籍推荐系统


数据爬取

(运行爬虫程序前先使用Django代码创建数据库)
通过爬虫程序爬取豆瓣读书相关数据并将整个插入操作当成一整个事物进行插入数据库。
数据库软件使用SQlyog进行操作。(MySQL版本不能过低,否则连接Django框架会失败。)
在这里插入图片描述
在这里插入图片描述
毕设+查重4.2的论文

一、主页

主页能够展示相关的图书信息,猜你喜欢模块即为推荐模块。

底下有新书展示和作者展示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、注册登录

在前端当中有自动校验功能,并且对于存储进数据库中的密码采用了哈希加密。
(未登录前修改密码未实现)
在这里插入图片描述
在这里插入图片描述

三、修改密码

点击修改密码,能够自动发送六位数验证码到用户的邮箱中。
在这里插入图片描述

四、评论

用户能够对书籍进行评论。
在这里插入图片描述
评论成功之后,自动计算相似度并返回推荐列表。
在这里插入图片描述
用户评论成功之后返回主页,自动刷新推荐列表。
在这里插入图片描述

五、搜索

在这里插入图片描述
点击分类的查看更多,将书籍列表返回给该页面,并实现了分页。
在这里插入图片描述

六、后台

使用Django自带的后台,更改为中文和其他第三方库显示出来。

在这里插入图片描述
在这里插入图片描述

总结

使用Django框架,MySQL数据库,基于用户的协同过滤,皮尔逊相关系数,实现了书籍推荐系统。

完整代码见代码

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个基于协同过滤算法图书推荐系统Python 代码示例: ```python import pandas as pd import numpy as np # 加载数据集 books = pd.read_csv('books.csv') ratings = pd.read_csv('ratings.csv') # 统计用户对书籍的评分数量 ratings_count = pd.DataFrame(ratings.groupby('book_id')['rating'].count()) ratings_count.rename(columns={'rating': 'rating_count'}, inplace=True) books = pd.merge(books, ratings_count, on='book_id') # 选取评分数量排名前10的书籍 popular_books = list(ratings_count.sort_values('rating_count', ascending=False).index[:10]) # 选取评分高于平均分的书籍 mean_rating = np.mean(ratings['rating']) high_rating_books = list(ratings[ratings['rating'] > mean_rating]['book_id'].unique()) # 构建用户-书籍评分矩阵 user_book_ratings = pd.pivot_table(ratings, values='rating', index=['user_id'], columns=['book_id']).fillna(0) # 计算用户之间的相似度 from sklearn.metrics.pairwise import cosine_similarity user_similarity = cosine_similarity(user_book_ratings) # 根据用户之间的相似度,为每个用户推荐书籍 def recommend_books(user_id): user_ratings = user_book_ratings.loc[user_id].values.reshape(1, -1) similarity_scores = list(enumerate(user_similarity[user_id])) similarity_scores = sorted(similarity_scores, key=lambda x: x[1], reverse=True) similar_users = [i[0] for i in similarity_scores] recommended_books = [] for user in similar_users: books_rated = list(user_book_ratings.loc[user][user_book_ratings.loc[user] > 0].index) recommended_books.extend(list(set(books_rated) - set(recommended_books))) if len(recommended_books) >= 10: break recommended_books = list(set(recommended_books) & set(high_rating_books + popular_books)) return recommended_books # 测试推荐系统 print(recommend_books(1)) ``` 请注意,此代码示例仅用于演示目的,实际上线的推荐系统需要更多的数据预处理、模型调参和性能优化等工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值