1 招聘网站岗位数据分析
1.1 案例背景
某线下培训机构预开展数据分析方向课程,需对数据分析岗位的市场需求、就业情况和岗位技能做深入调研
现爬虫组已采集了与数据分析相关的招聘信息,由数据分析组完成分析报告,为企业战略规划提供有力依据。
公司内已开设学科有:游戏,运维
数据分析岗位的各项结果指标应与已有学科进行相对比,例如对比
数据分析、游戏、运维三个行业的招聘需求量、薪资分布等。
数据来源
此次招聘数据来源于来自51job,采集日期:2020-09-15
1.2 问题确认与目标拆解
1.3 问题解决思路
==上面已经指出了要分析的几个点,那么这里就开始进行了。
清洗数据
1. 缺失数据处理(例如:某行数据没有工作名称)
2. 重复数据处理(例如:同一个公司发布多个相同岗位)
3. 限定招聘地区
4. 过滤周边岗位
市场需求量
1. 按城市与岗位进行分组
2. 统计岗位招聘量
就业企业类型分布
1. 对企业类型进行分组
2. 统计每个企业类型的招聘数量与在总招聘量中的占比
岗位薪资
1. 薪资字段规范化(1-2万/月->薪资最小值:10000,薪资最大值:20000,薪资平均值:15000)
2. 按工作年限进行分组,计算每组的薪资均值(即:avg(薪资平均值))
3. 按企业类型进行分组,计算每组的薪资均值
岗位核心技能
1. 建立待评估的岗位技能表
2. 计算各个待评估技能在招聘需求中出现的次数
3. 得到出现次数最高的前30个技能,记为岗位的核心技能
1.4 案例实操
1.4.1 数据导入
==一开始的数据库并不是本地的,而是下载的一个sql文件,那么如何导入数据库呢?需要先在navicat里面建一个同名本地数据库
创建数据库
==这里详细说一下我导入数据库文件的方法,首先在navicat里面新建一个同名数据库,然后上G盘MySQL的安装文件的bin文件夹中(这是我的MySQL安装路径)使用cmd进入终端,然后使用mysql -hlocalhost -uroot -p输入密码进入MySQL,然后使用show databases;来看一下有没有刚刚新建的文件。
然后使用上述代码将sql数据库在本地打开,注意这个d:\test就是文件路径。
然后输入下面代码
终端中:
导入数据库
终端中:
< 后面的recruitment.sql是SQL文件的相对位置
如果提示找不到指定文件,可以在cmd中cd到保存recruitment.sql的父级文件夹,然后再执行导入命令或者用recruitment.sql的绝对地址,例如:mysql -uroot -p recruitment< d:/recruitment.sql
导入数据库是在终端
1.4.2 数据清洗
以"数据分析"招聘岗位数据为例:
缺失数据处理 --> v_data_clean_null
==这里数据清洗利用where来保留无缺失值和空格的字段
重复数据处理 --> v_clean_data_distinct
筛选重复数据,不可以使用:
==因为这条命令要求所有的信息全部一致才会被判定重复,而有些信息其实无关紧要,如下图
故对公司和职位进行去重,保留这个公司在这个职位上发布的最新招聘数据
这里一个公司对一个职位发了两个招聘通知,但是时间不同,我们保留时间更大的。
看上去有点复杂,其实还是很简单的,直接利用排序窗口函数,partition by的参数是公司和职位,order by的参数是时间。这里用的是row_number,这里为什么用这个,而不用rank和dense_rank,因为前者即便结果一样,也会给出不同的排序。
限定招聘地区 --> v_data_clean_workplace
==记住like后面的字符需要用%套上。like就是一个模糊查询
过滤周边岗位 --> v_data_clean_jobname
通过在招聘网站上搜索数据分析,搜索引擎会把在招聘信息中出现“数据分析”关键词的岗位按照一定的顺序列举出来,故得到了很多不是数据分析主方向、但任职要求中提到了数据分析技能的周边岗位
如何过滤周边岗位呢?
工作名称中必须出现指定的关键词,本次筛选的条件是:工作名称中要出现“数据”一词,否则记为周边岗位,过滤掉
对搜索结果的再一次过滤,称为二次检索,大部分的实现方式都是通过包含关键词来判断,而很难一开始就能选择到合适的关键词,所以需要在已有数据中不断尝试,过滤掉太多说明关键词太少、过滤掉太少说明关键词太多或者不准确,找到一个中间值即可
利用这个like模糊匹配来去除周边岗位
最终清洗结果 --> v_data_clean
将v_data_clean_jobname记为当前清洗的结果:
1.4.3 市场需求量
1.4.4 就业企业类型分布
==因为这里的招聘占比需要计算各个企业的招聘量和总的招聘量,一个select是无法完成的,所有这里需要两个select。
这里他将后面两个要查询的字段分别用两个select来写。
这个cast(decimal())感觉完全可以用round来替换
1.4.5 岗位薪资
统计岗位薪资,首先要规范化薪资字段,得到岗位月薪的最大值、最小值、均值
第一步,提取薪资单位
1-5千/月 --> 单位 1000
1-2万/月 --> 单位 10000
40-50万/年 --> 单位 833
1万/年 --> 10000 / 12 --> 月薪
10000 / 12 约等于 833
故40万/年 --> 40 * 833 元/月
==在处理薪资这些单位不统一的信息时,需要先对单位进行统一
第二步 得到工资区间最小值、最大值与均值
==薪资不仅单位不统一,其值还是一个范围,所以还得再处理一下
第三步 按工作年限分组,求各组平均薪资
第四步 按企业类型分组,计算平均薪资
1.4.6 岗位核心技能
在skill_table中预先准备好了63个待评估技能点
第一步,获取前30名高频技能点及其出现频数
1.5 以相同的方式分析“游戏”和“运维”行业
1.6 撰写报告