基于Python的招聘推荐与薪资预测系统的设计与实现

发布于:2022-11-09 ⋅ 阅读:(10) ⋅ 点赞:(0) ⋅ 评论:(0)

🔥作者:雨晨源码🔥
💖简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作💖
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻
Java精彩实战毕设项目案例
小程序精彩项目案例
Python实战项目案例

​💕💕文末获取源码


本次文章主要是介绍基于Python的招聘推荐与薪资预测系统的功能

摘要

      现如今,随着互联网的发展,人们获取信息的方式也各有不同。以前的传统方式的信息流与电视,报纸,书籍,信件,等等,因为互联网的使用,现在的互联网媒体已经成为人们获取信息的最重要来源。更新互联网,让人们得到最新、最完整的信息变得越来越容易。
      随着计算机存储能力的提升和复杂算法的发展,近年来数据量呈指数级发展。各行各业的决策正从“业务驱动”转变为“数据驱动”。我们应该利用大数据的海量处理与智能分析能力,准确抓取时代热点数据。当今,迫切需要一种高效率、分析系统。
      在此基础上本文重点分析了基于python的招聘数据分析可视化系统的设计,以及设计过程中的技术线路。本程序使用python编写,基于flask的轻量级web应用框架,数据库采用mysql设计,百度echarts进行数据可视化显示。数据爬取使用经典的requests、urllib包进行数据爬取,爬取的网站为boss直聘网,boss直聘网有较强的反爬机制,采用cookie的形式进行封装,再进行数据获取。获取的数据解析后存储到mysql数据库,然后使用pymysql包连接mysql将查询的数据展示到页面。

一 绪论

1.1 背景以及现状

当今社会,随着互联网的发展,人们获取信息的途径也是多种多样。其中,智能手机也是迎来发展的黄金时期;智能手机在人们的生活中扮演越来重要的角色。人们可以通过手机与人交流,通过手机软件进行学习,手机代缴物业费,手机团购等等,大大缩短了工作时间,提高了办事效率,也极大的丰富了人们的社会生活。
企业之间的竞争,归根到底是人才的竞争。能否招聘并选拔出合适的员工使得企业拥有富于竞争力的人力资本是一个企业兴衰的关键。随着互联网技术的发展和普及,网络招聘已成为一种越来越普遍的招聘模式。网络招聘的全天候、即时性,大大提高了招聘工作的速度和效率,使招聘企业可以在短时间内寻获到所需的人才。网络招聘是基于互联网的人力资源外部招聘渠道。网络招聘既有因为网络技术的应用而独创的招聘渠道一专业招聘网站,又将传统招聘渠道与网络技术很好的融合,成为众多传统招聘渠道的工具,通过互联网接收简历,改变了传统招聘渠道的工作模式。但是现在网络招聘还存在信息真实性和可信度等方面的问题,网络作为虚拟世界,欺骗、上当等现象在招聘时时有发生。
虽然国内的招聘网站以及其他也有发布招聘信息的平台众多,但是企业或用人单位在发布招聘信息时一般最多只会选择3到5个平台进行信息发布,因此导致的结果就是招聘信息太过分散,且一般招聘网站的检索功能有限,比如每次检索只能定位在一个城市,不能同时定位多个城市。
因此,当下迫切需要一个能够把尽可能多的招聘信息整合到一起的平台,且该平台还要提供更强大的统计功能,这样用户就可以通过该平台来进行招聘信息的检索,在短时间内就能够获取到大量的招聘信息和统计信息,从而使求职者可以更快找到心仪的工作。
目前,基于网络爬虫的招聘职位可视化系统在国内外比较少见,有提供该平台的主要是搜索引擎公司如百度、谷歌等。但是大多数只能够做到对招聘信息的模糊搜索,不能做到对招聘信息的统计。另外因为招聘网站的招聘信息在未经允许的情况下是不能随意转载与发布的,因此基于Python的招聘职位可视化系统目前还没有比较成功的案例。

