基于分布式的智联招聘数据的大屏可视化分析与预测
1.1项目介绍
1.2项目要求
1.3项目意义
1.3.1 工作计划
1.3.2 项目团队管理
xx:负责需求文档撰写,前端可视化大屏设计与整合、实训报告书撰写、项目演示、PPT。
xx:数据分析及数据设计存储、预测模型训练及展示功能实现、负责需求文档撰写、PPT。
xx:负责数据分析、数据爬取、负责数据预处理、数据可视化绘图、实训报告书。
xx:负责数据分析、负责需求文档撰写、数据可视化绘图、实训报告书撰写。
1.4数据结构(字段解释及说明)
字段名称 |
字段解释 |
字段内容 |
url |
公司招聘链接 |
https://jobs.zhaopin.com/158632619261019.html |
company_name |
公司名称 |
深圳市珍爱网信息技术有限公司 |
company_size |
公司规模 |
1000-9999人 |
company_type |
公司性质 |
合资 |
job_type |
职位领域 |
销售业务,大客户销售代表 |
job_name |
职位名称 |
大客户销售顾问(六险一金+双休) |
edu |
学历要求 |
中专 |
empltype |
职位类别 |
全职 |
tag |
职位亮点(福利) |
五险一金,绩效奖金,带薪年假,补充医疗保险,员工旅游,节日福利 |
salary |
工资水平 |
薪资面议 |
city |
城市 |
杭州-西湖区 |
workingexp |
工作经验 |
不限 |
resume_count |
简历统计 |
83 |
company_score |
公司打分 |
316.07507 |
work_place |
工作地址 |
西湖区嘉华国际商务中心 |
require_content |
职位要求 |
任职要求:1、23--35岁,大专及以上学历(优秀者可适当放宽);2、形象气质佳,具备丰富的社会阅历;3、热情,开朗,乐于助人,热爱婚恋工作;4、情商高,善于挖掘会员内心情感需求;5、具备销售经验,有顾问式销售经验优先;6、能承受一定的工作压力。岗位职责:1、负责高端婚恋产品的推广(电话+面销为主);2、挖掘会员需求,制定与之匹配的婚恋方案;3、联络、跟进客户,维护良好的客户关系;4、顺利完成个人业务指标;5、完成上级交给的其他任务。 |
peopleneed |
人员需求 |
招2人 |
companyarea |
公司业务范围 |
互联网/电子商务 |
1.5体系架构
招聘数据分析流程 |
数据源 智联招聘大数据方面的岗位 |
数据获取 python定义爬虫获取 |
数据预测 岗位地理分布预测及岗位薪资预测 |
数据可视化 大屏数据展示 |
数据存储 hdfs及MySQL分布式存储 |
数据分析 spark离线数据分析 |
数据总结 |
1.5.1系统开发环境及开发语言
系统开发环境使用: Pycharm,Idea,Hadoop,Spark
数据分析与展示框架:selenium、Django、pyecharts、spark SQL
1.5.2 MySql数据库及可视化工具
1.5.3 Pycharm开发工具
1.5.4 cookie技术
所谓“cookie”数据是指某些网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
通俗来讲就是指缓存数据,包括用户名、密码、注册账户、手机号等公民个人信息。
1.5.5 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就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是HDFS的架构是基于一组特定的节点构建的(参见图1),这是由它自身的特点决定的。这些节点包括NameNode(仅一个),它在HDFS内部提供元数据服务;DataNode,它为HDFS提供存储块。由于仅存在一个NameNode,因此这是HDFS 1.x版本的一个缺点(单点失败)。在Hadoop 2.x版本可以存在两个NameNode,解决了单节点故障问题。
存储在HDFS中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的RAID架构大不相同。块的大小(1.x版本默认为64MB,2.x版本默认为128MB)和复制的块数量在创建文件时由客户机决定。NameNode可以控制所有文件操作。HDFS内部的所有通信都基于标准的TCP/IP协议。
1.5.6 Django框架
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。Django项目源自一个在线新闻Web站点,于2005年以开源的形式被释放出来。Django框架的核心组件有:用于创建模型的对象关系映射;为最终用户设计较好的管理界面;URL设计;设计者友好的模板语言;缓存系统。
Django(发音:[`dʒæŋɡəʊ])是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守BSD版权,初次发布于2005年7月,并于2008年9月发布了第一个正式版本1.0。
Django根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。
由于Django在近年来的迅速发展,应用越来越广泛,被著名IT开发杂志SD Times评选为2013 SD Times 100,位列“API、库和框架”分类第6位,被认为是该领域的佼佼者。
1.5.7 Selenium框架
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),Mozilla Firefox,Safari,GoogleChrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。
框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
使用简单,可使用Java,Python等多种语言编写用例脚本。Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在Windows、Linux和Macintosh上的Internet Explorer、Chrome和Firefox中运行。其他测试工具都不能覆盖如此多的平台。使用Selenium和在浏览器中运行测试还有很多其他好处。Selenium完全开源,对商业用户也没有任何限制,支持分布式,拥有成熟的社区与学习文档。
1.5.8 spark架构
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark是在Scala语言中实现的,它将Scala用作其应用程序框架。与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。Spark由加州大学伯克利分校AMP实验室(Algorithms,Machines,and People Lab)开发,可用来构建大型的、低延迟的数据分析应用程序。
2.1 Pycharm
在Pycharm官网https://www.jetbrains.com/pycharm/下载最新客户端,编译环境选用anaconda3,下载地址为https://www.anaconda.com/。
2.2 mysql数据库
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
yum localinstall mysql80-community-release-el7-5.noarch.rpm
yum install mysql-community-server
1. 启动Mysql命令:service mysqld start
2. 一般MySQL都有初始密码,获取MySQL初始密码的命令:grep 'temporary password' /var/log/mysqld.log
3. 输入mysql -uroot -p 初始密码 按下回车键进入MySQLshell交互界面;在交互界面可以查看数据库,数据库表,及相关安全性设置。
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';写入密码:flush privileges。
update user set host='%' where user ='root';
2.3 idea环境
从idea官网https://www.jetbrains.com/idea/下载idea,然后在maven官网下载maven3.6文件,解压修改conf文件夹中的settings.xml文件配置如下:
在idea的设置界面,单击plugins,在Marketplace界面中搜索Scala安装。
2.4 spark环境搭建
2.4.1 从 Spark 官网下载 Spark 的安装文件
tar zxvf spark-2.3.0-bin-hadoop2.7.tgz
3.1数据获取
通过python的第三方库selenium框架搭载edge diver,实现智联网址的动态获取,根据xpath语句获取到爬取信息。
3.2数据存储
将爬取的数据通过pandas库保存为csv文件,然后通过sparksql对数据进行分析并将分析数据结果保存到MySQL数据库中。
字段名称 |
数据类型 |
长度 |
备注 |
job_name |
Varchar |
255 |
职位名称 |
city |
Varchar |
255 |
城市 |
count |
int |
12 |
数量 |
字段名称 |
数据类型 |
长度 |
备注 |
city |
Varchar |
255 |
城市 |
Job_type |
Varchar |
255 |
职位类别 |
Avg_salary |
double |
20 |
工资 |
字段名称 |
数据类型 |
长度 |
备注 |
job_type |
Varchar |
255 |
职位领域 |
workingexp |
Varchar |
255 |
工作经验 |
workexp |
int |
12 |
计数 |
字段名称 |
数据类型 |
长度 |
备注 |
job_type |
Varchar |
255 |
职位领域 |
edu |
Varchar |
255 |
学历要求 |
edu_count |
int |
12 |
计数 |
字段名称 |
数据类型 |
长度 |
备注 |
city |
Varchar |
255 |
城市 |
People_sum |
int |
20 |
人员需求 |
companyarea |
Varchar |
255 |
公司业务范围 |
字段名称 |
数据类型 |
长度 |
备注 |
Word |
Varchar |
255 |
词 |
count |
Int |
12 |
个数 |
字段名称 |
数据类型 |
长度 |
备注 |
edu |
Varchar |
255 |
学历要求 |
workingexp |
Varchar |
255 |
工作经验 |
Salary_avg |
double |
20 |
工资水平 |
字段名称 |
数据类型 |
长度 |
备注 |
company_type |
Varchar |
255 |
公司性质 |
Edu |
Varchar |
255 |
职位名称 |
workingexp |
Varchar |
255 |
工资水平 |
Edu_exp_count |
int |
12 |
个数 |
字段名称 |
数据类型 |
长度 |
备注 |
Word |
Varchar |
255 |
词 |
count |
int |
12 |
计数 |
4.1数据处理
将数据通过spark SQL,分别进行数据处理与筛选,根据数据存储格式依次编写sql语句如图4.1,并将处理好的数据保存到数据库,方便分析调用。
数据预测代码
首先创建spark对象,然后通过创建的spark对象实例,读取本地的待处理数据文件,通过Scala函数创建数据文件的临时表,对临时表执行如下操作语句:
|select salary,company_size,company_type,empltype,workingexp,resume_count
对查出的数据中的特征列即除薪资以外的所有列,将标签值与特征列进行map方法映射,拆分组合。
val splits=data.randomSplit(Array(0.8,0.2))//定义训练集、测试集比例
val(trainingData,testData)=(splits(0),splits(1))
val featureIndexer=new VectorIndexer()///VectorIndexer():提高决策树或随机森林等ML方法的分类效果
.setOutputCol("indexedFeatures")
.setMaxCategories(4)//把特征值中的离散值数量大于4的认为是连续特征,小于4的认为是离散特征
val rf=new RandomForestRegressor()
.setLabelCol("label") //设置标签列(标签列的名称)
.setFeaturesCol("indexedFeatures") //设置特征列,训练集DF中存储特征列的列名
val pipeline=new Pipeline() //把特征处理和回归树组成一个pineLine
.setStages(Array(featureIndexer,rf))
//Train model.This also runs the indexer.
val model=pipeline.fit(trainingData)
val predictions=model.transform(testData)
//Select(prediction,true label)and compute test error.
val evaluator=new RegressionEvaluator().setLabelCol("label").setPredictionCol("prediction")
.setMetricName("rmse")val rmse=evaluator.evaluate(predictions)
println(s"Root Mean Squared Error(RMSE)on test data=$rmse")//输出训练过程中使用的回归树的具体参数
val rfModel=model.stages(1).asInstanceOf[RandomForestRegressionModel]
val resultRDD:RDD[Row]=predictions.select("prediction","label","features")
var features=x.get(2).toString.slice(1,x.get(2).toString.length-1).split(",")
features(2).toString,features(3).toString,features(4).toString)}) //将预测的结果重新排列组合
val result=spark.createDataFrame(resultRDD,schema)//保存数据预测结果
result.write//将结果保存到Hadoop集群的MySQL关系型数据库中
.option("url","jdbc:mysql://192.168.121.200:3306/house")//指定MySQL关系型数据库地址及数据库名称
.option("driver","com.mysql.cj.jdbc.Driver") // 指定驱动程序
.option("user","root") //指定MySQL数据库用户名
.option("password","Root123.")// 指定MySQL数据库用户名对应的密码
.option("dbtable","tbl_predict_price")//指定数据保存在MySQL数据库中的表名称
.mode(SaveMode.Overwrite) //指定保存类型,这里为覆盖写入
4.2数据分析
将count列的数据按照城市相同的条件相加,根据count的大小做一个气泡地图,对其分析,如图4.3所示
4.2.2岗位数量分析
对所有地区的岗位数量求和然后按照降序排列,同时对排名前十的地区城市做环形图可视化分析如图4.4所示。
4.2.3不同地区的工资和人员需求分析
分析数据列:city,people_sum,Avg_salary
对不同地区的工资求和后求平均值,对不同地区的需求人员累加求和同时加以分析,如图4.5,4.6所示。
将不同职业所要求的学历个数求和做条形图同时加以分析如图4.7所示。
将不同的工作所需要的工作经验,按照所需要的工作经验时间相加,同时做环形图加以分析如图4.8所示。
从图4.9可以得到硕士工资最高达到了8.6k,中专的工资最低只有2.8k,其中平均工资是5.5k。
5.1数据规格化
将数据中自然语言转换成数值类型,并通过卡方检测进行相关性分析,最后分析得分如图5.1。
5.2薪资预测
通过随机森林算法选取图5.1的特征列进行薪资预测。最后将数据映射会原特征值,并进行存储。
6.1 项目封装
将数据处理与分析代码,通过maven框架中的Lifecycle的package进行项目打包。将打包的jar文件及数据文件上传到虚拟机。
6.2 项目可视化与预测展示
- 南方比北方的工作岗位和需求人员更多。
- 北上广深的就业机会更大一些。
- 工资的高低与需求人员的多少没有太大关联。
- 本科以下的学历占比64%左右。
- 不限工作经验、无经验的岗位占比36%左右
- 热门岗位前三是证券、能源、互联网产品
- 不同学历之间收入差距明显
参考文献:
[1]段红秀, 刘梅,and 陈震啸."基于大数据技术的招聘服务平台设计与实现." 互联网周刊 .19(2022):13-15.
[2]王金威."基于大数据分析的高校云招聘信息个性化推送研究." 安徽电子信息职业技术学院学报 21.04(2022):25-31.
[3]吴莉萍, 刘科,and 谢鹏."互联网招聘大数据分析对于高职院校学生就业的推进作用." 内江科技 43.07(2022):55-56+37.
[4]张振寰."基于大数据面向就业岗位招聘的数据分析." 科技资讯 20.12(2022):228-231. doi:10.16661/j.cnki.1672-3791.2203-5042-4550.
[5]殷乐."大数据在企业人力资源招聘管理中的应用研究——以JJ公司为例." 中国管理信息化 25.12(2022):167-169.
[6]宋东翔, 王怡然,and 马伽洛伦."基于ECharts的高校教师招聘大数据可视化平台构建与应用." 软件 43.05(2022):42-45.
[7]甘丽新, et al."基于招聘网络大数据的软件行业相关人才需求的挖掘与分析." 信息与电脑(理论版) 34.08(2022):39-41.
[8]陈芬. 浅析网络Cookie[J]. 电脑知识与技术, 2005(35):93-95.
基于分布式的智联招聘数据的大屏可视化分析与预测相关推荐
- python3爬虫系列08之新版动态智联招聘并存取数据库进行可视化分析
python3爬虫系列08之新版动态智联爬取和存取数据库进行可视化分析 本篇是面向新版动态智联爬虫,数据存储到Mysql数据库,最后使用pyecharts读取并可视化分析. 在这之前,上一篇说的是 p ...
- seleniummitmproxy实现智联招聘数据爬取
目录 1 智联招聘数据爬取难点 1.1 动态网页 1.2 复杂的API接口 1.3 selenium 2 智联招聘数据爬取的简便路径 3 mitmproxy的抓包操作 3.1 mitmproxy的安装 ...
- BeautifulSoup爬取智联招聘数据
BeautifulSoup爬取智联招聘数据 警告: 此项技术仅适用于练习,限制大量大规模爬取,在爬取中使用了个人cookie,请注意不要随意泄露,内含个人隐私信息! 如果过分爬取,会造成ip被封! 1 ...
- 深圳python数据分析师招聘_Python爬取智联招聘数据分析师岗位相关信息的方法
Python爬取智联招聘数据分析师岗位相关信息的方法 发布时间:2020-09-23 23:23:12 来源:脚本之家 阅读:88 进入智联招聘官网,在搜索界面输入'数据分析师',界面跳转,按F12查 ...
- python爬虫tableau数据分析_完美!Python爬招聘数据,Tableau做可视化分析
原标题:完美!Python爬招聘数据,Tableau做可视化分析 交流群预热好久的可视化交互大屏来啦 1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于&q ...
- 【大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析
[大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析-哔哩哔哩https://b23.tv/saIKtBH flask web框架,数据使用requests模块爬取数据, ...
- python编程实践(一):统计智联招聘数据
统计智联招聘上,各个编程语言的在招岗位数量. 思路:写爬虫 的第一步永远是先分析网页 1.用谷歌浏览器打开智联招聘官网. 2.右键"检查"->"Network&qu ...
- 实战案例 | Scrapy 集成Selenium爬取智联招聘数据
人生苦短,快学Python! 初学scrapy之后,发现就是效率对比于selenium和requests快了很多,那么问题来了,如果网站设置了反爬,比如User-Agent反爬,cookie反爬,IP ...
- 智联招聘数据爬取准备(1)-智联招聘搜索列表源码解析
网页源码解析 - 智联招聘搜索列表 一开始必须要解析智联招聘搜索列表页,从这里更方便实现各种深层级数据抓取. 网页地址是: http://sou.zhaopin.com/jobs/searchresu ...
最新文章
- 结构事物 java uml,UML考试试题及答案7讲解
- Java 里的字符串处理类StringBuffer简介
- eclipse mac 下载php文件夹,PHP Pydev Eclipse (linux or mac)
- 记一次安装docker的坑
- memset()的效率以及源码分析
- 【Linux】一步一步学Linux——chmod命令(110)
- 转:iOS-CoreLocation:无论你在哪里,我都要找到你!
- macbook不能进系统 备份数据_不基于备份和表,生产系统数据误删就能完全恢复?!...
- python tkinter选择路径控件_如何使用tkinter在Python中选择目录并存储位置
- 2017.10.17 蜘蛛难题 思考记录
- 用汇编的眼光看C++ (之x86汇编)
- 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?
- 年龄是计数还是计量_MSA你只知道计量型和计数型?有哪些类型?分别是什么方法?...
- 管理:权力是用来完成责任的
- 北京交通大学计算机学院复试名单,北京交通大学计算机与信息技术学院考研复试分数线复试通知复试名单...
- “任期”已近20年,这个AI训练工具有点儿问题
- Release That Record Lock!
- java调用ltp分词_开源中文分词工具探析(七):LTP
- PowerBI中常用的DAX函数
- rss订阅 android,是的!我用这些软件订阅 RSS
热门文章
- web 系统原理之路由器和交换机的区别
- html idv垂直居中,2011最新整理idv+css标准.doc
- 【092】召唤神龙-指尖大鱼吃小鱼的魔性游戏
- [法国][无法触碰/触不可及][BD-RMVB.720p.中字][2011最新/法国票房冠军]
- Springboot+Mybatis接口快速上手
- PPT打开密码,如何解密?
- 【领域泛化论文阅读】Birds of A Feather Flock Together:Category-Divergence Guidance for DomainAdaptiveSegmentat
- epub转pdf网站推荐
- 阅读代码时,用excel做笔记。
- Centos6.8系统镜像下载