基于Python 语言的招聘信息可视化分析
杨
众
(中国刑事警察学院,目前流行的编程语言
辽宁沈阳110000)
收稿日期:2019-11-26
0引言
根据IEEE2019年对编程语言的排名,Python 语言高居榜首,并且连续3年夺冠,已经超越Java 和C 语言,被称为当今最流行的编程语言。
目前,国内对Python 人才的缺口已经高达50万,使得相关职位的薪资和待遇逐年攀升,部分高精尖职位如人工智能和大数据开发等人才更是稀缺,不少公司开出30万元的年薪都招不到人。IT 领域人才招聘的渠道主要集中在互联网招聘和熟人推荐,文章利用Python 语言的爬虫、数据存储、处理和展现分析技术对当前主流的招聘网站进行分析,从数据层面反映了当前IT 领域对Python 技术人员的需求情况。
1相关技术
1.1Python 语言背景
Python 语言是一种开放源代码、免费的跨平台高级语言,
由Guido van Rossum 于1989年发明。Python 语言被称为“胶水语言”,它可以非常容易地把Java 和C++等主流语言粘在一起,实现程序之间的联动。此外,Python 语言还具有入门快、简单高效、运行可靠、可扩展和数据处理能力强等特点[1]。Python 语言拥有大量的第三方开源库,使其在互联网、数
据分析、云计算、网络爬虫、自动化运维、Web 开发和人工智能领域得到了广泛的支持和应用。
1.2Scrapy 爬虫框架
网络爬虫是Python 应用中的一个分支,
又称为全网爬虫,
爬行对象可以从一些种子扩充到整个Web,主要为门户站点、搜索引擎和大型的Web服务商提供采集数据[2]。Scrapy框架是Python中最著名、最受欢迎的爬虫框架,完全通过Python语言进行编写,基于Twisted的异步处理框架,架构清晰、成熟,模块之间的耦合度低、可扩展性强,可以应用在数据挖掘、信息处理和存储历史数据等一系列的程序中。
1.3Echars可视化库
Echarts是由百度公司开发的一款基于JavaScript技术来实现的开源Web可视化库,称为商业级数据图表。Echars底层依赖轻量级的canvas类库ZRender,提供直观、友好、可交互和高度个性化定制的数据可视化图表,如折线图、柱状图、散点图、饼图、K线图、雷达图和位置坐标图等上百个图表。
Echars的架构分为ZRender层和Echars层两部分,其中ZRender层对图形动画、渲染引擎和一些基本的用户交互方法进行了封装;Echars层包含了具体的调用接口、视图和一些交互组件。目前,Echars已经成为国内互联网行业最热门的可视化工具,被百度、阿里、腾讯、华为和京东等公司所使用。
2数据获取
本文数据主要通过某大型互联网招聘网站进行爬取,整个过程通过Python语言进行编写。在数据爬取过程中,采用了模拟请求登录、动态网页抓取代理IP和多线程等技术手段。数据爬取后进行采集分析,对数据进行了清洗和转换处理,并存储到MySql数据库,最后通过Echars可视化库对数据进行展现和分析。
2.1框架搭建
通过比较流行的Scrapy爬虫框架进行编程获取,对网站中的岗位名称、工作年限、学历、岗位性质、公司性质、公司规模、公司全称、业务方向、所在城市、福利待遇、工资标准和发布日期等12条信息进行抓取。
2.2数据定义
程序items.py数据结构定义数据容器,对应聘者比较关心的信息字段进行了定义,例如岗位要求、工
资待遇和工作城市等,部分代码如下:
class positionitem(scrapy.Item):
Jobname=scrapy.Field()#定义岗位名称
WorkYear=scrapy.Field()#定义工作年限
Education=scrapy.Field()#定义学历
······
2.3框架设计
编写Spiders.py文件,其中parse()方法负责具体的爬取实现,resposne是start_urls里面的链接爬取后的结果,通过xpath
选择器来对response变量包含的内容进行解析,部分代码如下:
import scrapy
from position.items import positomItem
class positionSpider(scrapy.Spider):
allowed_domains=[‘’]#过滤爬取的域名
start_urls=['']#要爬取的网站
def parse(self,response):
Position_list=response.xpath
('//*[@class="pList"]/li')
for position in Position_list:
item=positomItem()
tem['Jobname']=positionin.xpath('div[2]/h3/a/text()')
.extract_first()#解析岗位名称
item['WorkYear']=positionin.
xpath('div[2]/div[1]/div/p[1]/strong/text()')
.extract_first()#解析工作年限
2.4数据处理与存储
本设计采用MongoDB数据库作为数据源存储,MongoDB 作为非关系型数据库,基于Key-Value形式保存数据,这点与Python字典非常相似[3]。该语言可轻松横向拓展、分片和集,能够轻松应对爬虫字段变化等情况,非常适合存储大规模爬虫数据。
在Python中使用MongoDB,需要安装驱动,并且导入驱动包。创建并进行访问数据库,数据库创建代码为Client= MongoClient(‘localhost’,27017)[4]。数据库创建后需要实现对数据的处理方法,程序pipelines.py实现了Item pipelines项目管道的具体实现,包括编写数据清理、去重等方法,以及实现数据存储。根据对招聘网站的解析,在工作年限字段,有部分内容为“不限”或“迎接毕业生”,为了便于统计和分析,将这2类信息的工作年限设置为0[5]。有部分含有“实习”的工作岗位,由于本分析仅限于全职岗位,故将实习岗位删除。最后,将处理好的数据存入MongoDB数据库,并且在settings.py中定义好数据库的链接信息,在pipelines.py中实现MongoPipeline方法,部分代码如下:
import pymongo
class MongoPipeline(object):
def open_spider(self,spider):#数据库链接
sel.client=pymongo._uri)
self.db=self._db]
def process_item(self,item,spider):#插入数据
name=item.class.name
self.db[name].insert(dict(item))
return item
def close_spider(self ,spider):#数据库关闭
self.client.close()
经过以上处理后,
最终MongoDB 中共收集存储了15000条招聘信息数据,数据存储结构如图1所示。
图1数据库存储结构
3数据展现和分析
3.1数据展现的实现
数据结果的图形化采用了Echars 可视化库,根据数据绘制出了柱状图、折线图、饼状图和地理坐标系来进行招聘数据展现。因为本文中涉及的图表仿真绘制比较多,
节选招聘行业柱状图的程序进行详细讲解,
其他图表实现方式基本类似,会在行业情况分析中带出,
具体实现方式如下:①Echars 的引入:
通过语句<script src="echarts.min.js"></script>来引用Echars 库[6]。
②创建Echars 的DOM 容器,方法如下:
<div id="main"></div>③具体绘制招聘行业数据柱状图图表代码:function echarts_1(data){
varmyChart
=echarts.init (ElementById
('echart1'));
//初始化echarts 实例
option ={tooltip:{},//柱形图阴影样式grid:{},
//柱形图与外容器间距
xAxis:[{type:'category',
data:data['echart_1']['x_name'],
//横坐
标轴取值
axisLine:{
show:true,lineStyle:{}//横坐标线宽
},
axisLabel:{}//x 轴数据标签显示样式
}],
series:[
//纵坐标轴
{type:'bar',
data:data['echart_1']['data'],//纵坐标轴取值barWidth:'35%',//柱状图宽度itemStyle:{
color:'#2f89cf',//数值为0时不绘制该柱形
opacity:1,//柱形图圆角barBorderRadius:5
}
}]}
④图表展现方法为:myChart.setOption(option)。
3.2行业情况分析
通过对15000条招聘数据进行可视化实现,
对行业及职位数量进行分析,出了Python 招聘岗位应用前6名行业,它们的排名和数量分别为移动互联网招聘数据有4893条信息、数据服务有2981条、金融行业有2211条、电商行业有2107条、信息安全有1423条、游戏行业有1001条、其他行业有376条信息。可以看出,
随着采用Python 技术的互联网网站及应用越来越多,
对Python 工程师的需求也最大。3.3工作经验要求
在Echars 程序的series 部分,通过设置markPoint{data:[最大值,最小值]}可以设置数值曲线的最大值和最小值[6]。从工作经验要求曲线中可以看出1/3的岗位均要求3~5年的工作经验,共有5700条招聘信息,应届毕业生和超过10年工作经验的人需求最少,
仅剩600条招聘信息。3.4工资情况
在Echars 程序中markLine 属性设置data:{type:'average',name:'平均值'}可以计算出曲线平均值[6],如图2所示。从工资曲线中,可以看到,Python 岗位的平均工资为每月19134元,其中招聘的应届毕业生的工资最低,平均仅为8030
元
,招聘3~10年以上工作经验工资最高,
达到27380元。图2工资情况曲线图
从曲线趋势中可以发现,
经验在3~5年左右的程序员工资会有一个较大提升,超过行业内平均工资,结合上面工作经验曲线可以发现,这些技术人员的需求量也最大,所以相应的工资给的也比较多。经验在5~10年内工资将会达到一个比较高的水平,但是招聘需求量有所递减。经验要求超过10年的变化不大甚至还有些回落的趋势,分析10年以上的程序员虽然经验丰富,但是年龄也偏大,
工资变动不大。3.5学历要求
通过学历要求饼状图可以发现大部分Python 岗位对学历要求不高,岗位需求普遍集中在本科生和专科生,本科生共有7512条,占50%;专科生共有5249条,占35%;硕士研究生有1510条,占10%;博士生有148条,仅占1%;不限学历的招聘信息有613条,
占4%。3.6公司规模情况
通过对公司上市情况和公司人员规模情况进行分析,发现Python 岗位招聘的公司规模大部分以中小型企业为主。没有经历过融资的公司为1493家占47%,上市公司为655家占19%。在公司规模上,以150人以下的小公司居多为1495家占44%,2000人以上的大型公司为701家占20%。
图5公司规模情况综合图
3.7地区城市
在参数geoCoordMap 中定义城市坐标位置,并且通过Convert Data 将坐标数据值进行拼接,
最后通过setOption 函数对地图进行展现,形成坐标地图。通过对岗位地图坐标图进行分析,Python 岗位数量城市分布由多到少分别为:北京、广州、深圳、上海、成都、杭州、西安、南京、武汉和苏州等10个城市。可以发现,Python 语言技术需求比较大的几个城市仍然是互联网比较发达的北上广深等一线城市,Python 技术从业者在一线城市有比较大的发展。
4结束语
本文利用比较流行的Python 语言Scrapy 框架对互联网数据进行采集和分析,并通过Echars 可视化图表将分析出来的数据进行多元展现,采用的方法为在互联网下的大数据分析和决策支持提供了思路。通过对互联网Python 岗位的招聘信息进行分析可以发现,在一线城市中从事互联网行
业、具备3~5年工作经验的本科生最为抢手,工资待遇也比较不错,为IT 行业的求职者提供了方向。
参考文献
[1]王芳.基于Python 的招聘网站信息爬取与数据分析[J].信
息技术与网络安全,2019,38(8):42-46.
[2]李文龙.基于Docker 集的分布式爬虫研究与设计[D].杭
州:浙江理工大学,2017.
[3]贾柠瑜.基于python 爬虫的岗位数据分析———以拉勾网为
例[J].信息技术与信息化,2019(4):64-66.
[4]李璋.基于Hadoop 的互联网数据营销系统的设计与实现
[D].北京:中国科学院大学,2017.
[5]林长谋,黄玮.基于Python 的就业岗位数据获取与预处理
[J].电脑知识与技术,2019,15(12):6-7.
[6]赵海国.Ajax 技术支持下的ECharts 动态数据实时刷新技
术的实现[J].电子技术,2018,47(3):25-27.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论