【大数据毕设】基于Hadoop的招聘网站可视化的设计与实现(一)

博主介绍全网粉丝6W+,csdn特邀作者、博客专家、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于大数据技术领域和毕业项目实战

🍅文末获取项目联系🍅

基于Hadoop的招聘网站可视化的设计与实现

摘要:现在,随着互联网网络的飞速发展,人们获取信息的最重要来源也由报纸、电视转变为了互联网。互联网的广泛应用使网络的数据量呈指数增长,让人们得到了更新、更完整的海量信息的同时,也使得人们在提取自己最想要的信息,过滤掉对自己无用的信息时变得不那么容易,对于应聘者也是如此。由于招聘网站的日益流行,也使得应聘网站成为了应聘者找工作的主要平台。在面对着大量的招聘信息时,就业者不能一目了然的获取自己想要的招聘信息,因此我们需要对海量的招聘数据进行处理,做出一种招聘信息的分析系统。在此基础上本文介绍了基于Hadoop的招聘网站的可视化的设计与分析过程中的技术线路。

本招聘网站的可视化使用Hadoop语言编写,使用基于SpringBoot的Web应用框架,数据库使用MySQL,使用ECharts进行数据可视化部分的显示。对数据的爬取使用的Requests进行爬取数据,本次爬取的招聘网站为拉勾网搜索关键词为Java、Hadoop、大数据的招聘信息,拉勾网具有较强的反爬虫机制,采用Cookie形式进行封装,再进行数据的获取。在MySQL数据库中存储爬取的招聘信息,用Pymysql包连接MySQL数据库将查询的数据使用ECharts框架展示到网页。

通过本系统可以用户可以了解到职位的信息概况、薪资分布情况、企业主要招聘城市情况和企业的规模分布、职位的福利待遇和对应聘者的学历要求,工作经验的要求。

关键词:Hadoop;数据可视化;招聘网站

Design and Implementation of Recruitment Website Crawler and Visualization Based on Hadoop

Abstract: Nowadays, with the rapid development of the Internet, the most important source for people to obtain information has been changed from newspapers and TV to the Internet. The extensive application of the Internet makes the amount of data on the Network grow exponentially, and makes it difficult for people to extract the information they want most and filter out the useless information, even for the applicants. Recruitment websites have become the main platform for job seekers due to their growing popularity. In the face of a large number of recruitment information, the employment can not get the recruitment information they want at a glance, so we need to process the massive recruitment data, to make a recruitment information analysis system. On this basis, this paper introduces the process of visualization design and analysis of the recruitment website based on Hadoop.

The visualization of this recruitment website is written using Hadoop language, using Web application framework based on SpringBoot, using MySQL database, using ECharts for data visualization part of the display. Data was crawled using Requests. The recruitment website that was crawled this time searched for recruitment information with keywords of Java, Hadoop and big data on Pull Net. Pull net has a strong anti-crawler mechanism and uses Cookie to encapsulate and then obtain data. The recruitment information is stored in the MySQL database, and the Pymysql package is used to connect to the MySQL database to display the queried data to the web page using the ECharts framework.

Through this system, users can understand the information profile of the position, salary distribution, the main recruitment city of the enterprise and the size of the enterprise distribution, the position of welfare and the requirements of the applicant’s education, work experience requirements.

Keywords: Hadoop; Data Visualization; Recruitment Website

引 言

随着互联网的不断发展,网络招聘也更加普遍。招聘网站能使招聘者随时随地了解到招聘信息,同时提高企业招聘的速度。但是面对着大量的招聘信息,应聘者难以在很快的时间内找到适合自己的岗位,做出适合自己选择,也不能根据这些信息直观的看到应聘者比较关心的薪资状况分布,企业的主要招聘城市,公司福利和所要求的学历与经验等方面。因此,当下需要一个能够把招聘信息整合到一起并将信息可视化显示的系统,这样用户就可以通过该平台来进行查看招聘信息的薪资分布,企业福利,所在城市等,从而使求职者可以更快找到心仪的工作。

目前,基于网络爬虫的招聘职位可视化系统在国内外比较少见,有提供该平台的搜索引擎如百度、谷歌等。但是因为招聘网站的招聘信息不能够随意转载,并不能获取到全面的招聘信息,且做不到可视化的效果。因此基于Hadoop的招聘信息的可视化系统还没有比较成功的案例。

所以,本文通过对拉钩网Java、Hadoop、运营相关岗位的公司名称、招聘城市、岗位名称、薪资待遇等进行爬取,然后将招聘信息存入数据库,使用ECharts可视化图表将招聘信息以柱状图、折线图等形式展现出来,供用户个性化的获取信息。让计算机相关专业应聘者根据自身优势有选择性的应聘岗位。为广大的社会择业人员和初入社会的应届毕业生提供就业和学习的指导方向。

第1章 课题概述

由于近些年互联网的飞速发展,我们所生活的世界正在被数据所淹没,人们面对大量的数据需要从大量数据中快速地提取有效的自己需要的信息。对于求职者来说当查看招聘信息时也是这样,面对招聘网站展示的大量的职位信息,应聘者难以及时选出自己最想要的职位信息,又或者筛选出信息后不能直观地看到招聘所有信息的特征、规律、变化的趋势或者数据之间潜在联系。我们可以借助计算机技术来进行自动获取筛选分析自己想要的职位信息。本文对于基于Hadoop的招聘网站的可视化的课题研究就显得尤为重要了。

1.1 课题内容

