毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档

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

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

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

1、项目介绍

技术栈:
Python、Django框架、MySQL数据库、基于物品的协同过滤推荐算法、
Selenium爬虫库

2、项目界面

(1)系统首页
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第1张图片

(2)算法推荐模块(协同过滤推荐算法)毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第2张图片

(3)职位柱状图分析
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第3张图片

(4)学历要求分析饼状图
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第4张图片

(5)招聘信息数据列表
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第5张图片

(6)数据采集页面
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第6张图片

(7)注册登录界面
毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第7张图片

(8)配套文档

毕业设计:Python招聘推荐系统(爬虫+清洗+可视化+算法)源码+文档_第8张图片

3、项目说明

本系统以Python计算机设计语言为基础,使用 Selenium对猎聘网的招聘就业信息源进行抓取,针对网页信息编写抽取规则,对招聘就业信息进行必要的过滤和提取,使用MySql对招聘就业信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建,结合协同过滤算法基于职位信息完成对用户的招聘职位信息推荐,完成整个爬取以及数据检索到成功进行职位推荐的网页端操作展示。

django协同过滤算法的招聘推荐系统是一种基于django框架开发的用于帮助企业快速找到合适人才的智能推荐系统。该系统利用协同过滤算法,通过分析用户的历史行为和偏好,为企业提供个性化的招聘推荐。

该系统主要包括以下几个模块:

  1. 用户管理模块:用户可以注册、登录和管理个人信息,包括教育背景、工作经验和技能等。

  2. 职位管理模块:企业可以发布招聘职位,并设置职位的详细要求和福利待遇等信息。

  3. 数据收集模块:系统通过收集用户的浏览记录、职位投递记录和面试结果等数据,建立用户-职位的关联关系。

  4. 推荐算法模块:系统利用协同过滤算法,根据用户的历史行为和偏好,计算出与用户兴趣相似的职位,并进行推荐。

  5. 推荐结果展示模块:系统将推荐的职位结果展示给用户,用户可以查看职位详情并进行投递或收藏。

  6. 反馈与评价模块:用户可以对推荐结果进行反馈和评价,系统通过用户反馈的数据不断优化推荐算法。

通过该系统,企业可以减少招聘时间和成本,同时提高招聘效率和人才匹配度。用户也能够更快速地找到符合自己兴趣和能力的职位,提升就业机会和职业发展。

4、部分代码


#!/usr/bin/python3.9.10
# -*- coding: utf-8 -*-
# @Time    : 2023/2/18 9:41
# @File    : job_recommend.py
import os

os.environ["DJANGO_SETTINGS_MODULE"] = "JobRecommend.settings"
import django

django.setup()
from job import models
from math import sqrt, pow
import operator
from django.db.models import Subquery, Q, Count
import random


# 计算相似度
def similarity(job1_id, job2_id):
    job1_set = models.SendList.objects.filter(job=job1_id)
    # job1的投递用户数
    job1_sum = job1_set.count()
    # job2的打分用户数
    job2_sum = models.SendList.objects.filter(job=job2_id).count()
    # 两者的交集
    common = models.SendList.objects.filter(user__in=Subquery(job1_set.values('user')), job=job2_id).values('user').count()
    # 没有人投递当前职位
    if job1_sum == 0 or job2_sum == 0:
        return 0
    similar_value = common / sqrt(job1_sum * job2_sum)  # 余弦计算相似度
    return similar_value


# 基于物品的协同过滤推荐算法
def recommend_by_item_id(user_id, k=9):
    # 投递简历最多的前三keyword
    jobs_id = models.SendList.objects.filter(user_id=user_id).values('job_id')  # 先找出用户投过的简历
    print(jobs_id)
    key_word_list = []  # 找出用户投递的职位关键字
    for job in jobs_id:
        key_word_list.append(models.JobData.objects.get(job_id=job['job_id']).key_word)
    print(key_word_list)
    key_word_list_1 = list(set(key_word_list))
    user_prefer = []
    for key_word in key_word_list_1:
        user_prefer.append([key_word, key_word_list.count(key_word)])
    user_prefer = sorted(user_prefer, key=lambda x:x[1], reverse=True)  # 排序
    user_prefer = [x[0] for x in user_prefer[0:3]]  # 找出最多的3个投递简历的key_word
    print(user_prefer)
    current_user = models.UserList.objects.get(user_id=user_id)
    # 如果当前用户没有投递过简历,则看是否选择过意向职位,选过的话,就从意向中找,没选过就随机推荐
    if current_user.sendlist_set.count() == 0:
        if current_user.userexpect_set.count() != 0:
            user_expect = list(models.UserExpect.objects.filter(user=user_id).values("key_word", "place"))[0]
            # print(user_expect)
            job_list = list(models.JobData.objects.filter(name__icontains=user_expect['key_word'], place__icontains=user_expect['place']).values())  # 从用户设置的意向中选
            job_list = random.sample(job_list, 9)  # 随机9个推荐
            # print(job_list)
        else:
            job_list = list(models.JobData.objects.all().values())  # 从全部的职位中选
            # job_list = random.sample(job_list, 9)  # 随机9个推荐
        # print('from here')
        # print(job_list)
        return job_list
    # # most_tags = Tags.objects.annotate(tags_sum=Count('name')).order_by('-tags_sum').filter(movie__rate__user_id=user_id).order_by('-tags_sum')
    # 选用户投递简历最多的职位的标签,再随机选择30个没有投递过的简历的职位,计算距离最近
    un_send = list(models.JobData.objects.filter(~Q(sendlist__user=user_id), key_word__in=user_prefer).order_by('?').values())[:30]  # 没有投过的简历
    # un_send = random.sample(un_send, 30)
    # print(un_send)
    send = []  # 找出用户投递的职位关键字
    for job in jobs_id:
        send.append(models.JobData.objects.filter(job_id=job['job_id']).values()[0])
    # print(send)
    distances = []
    names = []
    # 在未投过的简历的职位中找到
    for un_send_job in un_send:
        for send_job in send:
            if un_send_job not in names:
                names.append(un_send_job)
                distances.append((similarity(un_send_job['job_id'], send_job['job_id']) * send_job['job_id'], un_send_job))  # 加入相似的职位列表
    distances.sort(key=lambda x: x[0], reverse=True)
    # print('this is distances', distances[:15])
    recommend_list = []
    for mark, job in distances:
        if len(recommend_list) >= k:
            break
        if job not in recommend_list:
            recommend_list.append(job)
    # print('this is recommend list', recommend_list)
    # 如果得不到有效数量的推荐 按照未投递的简历中的职位进行填充
    print('recommend list', recommend_list)
    return recommend_list


if __name__ == '__main__':
    # similarity(2003, 2008)
    recommend_by_item_id(1)


源码获取:

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

大家点赞、收藏、关注、评论啦 、查看获取联系方式

你可能感兴趣的:(biyesheji0001,毕业设计,biyesheji0002,课程设计,python,爬虫,毕业设计,大数据,求职招聘,招聘推荐系统)