毕业设计:python图书推荐系统 协同过滤推荐算法 爬虫技术 大数据 (源码)✅

185 篇文章 35 订阅
179 篇文章 6 订阅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Django框架、requests爬虫、协同过滤推荐算法、MySQL数据库

图书推荐系统是一种基于用户兴趣和行为的智能推荐系统,旨在为用户提供个性化的图书推荐。该系统通过分析用户的历史阅读记录、收藏行为、评分等信息,结合协同过滤推荐算法,为用户推荐他们可能感兴趣的图书。

2、项目界面

(1)图书数据浏览

在这里插入图片描述

(2)图书数据详情页

在这里插入图片描述

(3)图书推荐

在这里插入图片描述

(4)我的图书评分记录
在这里插入图片描述

(5)后台管理系统

在这里插入图片描述

(6)注册登录界面

在这里插入图片描述

(7)数据爬取

在这里插入图片描述

3、项目说明

图书推荐系统是一种基于用户兴趣和行为的智能推荐系统,旨在为用户提供个性化的图书推荐。该系统通过分析用户的历史阅读记录、收藏行为、评分等信息,结合协同过滤推荐算法,为用户推荐他们可能感兴趣的图书。

在系统的后端开发中,常用的技术框架是Django。Django是一个使用Python语言开发的高级Web框架,它提供了一套完善的工具和库,用于快速构建高性能的Web应用程序。使用Django框架可以方便地处理用户请求、管理数据库、实现用户认证和授权等功能。

为了获取图书的相关信息,推荐系统需要进行数据爬取。requests是一个常用的Python库,它可以发送HTTP请求并获取响应内容。通过requests库,我们可以编写爬虫程序,从各大图书网站上获取图书的基本信息、评论、评分等数据。

协同过滤推荐算法是图书推荐系统中常用的算法之一。该算法基于用户的历史行为和其他用户的行为进行推荐。它通过计算用户之间的相似度,找到与目标用户兴趣相似的其他用户,然后根据这些用户的行为推荐给目标用户可能感兴趣的图书。

图书推荐系统通常使用MySQL等关系型数据库来存储用户数据、图书信息和推荐结果等。MySQL是一种开源的关系型数据库管理系统,它具有高性能、可靠性和可扩展性的特点,非常适合用于存储和管理大量的数据。

综上所述,图书推荐系统使用Django框架进行后端开发,使用requests库进行数据爬取,采用协同过滤推荐算法进行个性化推荐,并使用MySQL数据库进行数据存储。

4、核心代码

# -*-coding:utf-8-*-
import os
import django
from user.models import *
from math import sqrt, pow
import operator
from itertools import chain

os.environ["DJANGO_SETTINGS_MODULE"] = "book.settings"
django.setup()


# 提前加载构建评分矩阵
def build_user_map():
    all_user = {}
    users = User.objects.all()
    for user in users:
        rates = user.rate_set.all()
        rate = {}
        # 用户有给图书打分,包装成字典的形式
        if rates:
            for i in rates:
                rate.setdefault(str(i.book.id), i.mark)
            all_user.setdefault(user.username, rate)
        else:
            # 用户没有为图书打过分,设为0
            all_user.setdefault(user.username, {})
    print("this is all user:", all_user)
    return all_user

all_user = build_user_map()