该课题研究的是一种基于Hadoop的招聘网站的可视化的系统。在开发过程中利用Hadoop对招聘信息进行收集和分析。首先,在拉钩网站上爬取招聘信息,然后存入数据库,连接数据库将数据库中的招聘信息从地区、行业、专业、公司规模、要求经验、薪资待遇等维度进行数据分析。最后,利用ECharts可视化技术,将有效的数据展示给用户。

1.2 课题背景

近年来随着我国计算机水平的发展,计算机行业的热门,高校也都相继开设了相关课程,越来越多的计算机人才涌入社会,但市场中的一众岗位让人眼花缭乱,同时众多拥有丰富从业经验的从业者,名牌大学与普通院校毕业生共同竞争,致使很多社会中的求职者面临着就业的困扰,而如今的招聘网站信息多,想要获取有效的信息需要的时间太长。为了解决社会二次择业人员和高校应届毕业生获取符合自己的并符合自己意向的招聘岗位信息,利用Hadoop对这些招聘信息进行收集和分析势在必行。所以需要一种能够具有分析岗位优势,薪资分布等的系统,可供求职者利用自身优势,分析岗位信息,从而尽快找到心仪的岗位。

通过综合运用互联网数据爬虫技术和图表可视化库,对招聘网站的招聘信息进行爬取,并进行了相关统计分析,从地区、行业、薪酬、经验、岗位素质等方面进行综合分析。从而帮助计算机行业想从事Java、Hadoop、运营相关岗位的就业人员了解相关领域的岗位需求和薪资情况、企业招聘城市、招聘企业的规模和学历与工作经验要求等。从而为就业人员的快速选择岗位,在何处选择岗位提供参考,对未来的生活和工作、学习规划等明确方向。

1.3 课题意义

对于即将毕业找工作的应届生和社会择业人员来说,上网快速找到合适的工作,无疑是急需的。而如今的招聘网站信息多,面对着网上形形色色的招聘网站和参差不齐的招聘信息,想要获取有效的信息需要的时间太长,这给就业者根据自身的情况选择自己适合的职业带来了困难。针对以上不足,有必要通过爬虫技术,帮助求职者在杂乱无序的数据中寻找有用的数据,科学分析,缩短求职者找工作的时间成本,帮助求职者快速择业。

本系统爬取了拉勾网站的计算机语言相关多种招聘信息,同学们可以通过选择本身应对的学历和想要的招聘岗位来选择查看相应的招聘信息。同时将这些信息可视化,可以方便同学们快速了解公司需求情况,这些可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况。

1.4 运行环境

开发环境:IDEA、Nacicat、Google Chrome

关键技术:Java+JavaScript+SpringBoot+MyBatis+SQL

后台数据库:MySQL

开发环境运行平台:Windows 7/Windows10

1.5 相关技术

本项目是使用Hadoop语言开发编写。使用request包进行对招聘网站的数据爬取;用Pysql连接数据库,获取数据;使用Flask框架将数据返回给前端,用ECharts对数据进行可视化展示,使用Jieba分词将语句分开。

1.5.1 Python语言

Python是由其他多种语言发展而来的脚本语言。Python具有很强的可读性,比其他语言更容易上手,并跳过了编译的过程,不需要使用编译器。Python语言是交互式的,我们可以直接运行代码。Python支持面向对象的风格或者将代码封装在对象的编程技术,是一种面向对象的语言。Python语言非常适合新手学习,因此作为计算机学生,在步入大学后,专业课程学习的第一门课——以Python为主,可见Python对于初级程序员来说是一种伟大的分布式框架。

爬虫一般来说就是进行网络资源抓取,因为Python脚本特性,Python容易配置,对字符处理十分灵活,Python有着丰富网络抓取模板,让两者可以很好的链接在一起。对比其他静态编程语言来说,Python抓取网页文档接口更加简洁。抓住网页有时候需要模拟浏览器的行为,而Python具有很多第三方包。

1.5.2 Hadoop框架

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

此次运用hadoop的HDFS可以为海量的数据提供了存储的功能。

1.5.3 ECharts图表库

ECharts是一款使用JavaScript实现的开源的数据可视化图表库,可以提供直观的,可交互的数据可视化图表。本招聘网站的可视化系统使用ECharts做出薪资待遇的柱状图和饼图、折线图的分布展示,公司分布所在城市的饼状图展示,公司规模状况的柱状图和折线图的展示,对学历和工作经验要求的条状图和矩形树图的展示。ECharts通常数据设置在SetOption中,如果我们需要异步加载数据,可以配合 JQuery等工具,在异步获取数据后通过SetOption填入数据和配置项就行。

1.6 本章小结

本章主要介绍招聘信息的可视化在设计时所使用的软件Pycharm和Mysql以及平台背景,和介绍本次毕业设计所涉及到的一些技术和技术的相关内容并且阐述了课题意义,讨论了课题背景。为后面的招聘网站的爬虫与可视化系统的设计部分以及系统实现部分打下了坚实的理论基础。

第2章 系统设计

本招聘网站的可视化系统使用的是Hadoop语言编写,采用基于Flask的轻量级Web应用框架,招聘信息的存储数据库采用MySQL设计,使用ECharts进行招聘信息的数据可视化显示。

2.1 设计思想

首先使用Request爬取拉勾网网页,分析拉钩网网页,将内容进行解析后将招聘信息写入数据库,当我们需要查询信息时,需要连接数据库,将信息查询后读取并写入字典,使用ECharts框架,将数据传输到前端网页,以饼状图,柱状图,折线图等形式展示,让用户直观的看到招聘信息的地域,薪资,待遇等分布,让用户直观的获取到最关心的招聘信息。

2.2 需求分析