1.2 研究意义

数据采集是市场研究的重要组成部分,同样因为是进行科学性数据分析的基础。采集数据的准确性直接关系到数据分析结果的价值,所以科学的数据采集方法将是数据分析师分析的前提。
长期以来关于投资数据分析的理论以日趋成熟,但原始数据获取方法一直是困惑许多投资数据分析人员的屏障。很多数据分析师的工作中,由于数据采集工作没有真正的开展,而使市场研究工作流于形式,形成了空话加套话的报告模式。使人对于科学的数据分析工作的误解越来越深,导致决策的依据严重不足。因此我们需要重视是市场研究的重要性,有认识到它对于投资、运营、生产、销售、产品价格等等重大而深远的意义,我们要基于严谨而科学的数据采集工作来切实开展采集市场研究工作。
随着互联网时代的不断发展,各行各业的数据都呈现极为夸张的增长态势,面对毕业找工作,网上有形形色色招聘网站,招聘信息也参差不齐,这给毕业生如何根据自生情况选择自己适合的职业带来了困难。
本人想设计一个网站,爬取各大招聘网站信息,然后将这些信息综合,方便同学们可以通过选择学历和想要的招聘职位来选择查看相应招聘信息。同时将这些信息可视化,方便同学们快速了解公司需求情况(可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况),同时还可以根据自身情况选择预测一下最低薪资。

1.3 论文整体结构

第一章主要介绍本网站的课题背景以及相关主要内容,让阅读本文的用户有一个大概的了解,对本系统做出最详细的介绍,让人们可以从认知到达喜欢这样的一个层次的提升,那么我们的任务几乎完成了一半。
第二章主要介绍是网站应用在设计时所使用的软件以及平台背景,和介绍这些相关软件以及平台,在相比其他的软件以及平台都具备哪些优势,这样能够使用户明白设计本网站的目的;需求分析与可行性分析是比不可少的部分,需求分析方面先要对应用需求进行分析,运行需求方面只需具备基本的硬软件即可,不做其它要求;对于其他需求,我们要对系统的安全性进行分析,可以随时检测系统的不稳定因素,另外需要注意的是在费用与时间上,用有限的资源将系统最大利益化。
第三章:是主要介绍网站在设计的一些框架,采用的技术以及我在设计本网站时的一个总体思路,这样能够方便用户更加深入的了解我的设计方法,了解这些方法的优势来源,还有所用技术直接的联系,怎样的配合使得系统完整的运行出预期的结果。
第四章主要介绍本网站的关键的细致开发设计,包括全部的设计方法关于数据库表以及当时的思绪,也有我在开发时碰见的较多难懂点,还有我怎样解决此类难点的。
第五章是向用户展示了网站的一些设计界面和具体功能的描述,这样就能够使得用户能彻底了解本网站的相关细节。就是对系统的各种功能的于细节的详细演示与介绍。包含我的网站首页,以及其他几个功能模块的实现,具体第五章会有细致的贴图介绍说明。
第六章是程序代码的一些检测与调节部分,这将会影响到系统是能否成功的运行,以及它的功能是否健全的一部分所必须的考察手段。具体又分为了程序的调试以及测试,在调试这个方面来说,我们每个人都会在编程是犯错,比如语句上的语法错误,这都是不可避免的。当你错误时能及时提醒你改正,这些隐藏性不高的错误可以很快发现,当然了对于另外一些躲藏严实的在检查时比较麻烦。而我们所说的软件测试在软件生命周期里有着很高的地位,如果近早一些的发现错误将会降低很多损失。

二 需求分析与技术分析

2.1 需求分析

      随着互联网时代的不断发展,各行各业的数据都呈现极为夸张的增长态势,面对毕业找工作,网上有形形色色招聘网站,招聘信息也参差不齐,这给毕业生如何根据自生情况选择自己适合的职业带来了困难。