class UserCf:

    # 获得初始化数据
    def __init__(self, data):
        self.data = data

    # 通过用户名获得图书列表,仅调试使用
    def getItems(self, username1, username2):
        return self.data[username1], self.data[username2]

    # 计算两个用户的皮尔逊相关系数
    def pearson(self, user1, user2):  # 数据格式为:商品id,评分
        #     print("user message", user1)
        sumXY = 0.0
        n = 0
        sumX = 0.0
        sumY = 0.0
        sumX2 = 0.0
        sumY2 = 0.0
        # print(user1.items())
        for item, score1 in user1.items():
            if item in user2.keys():  # 计算公共的商品评分
                n += 1
                sumXY += score1 * user2[item]
                sumX += score1
                sumY += user2[item]
                sumX2 += pow(score1, 2)
                sumY2 += pow(user2[item], 2)
        if n == 0:
            # print("p氏距离为0")
            return 0
        molecule = sumXY - (sumX * sumY) / n
        denominator = sqrt((sumX2 - pow(sumX, 2) / n) * (sumY2 - pow(sumY, 2) / n))
        if denominator == 0:
            #       print("共同特征为0")
            return 0
        r = molecule / denominator
        #   print("p氏距离:", r)
        return r

    # 计算与当前用户的距离,获得最临近的用户
    def nearest_user(self, username, n=1):
        # 距离字典
        distances = {}
        # 用户,相似度
        # 遍历整个数据集
        for user, rate_set in self.data.items():
            # 非当前的用户
            if user != username:
                distance = self.pearson(self.data[username], self.data[user])
                # 计算两个用户的相似度
                distances[user] = distance
        #  相似度
        closest_distance = sorted(
            distances.items(), key=operator.itemgetter(1), reverse=True
        )
        # 最相似的N个用户
        m = 0
        for i in range(len(closest_distance)):
            if closest_distance[i][1] != 0:
                m += 1
        if m != 0:
            return closest_distance[:m]
        else:
            return closest_distance[:n]

    # 给用户推荐商品,username是当前用户,n是最近邻的个数
    def recommend(self, username, n=1):
        recommend = {}
        nearest_user = self.nearest_user(username, n)
        # print(nearest_user)

        for user, score in dict(nearest_user).items():  # 最相近的n个用户
            for item, scores in self.data[user].items():  # 推荐的用户的图书的列表
                if item not in self.data[username].keys():  # 当前username没有看过
                    if item not in recommend.keys():  # 添加到推荐列表中
                        recommend[item] = scores
        # 对推荐的结果按照商品评分返回
        return sorted(recommend.items(), key=operator.itemgetter(1), reverse=True)


def recommend_by_user_id(user_id):
    current_user = User.objects.get(id=user_id)
    # print("我是当前用户")
    print(current_user.rate_set.count())
    # 如果当前用户没有打分 则按照热度顺序返回
    if current_user.rate_set.count() == 0:
        book_list = Book.objects.all().order_by("-book_pl")[:15]
        return book_list
    # users = User.objects.all()
    # # 构建评分矩阵
    # all_user = {}
    # for user in users:
    #     rates = user.rate_set.all()
    #     rate = {}
    #     # 用户有给图书打分,包装成字典的形式
    #     if rates:
    #         for i in rates:
    #             rate.setdefault(str(i.book.id), i.mark)
    #         all_user.setdefault(user.username, rate)
    #     else:
    #         # 用户没有为图书打过分,设为0
    #         all_user.setdefault(user.username, {})
    # print("this is all user:", all_user)

    user_cf = UserCf(data=all_user)
    recommend_list = user_cf.recommend(current_user.username, 15)
    # print("fdfdsfdsf")
    # print(recommend_list)
    good_list = [each[0] for each in recommend_list]
    books_qu = Book.objects.all().filter(id=good_list[0])
    for i in range(1, len(good_list)):
        books_qu = books_qu | Book.objects.all().filter(id=good_list[i])
    # print(type(books_qu))
    return books_qu
# rec(1)




5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!对于基于Python协同过滤算法的二手车推荐系统设计实现,我可以给您一些指导。首先,协同过滤是一种常用的推荐算法,它基于用户行为和兴趣相似性来进行推荐。 以下是一个简单的二手车推荐系统设计实现步骤: 1. 数据收集:收集二手车的相关数据,包括车辆信息、用户评价和行为数据等。可以通过爬取汽车交易平台或者使用已有的数据集。 2. 数据预处理:对收集到的数据进行清洗和预处理。包括去除重复数据、缺失值处理、异常值处理等。 3. 相似度计算:使用协同过滤算法计算车辆之间的相似度。常用的相似度计算方法包括基于用户的协同过滤和基于物品的协同过滤。 - 基于用户的协同过滤:通过计算用户之间的相似度来推荐给用户相似用户喜欢的车辆。 - 基于物品的协同过滤:通过计算车辆之间的相似度来推荐给用户相似车辆。 4. 推荐生成:根据计算得到的相似度进行推荐生成。可以使用不同的推荐策略,如基于邻居的推荐、基于模型的推荐等。 5. 推荐结果展示:将生成的推荐结果展示给用户,可以通过一个网页界面或者移动应用来实现用户交互。 在具体实现过程中,可以使用Python中的数据处理和机器学习库,如Pandas、NumPy和Scikit-learn等。协同过滤算法的实现可以使用Python推荐系统库,如Surprise和LightFM等。 希望以上信息对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值