随着互联网时代的不断发展,各行各业的数据都呈现极为夸张的增长态势,面对毕业找工作,网上有形形色色的招聘网站,招聘信息也参差不齐,这给毕业生和二次择业人员如何根据自身情况选择自己适合的职业带来了困难。

本人想设计一个网站,爬取招聘网站的有关Java、Hadoop、运营这三种语言相关职位的信息,然后将这些信息综合,方便同学们可以通过选择学历和想要的招聘职位来选择查看相应招聘信息。同时将这些信息可视化,方便同学们快速了解公司需求情况,可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况。此系统的主要功能需求如下:

1.数据概况

爬取的所有有关Java、Hadoop、运营语言的岗位招聘数据都可以看到,也可以通过学历和职位来选择查看满足条件的招聘信息,可以选择学历要求、输入职位来搜索更加精准的职位。

2.可视化

薪资情况:通过选择学历来查看各种岗位对于不同学历的薪资可视化情况,以柱状图、饼图的形式来展示各种职位的薪资分布、所占比例,提供给用户在找工作是作为参考。

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

福利情况:通过数据可视化速览公司福利,基于词云进行构造,可以清晰看出所有公司给出的最核心的福利待遇。

学历情况:可以查看各个职位对学历以及工作经验的要求,以条形图、矩形树的形式进行可视化展示。

2.3 系统可行性分析

对于本系统可行性的分析主要从与系统开发和实际生活息息相关的技术、经济、社会三方面进行分析。

1.技术可行性

对于技术可行性首先要想到如何运用当前的技术手段可以成功地完成系统开发设计的工作,还要考虑设施以及配置能否契合开发的需要等。本次要开发的招聘数据采集分析网站系统用的是Hadoop开发语言,容易编写,可以直接在服务器上执行端口。并且使用Pycharm可以快速创建项目。在软件方面:由于使用B/S模型的相对成熟的开发软件,所以软件开发平台的可行性。并且ECharts图表库也已非常成熟且完善,所以其技术可行性非常之高。

2.经济可行性

Hadoop是一款开源免费的脚本语言,Pycharm开发环境也有免费的社区版,而且ECharts也是一款优秀的开源的图表。因此开发成本几乎可以忽略不计,因此经济可行性非常高。

3.社会可行性

本系统的开发符合国家法律进行,也不会触犯到任何人,任何集体的法律权益。只要开发过程中遵纪守法就完全符合法律要求,并且使用计算机的用户都会具有一定的计算机基础,并且本系统操作方法简单,分析的均为计算机相关方面的岗位信息,用户群体也都是计算机方面的人才,所以用户绝对能够熟练使用该系统,并且普通会使用计算机的人群也能使用。因此社会可行性很高。

2.4 功能设计

本项目要对系统功能结构进行设计、系统功能模块爬取网站信息及存入数据库和数据可视化设计、画出系统完整的流程图。

2.4.1系统功能结构

该系统实现了数据的概览,薪资情况,企业情况,福利情况,学历情况及薪资预测的可视化。系统功能层次图,如图2-1所示。

img

图2-1 系统功能层次图

2.4.2系统功能模块设计

本程序使用Hadoop语言编写,使用的是Flask轻量级Web应用框架,数据库采用MySQL设计,使用百度开发的开源的ECharts图表库进行数据的可视化显示。招聘信息数据的爬取使用Requests进行,爬取的招聘网站为拉勾网,拉勾网有较强的反爬机制,所以采用Cookie的形式进行封装,再进行数据获取。获取的招聘信息数据存储到MySQL数据库,然后使用Pymysql包连接MySQL将查询的数据展示到页面。系统提供了如下功能:

1.数据爬取功能

程序模拟浏览器访问招聘网站信息获取响应Json,提取其中招聘岗位的所有数据,并将这些招聘数据进行存储。系统爬取流程图,如图2-2所示。

img

图2-2 招聘信息爬取流程图

2.数据展示概况

可以通过学历和职位来选择查看满足条件的招聘信息,可以选择学历要求、输入职位来搜索更加精准的职位。

3.数据可视化

通过连接数据处理获取职位信息后,将职位信息传输到ECharts前端框架里。

在前端网站框架里放入连接数据后的ECharts将各种相关职位的薪资分布情况以柱状图、饼图的形式来展示。

将相关职位的主要招聘城市以所占的比例饼图形式展现;将公司企业的规模分布以折线图,柱状图的形式展示。

通过数据可视化,基于词云进行构造,生成公司福利词云和职位福利词云,展示所有公司给出的最核心的福利待遇。

可视化展现各种岗位对于不同学历和不同经验的薪资情况,以柱状图、矩形树的形式进行可视化展示。

2.4.3系统流程图

用户登入系统后,通过连接数据库,对招聘信息进行获取,将信息传输到ECharts图表里对三种语言相关岗位招聘信息进行可视化的展示。可视化展示流程图,如图2-3所示。

img

图2-3 可视化展示流程图

2.5 数据库设计

数据库存储爬取的所有招聘信息数据。在MySQL里创建招聘信息表,存储爬取的招聘公司的全称,招聘职位名称,职位福利,薪资,学历要求,所在城市等信息。

当可视化界面展示数据时,查询数据中所有的相关招聘信息。招聘信息数据表,如表2-1所示。

表2-1 招聘信息数据表

字段名数据类型备注
companyFullNameText公司全称
companyShortNameText公司简称
companySizeText公司规模
financeStageText融资阶段
districtText区域
positionNameText职位名称
workYearText工作经验
educationText学历
salaryText薪资
positionAdvantageText职位福利
industryFieldText经营范围
firstTypeText职位类型
companyLabelListText公司福利
secondTypeText第二职位
cityText城市