本人想设计一个网站,爬取各大招聘网站信息,然后将这些信息综合,方便同学们可以通过选择学历和想要的招聘职位来选择查看相应招聘信息。同时将这些信息可视化,方便同学们快速了解公司需求情况(可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况),同时还可以根据自身情况选择预测一下最低薪资。系统功能需求如下:
      1、首页数据展示:岗位信息数量、行业平均薪资、行业最低薪资、行业最高薪资、学历与薪资统计、整体学历要求、城市平均待遇树状图、福利待遇、热门岗位等数据的可视化展示。
      2、数据概况:开发岗位分类非开发岗位分类的详细信息展示,根据关键条件进行薪资预测、岗位匹配。可以选择学历要求、输入职位来搜索更加精准的职位。
      3、可视化:
薪资情况:通过选择学历来查看各种岗位对于不同学历的薪资可视化情况,以柱状图、饼图的形式来展示各种职位的薪资分布、所占比例。
企业情况:通过选择职位可以来查看这个职位的主要招聘城市,还可以大概查看一下这个职位的公司规模情况,以及每个职位在各个主要城市所占的比例饼图。
学历情况:可以查看各个职位对学历以及工作经验的要求,以漏斗图、矩形树的形式进行可视化展示。
      4、智能化
薪资预测:可以通过选择职位学历公司规模城市工作经验,以及选择不同的模型来,预测最低薪资。
职位匹配:可以通过选择职位学历公司规模城市工作经验,以及选择不同的模型来,筛选最符合的职位信息。

2.2 技术分析

      本程序使用python编写,基于flask的轻量级web应用框架,数据库采用mysql设计,百度echarts进行数据可视化显示。数据爬取使用经典的requests、urllib包进行数据爬取,爬取的网站为boss直聘网,boss直聘网有较强的反爬机制,采用cookie的形式进行封装,再进行数据获取。获取的数据解析后存储到mysql数据库,然后使用pymysql包连接mysql将查询的数据展示到页面。
·开发环境 pycharm
·数据库:Mysql
·操作系统 Win7,Win8,Win10 等主流的操作系统
·硬件环境:要求服务器内存不少于4G,硬盘空间 40G 以上

三 系统的功能设计

本程序使用python编写,基于flask的轻量级web应用框架,数据库采用mysql设计,百度echarts进行数据可视化显示。数据爬取使用经典的requests、urllib包进行数据爬取,爬取的网站为boss直聘网,boss直聘网有较强的反爬机制,采用cookie的形式进行封装,再进行数据获取。获取的数据解析后存储到mysql数据库,然后使用pymysql包连接mysql将查询的数据展示到页面。系统提供了如下功能:
1、首页数据展示:岗位信息数量、行业平均薪资、行业最低薪资、行业最高薪资、学历与薪资统计、整体学历要求、城市平均待遇树状图、福利待遇、热门岗位等数据的可视化展示。
2、数据概况:开发岗位分类非开发岗位分类的详细信息展示,根据关键条件进行薪资预测、岗位匹配。可以选择学历要求、输入职位来搜索更加精准的职位。
3、可视化:
薪资情况:通过选择学历来查看各种岗位对于不同学历的薪资可视化情况,以柱状图、饼图的形式来展示各种职位的薪资分布、所占比例。
企业情况:通过选择职位可以来查看这个职位的主要招聘城市,还可以大概查看一下这个职位的公司规模情况,以及每个职位在各个主要城市所占的比例饼图。
学历情况:可以查看各个职位对学历以及工作经验的要求,以漏斗图、矩形树的形式进行可视化展示。
4、智能化
薪资预测:可以通过选择职位学历公司规模城市工作经验,以及选择不同的模型来,预测最低薪资。
职位匹配:可以通过选择职位学历公司规模城市工作经验,以及选择不同的模型来,筛选最符合的职位信息。

