打工人,打工魂,打工都是人上人!年底了,打工人又又又准备换工作啦,准备找什么样工作呢?游泳健身…啊不,数据分析了解一下?送你一份最新出炉的数据分析师求职大礼包!
接下来开始我们的分析之旅吧!
一.分析思路
二.获取并理解数据
利用爬虫爬取拉钩11月某天挂出的数据分析相关职位。拉钩爬虫相对比较简单,网上也有较多思路可以借鉴。代码详情如下:
import requests
import json
import xlwt
import time
import random
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Upgrade-Insecure-Requests': '1',
'Referer':'https://www.lagou.com/jobs/list_java?labelWords=&fromSearch=true&suginput=&labelWords=hot',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4' }
total_list = []
#页数; 一般默认上限是30页, 其实后面还可以继续请求
for page_num in range(0, 10000):
print("requst page: ", page_num)
#假如ip被封可以选择走ip代理
proxies={ "http":"219.157.145.68:8118", "http":"120.83.110.86:9999", "http":"125.105.109.62:3128", "http":"171.221.35.32:8118", "http":"122.193.245.108:9999", }
#发送Get请求更新cookie
session = requests.session()
session.get('https://www.lagou.com/jobs/list_java?labelWords=&fromSearch=true&suginput=&labelWords=hot',headers=headers)
#使用更新后的hsession请求Ajax json
data = { 'first':'true', 'pn':page_num, 'kd':'数据分析' }
#去页面抓包,然后获取那个url填进来(页面,kd 这些是自己填的;其他过滤条件去页面抓)
rep = session.post('https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false',headers=headers,data=data)
#只关心返回结果中的职位信息
result_json = rep.json()
position_json = result_json["content"]["positionResult"]["result"]
if not position_json:
print("get result is null... continue....break")
print(result_json)
time.sleep(random.randint(1,5))
break
total_list.append(list(position_json))
#随机等个1-5s再发请求
time.sleep(random.randint(1,5))
#开始写excel
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')
print("get total page: ", len(total_list))
row_nums = 1
for page_idx in range(0, len(total_list)):
for idx in range(0, len(total_list[page_idx])):
dict_item = total_list[page_idx][idx]
#第一页第一条要写表头
if (page_idx == 0) and (idx == 0):
label_nums = 0
for key in dict_item:
worksheet.write(page_idx, label_nums, label=key)
label_nums = label_nums + 1
label_nums = 0
for key in dict_item:
worksheet.write(row_nums, label_nums, dict_item[key])
label_nums = label_nums + 1
row_nums = row_nums + 1
print("write total nums: ",row_nums)
workbook.save('全国数据分析职位.xls')
爬虫运行结果会直接保存到Excel,打开之后部分数据截图如下:
三.数据清洗
接下来我们按步骤对数据进行清洗:
1.选择子集
根据我们的问题,我们只需要
这12列,其他的列我们可以隐藏或删除(数据清洗一般是建立副表);
2.删除重复值
选择“数据→删除重复值→positionid→确定”,进行删除;
3.缺失值处理
postitionid和city两列都是2661行数据,说明无数据缺失。在其他项目中若有数据缺失,将缺失数据整行删除;
4.一致化处理
把salary这一列进行处理,增加minsalary、maxsalary、avgsalary三列数据,分别双击+向下填充;
5.数据排序
按照avgsalary这一列降序排序,选中avgsalary一整列,点击“开始→排序与筛选→扩展选定区域→排序”;
6.异常值处理
表格有一行异常值“#VALUE!,将异常值整行删除。
四.构建模型与分析
1.招聘需求分析
1) 职位集中于一线城市,北京、上海占据总量的近56%;
2)北上深广四个1线城市占据前四位,而北京、上海分别以1031个职位,38.77%的占比和453个职位、17.04%的占比遥遥领先,所以想要找数据方面的工作,去北京和上海找到工作的概率会大一些;
3)行业-职位数占比表明,职位的行业主要集中在金融、文娱|内容、移动互联网、电商,消费生活(TOP5占比56.5%),求职时应重点考虑占比排名靠前的行业;
4)规模越大的公司需求量最大,2000人以上规模的公司的需求数量最大;
5)从公司融资阶段来看,上市公司和不需要融资占比大,共占比51%。占比最少的是天使轮的2%。原因可能在于,天使轮的公司大都是初创型企业,除非它是做数据服务的,不然,这个阶段的公司重点可能会更偏向产品的研发或者其他,而不是数据分析。
2.薪酬与福利
1)根据描述分析统计,数据分析职位平均薪水是19.59k,众数30k,平均薪水还是很高的。按照平均薪水的降序排列,制图如下,平均薪水前5名的分别是北京、上海、杭州、深圳、厦门。这个和按照职位招聘数量排名前5名的城市有4个相同;
2)根据不同的工作年限要求,职位数于薪资变化情况如下图所示:
企业职位中10年以上的职位数据较少,可能和中国大数据刚起步不久,行业内大多数从业者的工作经验很少有十年以上有关;
3)对工作经验的薪酬进行分析,从1-3年,3-5年,5-10年10年以上,每一段工作经验相较之前都有一个比较明显增长,可以看出工作经验对薪资提升的帮助是很大的。而且从图中可以看出工资的谈价空间很大,应聘者可以根据实际情况争取比较满意的薪酬;
4)福利水平较高,工作氛围较好,社保、氛围与发展空间相关词出现最频繁。
对职位标签进行分词统计,获得词云图,并对TOP 10标签进行了统计:五险一金,带薪年假,发展空间大,绩效奖金,岗位晋升,弹性工作,节日福利,下午茶,扁平管理。
3.技能需求
对数据分析岗位描述进行聚合并分词,获得词云。由词云可以看出,职位的技能需求侧重业务与技术相结合,大体上业务侧重于用户增长、运营等,技术侧重于SQL和python等,具体需求因公司而异。在求职准备时,可以根据自身情况,选择职业类型,并根据所需技能进行重点的准备。
最后总结一下:从城市需求、行业分布、公司规模、工作年限等几个方面对数据分析岗位做了相关解析,相信大家对这个岗位基本情况也有了初步认识,不过实际选择会更加困难。不同的城市竞争是不一样的,房贷压力、幸福指数、城市未来发展潜力都不一样,希望各位大家都能找到自己满意的职位~