2.6 本章小结

本章对基于Hadoop的招聘网站的可视化系统进行了设计思想的阐述,表述了招聘网站可视化的需求分析。对系统可行性进行分析,包括技术、经济、社会。以及详细的功能设计,包括系统功能结构设计、系统功能模块爬取网站信息及存入数据库和数据可视化的设计、系统完整流程图。最后介绍了数据库创建的表及其属性。为接下来的招聘网站的可视化的详细实现打下基础。

第3章 系统实现

本章在前文对于本招聘信息可视化系统的需求分析以及详细的爬取流程分析和数据可视化分析的基础上对数据可视化系统的实现做出详细的介绍。对岗位信息的爬取的技术讲解和部分代码、数据处理、数据库功能实现以及ECharts可视化进行详细介绍。

3.1 岗位信息爬取模块设计

通过浏览器搜索拉勾网,在拉勾网站点击鼠标右键的检查功能查看招聘信息的源代码分析网页,拉勾网的职位信息是通过Ajax动态加载的,由于拉勾网反爬机制,我们并不能通过爬虫在爬取的源代码里获取职位的相关信息,所以我们在检查功能的Network里点击XHR查看标头。在爬取数据的过程中,从指定的url中通过Requests请求携带标头里的请求标头和表单数据模拟浏览器访问网页获取网页中的JSON信息。

对招聘信息的获取使用Requests进行爬取拉勾网的招聘岗位信息,由于拉勾网的反爬机制,所以采用Cookie的形式进行封装,再进行数据获取。数据爬取的部分过程,代码如下:

#创建session会话

s = requests.Session()

#模拟浏览器发送请求
s.get(url=url1, headers=headers, timeout=3)

#获取cookie
cookie = s.cookies

#发送post请求
res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3)

#检查请求是否成功
res.raise_for_status()

#设置可接收的编码为utf-8
res.encoding = ‘utf-8’

#请求响应结果
page_data = res.json()

访问拉钩网站,登录需要Cookie,将Cookie保存在Session里。创建Session连接,获取服务器的响应结果。获取响应,如图3-1所示。

img

图3-1 获取响应

通过分析网页源代码可以看到浏览器发送的请求得到的响应,从JSON里可以读取总职位数TotalCount,代码如下:

first_page = get_json(url, 1)
total_page_count = first_page[‘content’][‘positionResult’][‘totalCount’]#获取json里的总相关职位数
num = get_page_num(total_page_count)#算出爬取的页数

通过从浏览器上登录拉钩网站可以看到拉钩网的招聘信息每页显示15个职位,最多可以显示30页,所以最多能爬取30页信息。爬取总页数的代码如下:

def get_page_num(count)😗*
** page_num = math.ceil(count / 15)#总职位数除以每页的招聘岗位15个
if page_num > 30:
return 30#如果页码超过30只返回三十页码职位
else:
return page_num#如果页码不超过30页,那么返回爬取的总页码数

将页数循环访问并获取响应JSON里职位相关的内容,最后将职位信息汇总到总列表total_info中,因为拉钩网站的反爬机制,所以每次爬取一页数据后都需要都需要暂停一段时间后再继续爬去,获取职位信息代码如下:

total_info = []
time.sleep(10)
for num in range(1, num + 1):
# 获取每一页的职位相关的信息
page_data = get_json(url, num) # 获取响应json
jobs_list = page_data[‘content’][‘positionResult’][‘result’] # 获取每页的所有相关的职位信息**
** page_info = get_page_info(jobs_list)#将每页的职位信息写入列表

for item in page_info:
print(item)
total_info += page_info print(‘已经爬取到第{}页,职位总数为{}’.format(num, len(total_info)))
time.sleep(20)

将网站每页的岗位信息从响应的Json里获取的职位信息显示出来,职位信息列表,如图3-2所示。

img

图3-2职位信息列表

爬取所有数据,看看有没有之前已存入的信息,如果没有再写入,这样可以筛选之前爬取过的重复的岗位招聘信息,或者不同语言关键词同时能搜索到的相同岗位信息,更新数据表代码如下:

def unique(old_list):
newList = []
for x in old_list:
if x not in newList :
newList.append(x)
return newList

3.2 数据库的连接及使用

爬取的所有职位信息都需要存入数据库,每次对数据化进行可视化展示时连接并查询数据库里相关的职位信息。

3.2.1连接数据库

在MySQL中用创建数据库表,将爬取后的获取的数据保存到数据库。每次可视化的展示都需要连接数据库获取相关的信息,获取列表里的所有相关信息后就要关闭连接,代码如下:

conn = pymysql.connect(host=‘localhost’, user=‘root’, password=‘123456’, port=3366, db=‘lagou’,charset=‘utf8mb4’)#建立数据库连接

cursor = conn.cursor()#中间是查询所需要的各种招聘信息

count = cursor.fetchall()#取消连接

3.2.2 数据概览数据库查询

在可视化过程中,我们需要载入数据,而这些数据保存在MySQL数据库里,所以就要用Pymysql包连接MySQL数据库,并在MySQL数据库中查询相关信息列遍历并写入列表,然后关闭连接。

数据概况的内容是从数据库中查询所有职位信息,遍历数据表信息并存放至列表代码如下:

cursor.execute(“select count() from demo”);
count = cursor.fetchall()
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

#返回字典(dict)表示的记录,就要cursorclass参数设为MySQLdb.cursors.DictCursor类。
cursor.execute(“select from demo limit “+str(page)+”,”+str(limit));
data_dict = []
result = cursor.fetchall()
for field in result:
data_dict.append(field)

