大数据火了这么多年,行外只闻其名,行内恐怕也有部分同学不明其意。我个人的理解总结为八个字是“知识发现,辅助决策”,当然市场决定供需关系,我们看看公司们是怎么定义的。
数据介绍
这里爬取了Boss和拉钩,两个我觉得实际体验不错的口碑招聘平台,范围为国内主要城市。数据运营共1201条数据,数据分析5166条,数据挖掘2162条。
维度基本都覆盖到了(成年人不做选择,我都要)
先放结论,处理过程下文会提到
描述统计
1、学历
首先看看三个岗位的学历要求:
数据挖掘要求最高,基本就是本硕以上,硕士占比最大。
其次是数据分析,学历要求专本以上。
三个岗位对学历的要求分布还是很有区分性的。
(其实挖掘岗位本科也近要求为985,211名校)..这个维度我我我,忘了。。。
2、技能工具(TOP10)
提取了岗位要求里的技能工具统计的频率,占比为频率/样本数。
数据运营:统计工具主要为Excel,菜单操作,简单易懂。四分之一的企业需要会有一定的Sql语言能力,有一定的ppt编写能力,会让你更如鱼得水。
数据分析:Sql是你的必备技能,主流分析工具需要任选掌握(Pyhon、R、Spss、Sas)。除了关系型数据库和分析工具,也要具备一些ppt展示技能哦!
数据挖掘:企业都很认可Python,熟练Java和C也没问题,大数据框架(Spark和Hadoop等)是要熟悉的。
三个岗位在技能工具上也是区分明显呐,从数据运营的统计工具到数据挖掘的数据框架更像是一种映射,由低维到高维,由业务线到车间结构。
3、薪酬
注:数据为北京地区职位薪水
这里只取了工资区间最小值,毕竟能谈到区间最大值的人不会太多。招聘的职位信息里有实习生也有总监、主管职位,我们主要箱线图箱体即可,不同岗位对比它们上下四分位数之间50%的数据分布。对应岗位薪酬区间为:
数据挖掘 15-25k ,数据分析 10-20k,数据运营 9-15k
4、专业和行业
说完它们不一样的,再来说说一样的,三个岗位对专业的需求,和职位所在的行业。
从上图来看,岗位间所需专业要求差不多,主要为统计、数学、计算机。
数据挖掘更侧重于计算机专业,技能工具里编程语言和数据框架都需要的一定计算机知识,也验证了这一点。
对行业进行统计选了top50归类
思路为:对有二级节点的采用二级节点,没有二级节点采用一级节点,如“移动互联网,社交网络”则采用社交网络为类别,对只有一级节点的知名公司,做二级节点填补。
互联网时代,很多行业都能打上互联网+。移动互联网这个节点,太泛化了,不取用。
(ps:以上的归类依据,源于我个人理解和搜索,准确性就…)
综上:电子商务,企业服务,软件应用,文化娱乐,互联网金融这五个行业需求量最大。
这五个行业覆盖了大部分生活所需,用户基数大、数据量大。这时就需要技术的快速迭代,策略的调整分析。
5、相关性
统计了福利数量和岗位职责说明长度是想看看和其他变量有没有一些关系。
城市、职位、经验、学历都改为了有序变量进行分析。
和工资相关性大的变量分别是经验、城市、职位(三个岗位)。
(ps:简单说一下相关系数的适用性
Pearson (皮尔逊相关系数)适用于连续变量,
Kendall Rank(肯德尔相关系数)适用有序变量,
Spearman(斯皮尔曼相关系数)适用于混合变量)
可视化
1、词云图
首先是岗位职责:
(1)
(2)
(3)
猜一猜分别对应的岗位吧。
在清洗数据的过程中,我又发现了些好玩的公司福利,就顺便做了如下图。
嗯,左上角的周末双休赫然在目。数据是我三月末抓取的,不算蹭热度,不算蹭热度。
2、热力图(北京地区)
既然都抓取工作地点了,’憋’浪费,多少也要做点分析。
注:为了方便观测, 我把工资进行了归一化处理。
数据运营:比较集中的位置工资不是很高颜色都很浅,高亮的那三坨是北京著名的(西二旗、中关村、望京)工资高些理所当然嘛。
数据分析:对比数据运营,除了三大企业“圣地”其他位置薪酬待遇有明显变化(左上角,用友科技在北清路可谓是‘一枝独秀’)
数据挖掘:东城区明显稀疏了很多 ,招聘的企业集中在圣地 然后有小部分零散的分布在东城区,西边几乎没有了身影。
注:热力图Html代码出处为"thinkando"博主的简书,感谢分享。
最后:之所以选择这三个岗位是因为在我这里它们的定义是有层次感的,背后的结论更需要展开发现。
比如说数据挖掘狮工作内容会离不开大量的编程和优化。
数据运营更多的是运营的转型,为更好的提升效率,在方法上加入算法和分析的思维,离不开业务。
数据分析呢就介于挖掘和运营中间,更具有灵活性,或许说“不明确”更合适,确实数据分析的帽子比较大,导致企业定义和标准可能都不同。提出问题,解决问题(方法论不限,工具不限,只要分析报告是具有可接受的置信度)找到了关系还需要去解释因果,离不开算法,离不开业务。
它们三个的关系大概就是LV1 2 3的区别吧。
还有很多领域,比如量化、人工智能 、深度学习 等这些都是互通的 。这篇文章就是希望转行的朋友,学习的朋友,找能到自己的方向去学习,选择喜欢的道路走。
正文完,下面会说一些技巧遇到的坑之类
-----我是分割线-----
爬虫
Boss
首先看看Boss的url
<code>https://www.zhipin.com/c101010100/?query=数据分析&page=2 /<code>
城市代码+职位+页数拼接boss的城市代码与通用代码稍有不同,boss尾数全为0 ,通用代码则有着某种神秘的规律。
爬出boss有的城市与通用城市代码匹配就好了,我这里抓取的是国内主要部分城市。
拉钩
拉钩的爬取就稍复杂,首先我选择爬取移动端(一般来说移动端的要比pc端更容易,更好找到参数)。
完整headers信息:
<code>headers = {'Accept': 'application/json',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'm.lagou.com',
'Referer': 'https://m.lagou.com/search.html',
'User-Agent': 'JUC (Linux; U; 2.3.5; zh-cn; MEIZU MX; 640*960) UCWEB8.5.1.179/145/33232',
'X-Requested-With': 'XMLHttpRequest'}/<code>
cookies: 时间戳验证
这里观测到有两个时间戳,后面ID中的参数需要动态获取。
<code>#时间戳
import time
timeStamp = int(time.time())/<code>
cookies: ID验证:cookies中分别有’'LGRID“,”LGSID“,”LGUID“三个ID需要更新,每次需要先从登录界面解析出’'LGRID“然后赋值给上面三个参数。
<code>#每次解析前先获取cookie
response= requests.get('https://m.lagou.com/search.html',headers = headers) #首页获取获取cookies信息
r = requests.utils.dict_from_cookiejar(response.cookies) # 获取cookies
LGRID = r["LGRID"]
#完整cookies
cookies = {
'_ga': 'GA1.2.282698421.1552439781',
'user_trace_token': '20190313091621-9cbdb4ea-452d-11e9-bf8c-525400f775ce',
'LGUID': LGRID,
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%22169749f7b0940f-000e01346be29b-43450521-1049088-169749f7b0a722%22%2C%22%24device_id%22%3A%22169749f7b0940f-000e01346be29b-43450521-1049088-169749f7b0a722%22%7D',
'gate_login_token': '54263b8e7f0637ea58e0d3c8a6d748ea421373b97485b507d5879e03110ed09a',
'index_location_city': '%E5%B9%BF%E5%B7%9E',
'_ga': 'GA1.3.282698421.1552439781',
'_gid': 'GA1.2.594275610.1552873769',
'JSESSIONID': 'ABAAABAAAFDABFG7AFF23EC905A057624DE2DA9F2C5A670',
'LG_LOGIN_USER_ID': '3d801e74ee69688bcba8956dbc229f04bc903785911f14bed37f73ea58f7b9ae',
'_putrc': '9BCD3BCD35C44FB8123F89F2B170EADC',
'login': 'true',
'unick': '%E6%9D%A8%E5%B8%86',
'X_MIDDLE_TOKEN': '43e31cab4df733eb0fb2d6e747a2194a',
'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6': '1553052524,1553054164,1553054251,1553054686',
'LGSID': LGRID,
'_gat': '1',
'LGRID': LGRID,
'Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6': timeStamp #时间戳
}/<code>
大概思路就是:访问首页获取cookies信息-访问职位页面获取职位id-获取详情页
在拉钩的抓取上也是废了些时间,主要就是找到上面那些关键点。最好,要记得文明抓取啊…
分词
使用库:jieba 停留词表:除通用停留词,还添加了“几种”,”至少“,“常用”等词。自定义词典:添加部分工具名词,部分专业名词等。
热力图
百度地图开放平台进行免费注册使用方法:
<code>http://api.map.baidu.com/geocoder/v2/?address=‘待解析地址’&output=json&ak=‘用户ak’ak&callback=showLocation //GET请求/<code>
每天可以免费解析6000次哦,详情平台文档都有。
解析后为
试一下精确度,在地址正确的情况下 经纬度转化还是比较精确的。地址比较泛解析效果就不太好了。
数据清洗处理
大部分的时间都花在了这里,对各个维度进行处理转换。简单说一下做了哪些处理:
1.缺失值的填充,连续变量用中位数,分类变量用众数。
2.工资的异常值处理,用分位数缩尾(主要去除那些捣蛋的数据)。
3.工作地点经纬度换算。
4.其他福利的统计和岗位信息的一系列文本处理。一份报告的置信度,一个模型的准确率,对算法的选择和调参优化都是有上限的。
数据处理的好坏更大部分影响了结果,所以这是个耐心活,得慢~慢~来。
閱讀更多 觀瀾知事 的文章