基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅

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

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

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

1、项目介绍

(1)后端技术栈(python):
- Django框架 - django-simpleui 后台ui框架 - mysql 数据库

(2)前端技术栈(nodejs+vue3):
- vue框架 - element-plus vue3组件库 - element-plus-admin 页面框架 - postcss 样式后处理 - tailwindcss 样式库 - vite 打包工具 - typescript 强类型的js

(3)数据爬虫(python):
- scrapy 爬虫框架 - requests 轻量爬虫工具 - xpath 页面数据抽取

(4)推荐算法: 采用协同过滤推荐算法

京东商品推荐系统是基于协同过滤推荐算法构建的系统。协同过滤是一种常用的推荐算法,它通过分析用户的行为数据和商品的特征,找出用户之间的相似性,从而推荐给用户可能感兴趣的商品。

在京东商品推荐系统中,用户可以通过浏览、购买、评价等行为产生个人行为数据。系统会收集这些数据,并对用户进行分类和相似度计算。通过比较用户之间的相似度,系统可以找到与当前用户兴趣相似的其他用户。然后根据这些相似用户的行为数据,推荐给当前用户可能感兴趣的商品。

2、项目界面

(1)系统首页

基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅_第1张图片

(2)商品详情页

基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅_第2张图片

(3)购物车功能

基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅_第3张图片

(4)推荐模块

基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅_第4张图片

(5)后台数据管理

基于python商品推荐系统 协同过滤推荐算法+爬虫(附源码) 毕业设计 大数据✅_第5张图片

3、项目说明

京东商品推荐系统是基于协同过滤推荐算法构建的系统。协同过滤是一种常用的推荐算法,它通过分析用户的行为数据和商品的特征,找出用户之间的相似性,从而推荐给用户可能感兴趣的商品。

在京东商品推荐系统中,用户可以通过浏览、购买、评价等行为产生个人行为数据。系统会收集这些数据,并对用户进行分类和相似度计算。通过比较用户之间的相似度,系统可以找到与当前用户兴趣相似的其他用户。然后根据这些相似用户的行为数据,推荐给当前用户可能感兴趣的商品。

为了提高推荐的准确性和个性化程度,京东商品推荐系统还可以结合用户的个人信息、购买历史、浏览记录等进行综合分析。系统会根据用户的特征和偏好,给出更加精准的商品推荐。

京东商品推荐系统的目标是提供给用户个性化的、高质量的商品推荐,以增加用户的购买率和满意度。通过不断优化算法和数据分析,系统可以不断提升推荐的准确性和用户体验,为用户提供更好的购物体验。

4、核心代码

from .models import *
import json
from django.http.response import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
from datetime import datetime, time
from django.core.paginator import Paginator
from django.db.models import Q
import simplejson
from collections import Counter
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Map, Grid, Bar, Line, Pie, TreeMap, WordCloud
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.options.charts_options import MapItem
from django.db.models import Q, Count, Avg, Min, Max
from pyecharts.globals import SymbolType
from .recommend import collaborative_filtering_recommend


def to_dict(l, exclude=tuple()):
    # 将数据库模型 变为 字典数据 的工具类函数
    def transform(v):
        if isinstance(v, datetime):
            return v.strftime("%Y-%m-%d %H:%M:%S")
        return v

    def _todict(obj):
        j = {
            k: transform(v)
            for k, v in obj.__dict__.items()
            if not k.startswith("_") and k not in exclude
        }
        return j

    return [_todict(i) for i in l]


def get_list(request):
    # 商品列表
    body = request.json
    pagesize = body.get("pagesize", 10)
    page = body.get("page", 1)
    orderby = body.get("orderby", "-id")
    notin = ["pagesize", "page", "total", "cateName", "orderby", "id__ne"]
    query = {
        k: v for k, v in body.items() if k not in notin and (v != "" and v is not None)
    }
    q = Q(**query)
    objs = Product.objects.filter(q).order_by(orderby)
    if body.get("id__ne"):
        objs = objs.exclude(id=body["id__ne"])
    breadcrumb = []
    for i in range(1, 4):
        cat = query.get(f"cat{i}")
        if cat:
            breadcrumb.append(cat)
    cateNames = []
    if not query.get("cat1"):
        cateNames = [
            i[0] for i in Product.objects.filter(q).values_list("cat1").distinct()
        ]
    elif not query.get("cat2"):
        cateNames = [
            i[0] for i in Product.objects.filter(q).values_list("cat2").distinct()
        ]
    elif not query.get("cat3"):
        cateNames = [
            i[0] for i in Product.objects.filter(q).values_list("cat3").distinct()
        ]
    paginator = Paginator(objs, pagesize)
    pg = paginator.page(page)
    result = to_dict(pg.object_list)
    return JsonResponse(
        {
            "total": paginator.count,
            "result": result,
            "cateNames": cateNames,
            "breadcrumb": breadcrumb,
        }
    )


def get_detail(request):
    # 商品详情
    body = request.json
    id = body.get("id")
    o = Product.objects.get(pk=id)
    his = (
        ProductHistory.objects.filter(userId=request.user.id)
        .order_by("-createTime")
        .first()
    )
    if not (his and his.productId == o.id):
        ProductHistory(userId=request.user.id, productId=o.id).save()
    return JsonResponse(to_dict([o])[0])


def history_recommand(request):
    topK = 9
    try:
        produces = collaborative_filtering_recommend(request.user.id, topK)
    except:
        productIds = (
            ProductHistory.objects.filter(userId=request.user.id)
            .values_list("productId")
            .order_by("-id")
            .distinct()
        )[:5]
        produces = []
        # 根据历史查看记录推荐
        if productIds:
            productIds = [i[0] for i in productIds]
            cates = [
                i[0]
                for i in Product.objects.filter(id__in=productIds).values_list("cat3")
            ]
            most_common_cates = list(dict(Counter(cates).most_common(2)).keys())
            produces = Product.objects.filter(cat3__in=most_common_cates).order_by("?")[
                :topK
            ]
        # 没有记录则随机推荐
        else:
            produces = Product.objects.order_by("?")[:topK]
    return JsonResponse(to_dict(produces), safe=False)


def make_order(request):
    # 新增订单
    data = request.json
    o = Order.objects.create(
        userId=request.user.id,
        name=data.get("name"),
        phone=data.get("phone"),
        address=data.get("address"),
        remark=data.get("remark"),
        price=float(data.get("price")),
        total=int(data.get("total")),
        products=json.loads(data.get("products")),
    )
    return JsonResponse({"ok": o.id})


def order_list(request):
    # 订单列表
    data = request.json
    not_q = ("total", "page", "pagesize", "orderby")
    pagesize = data.get("pagesize", 12)
    page = data.get("page", 1)
    orderby = data.get("orderby", "-id")
    params = {k: v for k, v in data.items() if k not in not_q and v}
    params_q = Q(userId=request.user.id)
    for item in params.items():
        params_q &= Q(**dict([item]))
    objs = Order.objects.filter(params_q).order_by(orderby).all()
    pg = Paginator(objs, pagesize)
    page = pg.page(page)
    object_list = page.object_list
    for i in object_list:
        products = eval(i.products)
        i.products = eval(i.products)
        # 取出订单包括的所有商品
        i.product_list = to_dict(Product.objects.filter(id__in=list(products.keys())))
    return JsonResponse({"total": pg.count, "result": to_dict(object_list)})




5、源码获取方式

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

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

你可能感兴趣的:(毕业设计,biyesheji0001,biyesheji0002,python,推荐算法,爬虫,大数据,毕业设计,商品推荐,推荐系统)