3.2.3学历情况数据库查询

学历情况的部分分别展示的是招聘企业对学历的要求还有对工作经验的要求的数据。学历的要求是从数据库中查询所有的学历类别并返回所有结果,循环这些学历,每次都查询并返回所有招聘职位需求学历的结果,对工作要求的数据也是这样的方法进行查询。代码如下:

cursor.execute(“SELECT DISTINCT(education) from demo”);
result = cursor.fetchall()
education = []
education_data = []

color_list = [‘#459AF0’,‘#38C3B0’,‘#86CA5A’,‘#BFD44F’]
for field in result:
education.append(field[0])

for i in range(len(education)):
cursor.execute(“SELECT count() from demo where education = '” + education[i] + “'”);
count = cursor.fetchall()
education_data.append({‘value’: count[0][0],‘itemStyle’: {‘color’: color_list[i]}})

学历类型与每个学历类型的招聘岗位数,以及工作经验类型与招聘岗位数,学历情况数据,如图3-3所示。

img

图3-3 学历情况

3.2.4企业情况数据库查询

企业情况展示了主要招聘城市和企业规模两种数据。主要招聘城市是在数据库中查询招聘的城市City列,并叠加每个招聘城市所招聘的岗位数,企业所在城市的分布,由于爬取的是全国的招聘数据,所以招聘城市过多全部在饼图中展示的话会看不清内容,所以,将饼状图只显示前7个城市的招聘比例和招聘企业的个数,企业规模的数据是循环公司规模查询数据库中所有公司规模将属于哪种公司规模的公司加入列表。部分代码如下:

for i in city:

**#**查询各城市招聘人数
cursor.execute(“SELECT count() from demo where city = '” + i + “'”);

​ count = cursor.fetchall()

#‘value’:招聘人数, ‘name’: 城市名
dict = {‘value’: count[0][0], ‘name’: i}
city_result.append(dict)

for i in city[7:]:

#设置七名以后的城市不显示
selected[i] = False

以下是企业各招聘城市,及招聘城市招聘岗位数,各招聘公司规模的公司数,执行数据库结果,企业情况数据,如图3-4所示。

img

图3-4 薪资情况数据

3.2.5薪资情况数据库查询

薪资情况的部分分别查询数据库的工作薪资Salary是属于10k以下的Java岗位,Hadoop岗位还是运营岗位,并遍历数据库。然后依次分别查询数据库其他薪资范畴10k到20k的、20k到30k的、30k到40k的、40k以上的三种语言相关的岗位信息,主要代码如下:

for i in positionName:

#此处查询的就是20k到30k薪资的分别有关Java、Hadoop、运营的岗位信息
cursor.execute(“SELECT COUNT() FROM demo WHERE SUBSTR(salary,1,2) BETWEEN 20 AND 30 and positionName like '%”+i+“%';”);

#接收全部数据库结果信息
count = cursor.fetchall()

#依次加入列表
temp_list += count[0]

3.3 数据可视化设计

ECharts显示图表柱状图、折线图,将从数据库中提取的数据传输到ECharts框架里,在前端界面展示出来,ECharts是JavaStript语言,可以将后端的数据传输至ECharts框架里,以图表形式展现出来。

3.3.1福利词云设计

福利待遇部分是将查询的数据库的福利内容列所有福利待遇加入列表,使用Jieba分词设置停止词,并提取主题词,返回权重最大的前100个词。然后以词云形式展现在前端可视化界面。代码如下:

positionAdvantage = []

#设置停止词
jieba.analyse.set_stop_words(‘./stopwords.txt’) **
**tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True)

#提取主题词content:要分词的语句

# topk: 返回的是权重最大的前100个词

#withWeight:True返回关键词的权重值
for v, n in tags:
mydict = {}
mydict[“name”] = v
mydict[“value”] = str(int(n * 10000))
positionAdvantage.append(mydict)

查询的职位福利情况和公司福利情况的数据从数据库得出结果,福利情况数据,如图3-5所示。

img

图3-5 福利情况数据

公司福利与职位福利可以通过ECharts在前端网页可视化展示出来。公司福利与职位福利的词云图,如图3-6所示。

img

图3-6 词云图

3.3.2柱状图和折线图

柱状图通过ECharts显示,后端的数据以Json形式传输至ECharts图表里可以动态切换柱状图与折线图,并且鼠标点到相应位置会显示柱状图或者条形图的数据信息。

柱状图或条形图可以切换为数据视图,保存图片,实现柱状图与条形图之间的动态切换,部分代码如下:

​ dataView: { //数据视图
​ show: true
​ },
​ saveAsImage: { //保存图片
​ show: true

},