四 系统的实现

4.1 数据爬虫

本程序数据爬取使用经典的requests、urllib包进行数据爬取,爬取的网站为boss直聘网,boss直聘网有较强的反爬机制,采用cookie的形式进行封装,再进行数据获取。数据爬取的过程如下:
在这里插入图片描述

4.2 数据获取页面

系统获取的数据解析后存储到mysql数据库,然后使用pymysql包连接mysql将查询的数据展示到页面。爬取数据展示页面如下:
在这里插入图片描述

4.3 招聘数据可视化

企业数据展示:通过选择职位可以来查看这个职位的主要招聘城市,还可以大概查看一下这个职位的公司规模情况,以及每个职位在各个主要城市所占的比例饼图。如下所示:
在这里插入图片描述

4.4 薪资数据可视化页面

薪资情况:通过选择学历来查看各种岗位对于不同学历的薪资可视化情况,以柱状图、饼图的形式来展示各种职位的薪资分布、所占比例。如下所示:
在这里插入图片描述

4.5 薪资预测页面

薪资预测:可以通过选择职位学历公司规模城市工作经验,以及选择不同的模型来,预测最低薪资。
在这里插入图片描述

五 代码展示

1.爬虫代码【代码如下(示例):】

# 建立数据库链接
    def __init__(self):
        self.connect = pymysql.connect(host="127.0.0.1",
                                       port=3306,
                                       user="root",
                                       password="root",
                                       database="spiderdatabase",
                                       charset="utf8")
        self.cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)

    # 关闭链接
    def __del__(self):
        self.connect.close()
        self.cursor.close()

    # 中位数计算
    @staticmethod
    def __medianCalculation(data: dict):
        dataList = []
        if data is not None:
            for var in data:
                dataList.append(var['avg_salary'])
            return numpy.median(dataList)
        return None

    # 岗位名称、职业技能合理性检测
    def __reasonableCheck(self, name, skill: list):

        sql = '''
                select num from handled_data
                where name like %s
                and(skill like %s or skill like %s or skill like %s or skill like %s or skill like %s)
            '''
        try:
            result = self.cursor.execute(sql, (name, skill[0], skill[1], skill[2], skill[3], skill[4]))
            self.connect.commit()
            if result == 0:
                return False
            else:
                return True
        except Exception as e:
            self.connect.rollback()
            print(">>>读取数据失败 执行MySQL: {} 时出错:{}", e)

    @staticmethod
    # 获取查询语句

2.可视化报表【代码如下(示例):】