//动态类型切换,可切换柱状图与饼图
magicType: { **
** type: [‘bar’, ‘line’]

鼠标触碰可以触发显示相关的招聘数据,下面是将Json数据传输至ECharts里的公司规模和公司规模结果的代码,写出数值轴类型和类目轴类型,柱状图或是折线图类型,其他学历情况和薪资待遇的柱状图和折线图的数据展示也是如此。代码如下:

xAxis: {

#类目轴
type: ‘category’,

#此处放从数据库查询出来的公司规模大小的内容在x轴下方展示
data: res.companySize
},
yAxis: {

#数值轴
type: ‘value’
},
series: [{

#此处是公司规模大小的结果
data: res.companySizeResult,
type: ‘line’
}]

柱状图和折线图之间的相互转换可以动态实现,例如薪资待遇情况和公司规模的柱状图也可以通过用户点击进行动态切换成折线图或者数据,公司规模情况的柱状图,如图3-7所示。

img

图3-7 柱状图

3.3.3矩形树图

将数据传输至ECharts里后,将数据以树图的形式展示出来,矩形树图的类型为Treemap,设置树图属性,以及设置树图中的文本样式。代码如下:

data = res.workYear_data

for(var n in data) {
data[n][‘name’] = data[n][‘name’] + ’ ’ + data[n][‘value’]
}

对工作经验的要求统计分布用ECharts以矩形树图的形式展示在前端界面。关于工作经验的矩形树图,如图3-8所示。

img

图3-8 矩形树图

3.3.4饼图

企业所在城市的分布,由于爬取的是全国的招聘数据,所以招聘城市过多全部展示不够美观,所以饼状图只显示前7个城市的招聘比例和招聘企业的个数,如果想要其他招聘城市的招聘信息只需要点击城市即可在饼状图中显示,部分代码如下:

legend: {

orient: ‘vertical’,
left: ‘left’,
data: res.city,

#只显示前七个城市
selected: res.selected
},

用ECharts可视化显示岗位的主要招聘城市前七个城市及其岗位数的饼状图分布并,点击城市可以在饼图中添加此城市的招聘岗位数及占比。饼状图,如图3-9所示。

img

图3-9 饼状图

3.4可视化展示

通过对招聘数据的可视化展示,可以让用户直观看到招聘信息的薪资情况,招聘城市,岗位福利等情况信息,从而分析自己想要去的城市和想工作的岗位,以及工作岗位的要求,对自己的职业规划指明方向。

3.4.1数据概况

通过爬取的Java、Hadoop、运营三种相关信息的招聘岗位信息,可以查看数据库里的全部职位列表,也可以输入学历与关键字根据用户需求个性化显示招聘信息,用户也可以选择性查看岗位的部分信息,搜索查询招聘信息,如图3-10所示。

img

图3-10 搜索查询招聘信息

3.4.2薪资情况

爬取的全国的Java、Hadoop、运营语言的招聘岗位统计后通过使用ECharts图表展示的柱状图和饼状图可以看出这三种类型的薪资主要的分布在10k到20k之间,不同语言的岗位薪资分布差别不大,计算机相关岗位还是有很好的前景的。薪资情况,如图3-11所示。

img

图3-11 薪资状况

薪资状况的柱状图可以切换为折线图,鼠标触发事件会显示薪资分布统计所招聘的人数,薪资状况的折线图与数据视图,如图3-12所示。

img

图3-12 薪资状况折线图与数据视图

3.4.3企业情况

根据招聘岗位所在城市信息可以看到北京、上海、深圳、广州这些城市招聘的岗位较多,招聘公司的规模分布也很平均,但50-150人规模的人数占比最多,也可以选择其他城市查看招聘岗位个数,根据自己的意向城市和各城市招聘比例个性化选择岗位,企业分布饼图、公司规模柱状图,如图3-13所示。

img

图3-13 企业分布饼图、公司规模柱状图

3.4.4福利情况

根据福利的词云分析可以看到各大公司对于职位福利和公司福利方面着重将五险一金、带薪休假、绩效奖金等来吸引人才,福利情况,词云图可以直观看到大部分岗位及公司的待遇。福利情况,如图3-14所示。

img

图3-14 福利情况

3.4.5学历情况

根据学历情况的分析可以看到招本科及以上学历的岗位最多,远高于其他学历招聘,对于工作经验要求的矩形树图可以看出要求其工作经验一般为3到5年,其次工作经验要求1到3年,但是经验要求一年以下工作经验的人数最少。学历情况及工作经验可视化,如图3-15所示。

img

图3-15 学历情况及工作经验可视化

3.5 本章小结

本章主要阐述了本招聘网站的可视化系统的设计思想与开发的思路。展示了对拉钩网站网页的分析以及模拟浏览器向服务器端的访问来进行对招聘数据的爬取,以及对爬取数据的处理和使用ECharts进行的可视化展示,是对招聘数据可视化系统的一些具体功能的描述。同时对招聘信息的可视化进行展示。

第4章 功能测试及成果展示

任何一个项目完成之后都必须要对该项目的测试,以检查项目是否有缺陷,设计多个测试用例,检查用户在使用阶段是否会有此类问题。也可以在此过程中做出完善,本章主要是对招聘数据可视化的交互功能是否满足要求进行测试。

4.1 测试内容

招聘数据的可视化主要是招聘信息的展示和交互,所以我们主要测试用户的操作与系统的交互是否正常。所以选择开发人员手工执行测试用例的方式进行。以下是对招聘数据可视化进行的详细说明。招聘数据可视化测试用例,如表4-1所示。

表4-1 招聘数据可视化测试用例

测试名称:招聘数据可视化测试测试目的:看用户点击相应操作是否正确显示可视化数据,柱状图与折线图是否能正常切换,数据概览输入相关信息是否能显示相关数据。前置测试:成功连接数据库,并可视化展示招聘信息。主要参与者:用户
功能模块测试目的测试步骤预期结果
数据概览输入学历和相关职位关键词能否显示正确信息输入学历与关键词查询出现了相关信息,没有其他信息
薪资情况柱状图与折线图是否能动态切换点击切换折线图折线图出现
企业情况点击其他未显示的城市是否能出现城市招聘岗位数信息点击其中某一城市饼图中添加了该城市信息
福利情况鼠标触碰到某一高频词是否能显示该词出现的次数鼠标触碰该词出现该词的出现次数
学历情况鼠标触碰某一学历的柱状图,是否能出现招聘人数鼠标触碰该柱状图显示招聘人数

4.2 测试结果

本项目的所有功能经过测试后已经完全满足要求。本项目满足了招聘数据列表的展示,薪资待遇的分布展示,公司分布情况的饼状图展示,公司规模大小的柱状图和折线图的展示分布,公司福利情况和职位福利的词云展示,对学历和工作经验要求的条状图和矩形树图的展示。

4.3本章小结

本章通过使用测试案例数据对招聘数据的可视化分析进行测试,测试过程中发现了一些问题,比如饼状图没有设计只显示七个城市导致饼状图不好看。本次完善了功能,最后完成测试,但我们还需要加深学习,让项目变得更加实用。

结 论

本次论文完成了对于基于Hadoop的招聘网站的可视化,系统基本上达到了任务要求,需要参考Java、Hadoop、运营语言的相关岗位招聘信息的计算机应聘人员可以根据自身需求,查看薪资待遇的水平分布、企业的主要招聘城市和企业规模、企业主要吸引人才发放的福利、企业对应聘人员的学历及工作经验的要求,应聘者可以根据这些信息来选择自己发展空间更大的城市,看薪资是否满足自身需求,根据公司招聘要求提升自己的水平,为以后的学习找到更好的工作指明方向。临近毕业对于急于找工作步入社会的计算机专业的我们来说,去哪个城市工作,工作待遇一般怎样,工作的薪资一般为多少,公司对应聘者的经验学历要求一般都是什么,这一切我们都是迷茫的,因此,我设计的招聘信息的可视化,也可以为我们这样的应聘者分析方向。

虽然在这次毕业设计已经完成。但系统也存在着一些局限,例如,本系统无法满足各个行业的人才来使用本数据可视化系统。需要不断的提升软件设计技术和方法,满足用户需求,所以在接下来的开发中丰富和完善系统都是很有必要的。

参考文献

[1] 王芳.基于Hadoop的招聘网站信息爬取与数据分析[J].信息技术与网络安全,2019.08

[2] 贾柠瑜.基于Hadoop爬虫的岗位数据分析–以拉勾网为例[J].信息技术与信息化,2019

[3] 杨众.基于Hadoop语言的招聘信息可视化分析[J].计算机与网络,2019

[4] 王慧玲.招聘网站数据可视化分析平台的设计与实现.曲阜师范大学,2020.06

[5] (美)Miguel Grinberg. Flask Web开发:基于Hadoop的Web应用开发实战[M].人民邮电出版社,2015.01

[6] (美)Wes McKinney. 利用Hadoop进行数据分析[M].机械工业出版社,2014.01

[7] 郭丽蓉.大数据环境下的网络爬虫设计[J].山西电子技术,2018(2)

[8] 王涛.基于Hadoop的软件技术人才招聘信息分析与实现——以前程无忧为例[J].福建电 脑,2018

[9] 崔蓬.ECharts在数据可视化中的应用[J].软件工程,2019

[10] 裴丹丹.基于ECharts的数据可视化实现[D].北京邮电大学,2018

[11] 项博良,唐淳淳,钱前,曹健东.基于网络爬虫和数据分析[J].智能计算机与应用,2020.01

[12] 余本国.Hadoop数据分析基础[M].清华大学出版社,2018

[13] 董付国.Hadoop数据分析、挖掘与可视化[M].南京邮电大学,2018.05

[14] 孙波翔/李斌译.Hadoop核心编程(第3版)[M].人民邮电出版社,2016

[15] 袁国忠.Hadoop编程从入门到实践[M].人民邮电出版社,2016

[16] 关鑫洁, 黄思奇, 位磊. 基于Hadoop的求职信息采集分析系统设计与实现[J].计算机时代, 2020.

[17] 边倩, 王振铎, 库赵云. 基于Hadoop的招聘岗位数据分析系统的设计与实现[J].微型电脑应用, 2020.

[18] 常逢佳, 李宗花, 文静,等. 基于Hadoop的招聘数据爬虫设计与实现[J].软件导刊, 2019.

[19] 王瑞梅. 网络招聘数据可视化分析系统的设计与实现[D].河北师范大学.

[20] 刘娟, 管希东. 基于Hadoop爬虫的职位信息数据分析和可视化系统实现[J].软件工程与应用, 2020.

[21] 谭云鹤. 基于招聘网站数据处理类岗位的人才需求分析.天津财经大学.

[22] 欧阳元东. 基于Hadoop的网站数据爬取与分析的技术实现策略[J].电脑知识与技术, 2020.

[23] 刘晓知. 基于Hadoop的招聘网站信息爬取与数据分析[J].电子测试, 2020.

[24] 于韬, 李伟, 代丽伟. 基于Hadoop的新浪新闻爬虫系统的设计与实现[J].电子技术与软件工程, 2018.

[25] 谭昕章,杜晖. 电商运营岗位的社会需求及岗位素质分析——基于智联招聘网站数据[J]. 现代商贸工业, 2021.

[26] 杨国军. 基于Hadoop的数据爬虫的设计与实现[J].数字技术与应用, 2020.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 使用模拟器模拟Linux操作系统

1. 简介 在Android手机上使用模拟器模拟ubuntu等操作系统,便于测试 2. 软件准备 Termux:是一款 Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。虽然酷安和谷歌菜市场都能下载,但这些渠道都很久没更新…

gitlab提交项目Log in with Access Token错误

目录 报错信息 问题描述 解决方案 报错信息 问题描述 在提交项目到gitlab时,需要添加账户信息 ,但是报了这样一个错,原因应该就是路径问题,我在填写server地址的时候,就出现了路径问题,我把多余的几个/…

.NetCore之log4net的使用

1.首先下载log4ne的包&#xff1a; 2.添加配置文件log4net.config <?xml version"1.0" encoding"utf-8" ?> <configuration><!-- This section contains the log4net configuration settings --><log4net><appender name&q…

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …

ClickHouse 使用

CREATE DATABASE test on cluster ck_00_1repl; DROP TABLE local_t_ordt_order on cluster ck_00_1repl; 创建本地 local 表 CREATE TABLE test.local_order_db_t_order on cluster ck_00_1repl ( forder_id_hash String, forder_id String, fuid Int32, forder_type Int32…

Android 蓝牙开发( 二 )

前言 上一篇文章给大家分享了Android蓝牙的基础知识和基础用法&#xff0c;不过上一篇都是一些零散碎片化的程序&#xff0c;这一篇给大家分享Android蓝牙开发实战项目的初步使用 效果演示 : Android蓝牙搜索&#xff0c;配对&#xff0c;连接&#xff0c;通信 Android蓝牙实…

git-tf clone 路径有空格处理方案

git-tf clone 路径存在空格情况下&#xff0c;运行命令报错&#xff1b; 需要对路径进行双引号处理

几个nlp的小任务(机器翻译)

几个nlp的小任务(机器翻译) 安装依赖库数据集介绍与模型介绍加载数据集看一看数据集的样子评测测试数据预处理测试tokenizer处理目标特殊的token预处理函数对数据集的所有数据进行预处理微调预训练模型设置训练参数需要一个数据收集器,把处理好数据喂给模型设置评估方法参数…

Redis——》Redis的部署方式对分布式锁的影响

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

Java“魂牵”京东商品详情描述数据,京东商品详情API接口,京东API接口申请指南

要通过京东的API获取商品详情描述数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品详情&#xff1a; 首先&#xff0c;确保您已注册成为京东开放平台的开发者&#xff0c;并创…

xxl-job的简单使用

模块介绍 一、以做过的项目一为例&#xff0c;模块分配如下&#xff1a; xxl-job-admin&#xff1a;任务管理后台模块 xxl-job-executor-paofu&#xff1a;任务代码执行模块 二、以做过的项目二为例&#xff0c;模块分配如下&#xff1a; 为什么要介绍一下模块的分配&#x…

【kubernetes】使用kubepshere部署中间件服务

KubeSphere部署中间件服务 入门使用KubeSphere部署单机版MySQL、Redis、RabbitMQ 记录一下搭建过程 (内容学习于尚硅谷云原生课程) 环境准备 VMware虚拟机k8s集群&#xff0c;一主两从&#xff0c;master也作为工作节点&#xff1b;KubeSphere k8skubesphere devops比较占用磁…

【Unity开发必备】100多个 Unity 学习网址 资源 收藏整理大全【持续更新】

Unity 相关网站整理大全 众所周知&#xff0c;工欲善其事必先利其器&#xff0c;有一个好的工具可以让我们事半功倍&#xff0c;有一个好用的网站更是如此&#xff01; 但是好用的网站真的太多了&#xff0c;收藏夹都满满的(但是几乎没打开用过&#x1f601;)。 所以本文是对…

NodeJs-Buffer(缓冲器)

目录 一、概念二、特点三、使用3.1 创建Buffer3.2 Buffer 与字符串的转化3.3 Buffer 的读写 一、概念 Buffer 是一个类似于数组的 对象 &#xff0c;用于表示固定长度的字节序列 Buffer 本质是一段内存空间&#xff0c;专门用来处理 二进制数据 。 二、特点 Buffer 大小固定且…

【Docker】01-Centos安装、简单使用

参考教程&#xff1a; https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 什么是Docker&#xff1f; Docker是一种开源的容器化平台&#xff0c;用于构建、打包、部署和运行应用程序。它通过使用容…

flutter和原生利用pigeon建立通道

首先导入依赖&#xff1a; dependencies: pigeon: ^10.0.0定义一个文件&#xff1a; /// 用于定于flutter和平台的桥接方法 /// HostApi() 标记的&#xff0c;是用于 Flutter 调用原生的方法&#xff1b; /// FlutterApi() 标记的&#xff0c;是用于原生调用 Flutter 的方法&…

iPhone 15 Pro与iPhone 13 Pro:最大的预期升级

如果你在2021年首次发布iPhone 13 Pro时就抢到了它,那么你的合同很可能即将到期。虽然距离iPhone 15系列还有几周的时间,但你可能已经在想:是时候把你的旧iPhone升级为iPhone 15 Pro了吗? 我们认为iPhone 13 Pro是你现在能买到的最好的手机之一。但如果你想在2023年晚些时…

数据结构】二叉树篇|超清晰图解和详解:后序篇

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目 一、核心 我们清楚…

STM32--RTC实时时钟

文章目录 Unix时间戳时间戳转换BKPRTC简介RTC框图硬件电路RTC的注意事项RTC时钟实验工程 Unix时间戳 Unix 时间戳是从1970年1月1日&#xff08;UTC/GMT的午夜&#xff09;开始所经过的秒数&#xff0c;不考虑闰秒。 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64…

部署问题集合(二十二)Linux设置定时任务,并设置系统时间

前言 因为项目中经常用到定时任务&#xff0c;特此总结记录一下 步骤 大部分虚拟机创建后就自带定时服务&#xff0c;直接用命令就好编辑定时任务&#xff1a;crontab -e&#xff0c;在该文件下添加如下内容开机自启&#xff1a;reboot /home/autoRun.sh定时执行&#xff1a…