<!-- Sidebar -->
       <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">

           <!-- Sidebar - Brand -->
           <a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.html">
               <div class="sidebar-brand-icon rotate-n-15">
                   <i class="fas fa-laugh-wink"></i>
               </div>
               <div class="sidebar-brand-text mx-3">KOISHI <sup>数据平台</sup></div>
           </a>

           <!-- Divider -->
           <hr class="sidebar-divider my-0">

           <!-- Nav Item - Dashboard -->
           <li class="nav-item active">
               <a class="nav-link" href="index.html">
                   <i class="fas fa-fw fa-tachometer-alt"></i>
                   <span>首页</span></a>
           </li>

           <!-- Divider -->
           <hr class="sidebar-divider">

           <!-- Heading -->
           <div class="sidebar-heading">
               POPULAR JOBS
           </div>

           <!-- Nav Item - Pages Collapse Menu -->
           <li class="nav-item">
               <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo"
                   aria-expanded="true" aria-controls="collapseTwo">
                   <i class="fas fa-fw fa-cog"></i>
                   <span>开发岗</span>
               </a>
               <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
                   <div class="bg-white py-2 collapse-inner rounded">
                       <h6 class="collapse-header">Development</h6>
                       <a class="collapse-item" href="java.html">Java</a>
                       <a class="collapse-item" href="python.html">Python</a>
                       <a class="collapse-item" href="c.html">C/C++</a>
                       <a class="collapse-item" href="c23.html">C#/.net</a>
                       <a class="collapse-item" href="u3d-ue.html">unity3D/UE</a>
                       <a class="collapse-item" href="php.html">PHP</a>
                       <a class="collapse-item" href="web.html">web前端</a>
                       <a class="collapse-item" href="ios.html">IOS</a>
                       <a class="collapse-item" href="android.html">Android</a>
                   </div>
               </div>
           </li>

           <!-- Nav Item - Utilities Collapse Menu -->
           <li class="nav-item">
               <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities"
                   aria-expanded="true" aria-controls="collapseUtilities">
                   <i class="fas fa-fw fa-wrench"></i>
                   <span>非开发岗</span>
               </a>
               <div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities"
                   data-parent="#accordionSidebar">
                   <div class="bg-white py-2 collapse-inner rounded">
                       <h6 class="collapse-header">Non-development</h6>
                       <a class="collapse-item" href="algorithm.html">算法工程师</a>
                       <a class="collapse-item" href="test.html">测试工程师</a>
                       <a class="collapse-item" href="oam.html">运维工程师</a>
                   </div>
               </div>
           </li>
           <!-- Divider -->
           <hr class="sidebar-divider">

           <!-- Heading -->
           <div class="sidebar-heading">
               DATA ANALYSIS
           </div>

           <!-- Nav Item - Pages Collapse Menu -->
           <li class="nav-item">
               <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages"
                   aria-expanded="true" aria-controls="collapsePages">
                   <i class="fas fa-fw fa-folder"></i>
                   <span>分析</span>
               </a>
               <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
                   <div class="bg-white py-2 collapse-inner rounded">
                       <h6 class="collapse-header">Tools</h6>
                       <a class="collapse-item" href="salary-speculate.html">薪资推测</a>
                       <a class="collapse-item" href="job-speculate.html">岗位匹配</a>
                   </div>
               </div>
           </li>

六 结语(文末获取源码)

      在本次设计中,我选择了招聘数据分析可视化系统开发设计与实现作为自己的毕计题目。从选题,设计,开发到最后的顺利完成,我可以说学到了很多。在刚开始选题时,心中是比较紧张的,由于对招聘数据的了解很少,很怕自己难以完后好。但是在制作毕业设计的紧张激烈和忙乱的几个月,我有机会做专业的基本理论,从而实现了学以致用。以前我们也有过一些设计的体会,但只不过是设计了一个的模块或一个小系统,而此次的设计则是将所学到的计算机的知识和管理类的知识加以综合来设计出一个适合运行管理的招聘数据采集分析网站系统。要想设计使用户满意,就需要我们付出更多的努力。由于自身的技术不是很硬,我在设计中经常出现一些问题不知该如何解决,在此时指导老师和许多同学给予了我帮助。在感觉上以为页面的设计较为简单,但在实际操作中,麻烦并不少。正因为如此,我不断的充实自己,在设计的过程中增加了于实际接触的机会,不仅培养了我的自学和编程能力,让我在即将离开学校进入社会之前有了一定的资本,提高了我与人沟通的能力。
虽然在这次毕业设计中已经获得了小小的成功,但是现如今用户的需求又在不断变更,难度也在加大着,当在不断的提升着软件设计的技术和随着时间的流逝,在接下来的开发中丰富和完善系统都是很有必要的,以下三个方面具体的说明了我对本次设计开发的项目构想展望:
      1.系统通用性的问题
目前我们可以通过本系统基本实现招聘数据采集分析网站建设。方便人们了解企业信息。
      2.与其他部门系统相对接的问题
如何将招聘数据采集分析网站系统与其他商业网站工作等相关系统进行有效的对接,实现信息的共享也是今后开发的重点。

💕💕
Java精彩实战毕设项目案例
小程序精彩项目案例
Python实战项目集
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。