分析了5000+数据分析岗位后发现这么几个规律

640

旁友,你一定听说过“人人都是产品经理”这句话。但你可能不知道,让“人人都是XX”句式火遍大江南北的《人人都是产品经理》,已经9岁了。

9年,从“人人都是产品经理”的呼声震天撼地,天下莫能与之争,到“人人都是运营”,“人人都是数据分析”的来势汹汹。市场对数据分析、运营的偏好仿佛已经完全胜过了产品。

然鹅事实真的是这样吗?今天,我们一起从数据的角度出发,看看人人都是产品经理这句话,在运营和数据面前,还能不能站得住脚。(这里先不谈理论,从实际的岗位需求出发。毕竟,从理论角度讲,产品、运营、数据的思维人人都值得学习)

从岗位需求来讲,人人都是XX,其实蕴含着两层意思:

  • 岗位具有潜力,人心向往之;

  • 岗位门槛没那么高,努努力就可以切入。

这两层意思就是本次分析的主线任务。

我们从BOSS直聘入手,分别以“产品"、“运营”、“数据分析”为搜索词均匀爬取,共爬取5039条数据,作为我们分析的源数据。

注:搜“产品”是为了和“运营”匹配,搜“数据分析”是要排除掉偏算法挖掘类的岗位。完整爬取代码已放在文末。

P1  三大岗位前景如何?

1、产品、运营、数据分析谁最有钱景?

一个岗位要人人神往,Salary一定要有竞争力。首先,我们看一看,在同等学历,同等工作经验的前提下,不同岗位平均薪资(工资都是区间,这里采取最低+最高的平均值作为平均薪资)分布情况。

  • 大专学历(总人数占比27.49%):

640?wx_fmt=png

在大专学历这个统一的起跑线上,产品经理平均工资体现出一定的优越性,在“3-5年”和“5-10年”这两档明显领先运营和数据分析岗,而市场上只有运营岗对10年以上的大专学历有招聘需求。

  • 本科(人数占比69.35%):

640?wx_fmt=png

显而易见,本科产品经理在不同工作年限全面碾压运营和数据岗。基于样本数据,刚毕业(1年以内)产品经理的平均工资竟然高出数据分析接近4K。总体来看,本科平均薪资遵循着产品 > 数据 > 运营的原则

  • 硕士及以上(人数占比3.16%):

640?wx_fmt=png

当硕士成为学历筛选的门槛,运营岗消失了。1年以内工作年限的产品经理可谓强无敌,但随着工作年限要求的提升,数据体现出强劲的后劲,1-10年的工作经验,数据分析都领先于产品经理。

眼尖的朋友肯定发现了,为什么”1年以内经验”产品经理的平均工资高于“1-3年”的?回溯数据源发现:

640?wx_fmt=png

从分布来看,工作1-3年的产品工资集中在11K而工作年限1年以内的工资集中在8K,完全符合我们预期。但由于目前市场存在一些给1年内工作经验的同学开出30K+的公司,直接拉高了这个年限岗位的平均工资。

注:本次分析主要是针对不同岗位的对比,这个因素对岗位间的横向对比影响不大,暂不做进一步处理。

目前市场上本科岗位的需求量最大(69.35%),在同样工作年限的情况下,本科学历的产品薪酬全面领先;数据分析则在硕士(岗位人数占比3.16%)中后期表现亮眼。

640?wx_fmt=png

2、坑位规模如何?

如果要换坑的话,哪个岗位跳到大坑(规模更大的公司)的可能性更大呢?

640?wx_fmt=png

市场整体上对于产品、数据、运营的需求呈现出明显的双峰特征,即人数在100-499人的和1000-9999人两档规模的公司人才需求最旺盛。

从岗位角度来看,产品岗的需求主要集中在1000-9999人规模的中大型公司。数据需求也聚焦于该区间,但占比和产品相比少了6.84%。而运营则最受中小型公司(100-499人)青睐。

公司规模的大小也是很多朋友做选择的重要考量因素,而从公司人数规模来看,产品坑位更大(大公司更多)

640?wx_fmt=png

前两个回合来看,人人都是产品经理,或者说人人都想成为产品经理这句话,可谓涛声依旧。

P2  哪个岗位更容易切入

上两轮PK,在学历和经验上已经初窥端倪,这一轮我们继续深挖一下不同岗位在这两方面的从业门槛如何,人人都是产品/运营/数据分析,是不是意味着人人都能成为他们呢?

3、岗位学历要求

640?wx_fmt=png

从需求方来看,运营岗学历门槛最低,49.89%的岗位对于学历的要求是大专(及以上),产品和数据岗主要集中在本科,占比78%+,数据分析在硕士学历上占比8.51%凸显了高门槛。

如果说哪个岗位从业门槛最低,结果显而易见。

640?wx_fmt=png

4、岗位经验门槛

640?wx_fmt=png

产品需求主要集中在3-5年(占比40%+),5-10年的需求占比和1-3年的持平;运营偏爱小鲜肉,3年以内的岗位需求接近70%;数据和产品类似,但是3年内的需求要远大于产品

640?wx_fmt=png

P3  谁喜提996的可能性更大

朋友,做好变秃变强的准备了吗?

传说,一个优秀的互联网人必须做好三件事,吃饭,睡觉,996。

这次我们不妨开一开脑洞,根据职场黑话来量化996这一指标,看看哪个岗位被996的可能性最大。

又听说,职位描述里面的“抗压能力强”、“工作时间弹性大”已经成为996的等价黑话,所以,我们采用粗暴的判定法,如果职位描述包含“抗压”、“压力”、“弹性”关键字,就把这个职位打上“潜在996”的标签。粗暴判定完之后,可视化之:

640?wx_fmt=png

嗟乎,根据我们的脑洞暴力判断法,有25%的公司具有996潜质,那么,这些公司在各岗位是怎么分布的呢?

640?wx_fmt=png

产品和运营两个岗位是拉动996的两架马车,具备996潜质的公司占比分别为28.91%和29.37%,相比之下,数据分析17.74%的占比倒显得有些闲情逸致了。

640?wx_fmt=png

五局较量下来,产品岗在钱景和坑位规模上轻松取胜,但是在学历、经验要求这两个从业门槛上惜败于运营,最后在996潜质方面,和运营打成平手,被数据分析超越。

产品胜在前景,而运营胜在从业门槛低,容易切入。最后,在双冠军的原则下,人人都是产品经理这句话,依然稳的一匹。

最后,附上完整代码给需要的旁友:

PS:整理不易,觉得有用的话可以“在看”OR“留言”,感蟹~640?wx_fmt=png

import requests	
import pandas as pd	
from lxml import etree	
import re	
from urllib import parse	
import time	
import random	

	

	
#构造网址,输入地区和职位参数,爬取页数默认是10页,目前单区域最多爬取10页	
def format_url(area,keyword,num = 10):	
    urls = []	
    job = parse.quote(keyword)	
    base_url = 'https://www.zhipin.com/c{}/?query={}&page={}&ka=page-{}'	
    for i in range(1,num + 1):	
        urls.append(base_url.format(area,job,i,i))	
    return urls	

	
#解析单页	
def parse_page(url,headers):	
    	
    result = pd.DataFrame()	
    html = requests.get(url,headers = headers)	
    bs = etree.HTML(html.text)	
    for i in  bs.xpath('//div[@class = "job-primary"]'):	
        #岗位名称	
        job = i.xpath('div[@class = "info-primary"]/h3/a/div[@class = "job-title"]')[0].text 	
        #薪资水平	
        salary = i.xpath('div[@class = "info-primary"]/h3/a/span')[0].text	
        combine = i.xpath('div[@class = "info-primary"]/p')[0].xpath('string()')	
        #城市	
        index1 = re.search('经|[0-9]|应|实',combine).span()[0]	
        city = combine[:index1]	
        #city = combine.split('  ')[0]	
        #combine = combine.split('  ')[1]	
        split = re.search('年|限|生',combine).span()[0]	
        work_year = combine[index1:split + 1]	
        education = combine[split + 1:]	

	
        #公司名称	
        company_name = i.xpath('div[@class = "info-company"]/div/h3/a')[0].text	
        st = i.xpath('div[@class = "info-company"]/div/p')[0].xpath('string(.)')	
        	
        try:	
            split1 = re.search('已|不|未|天|[A-Z]',st).span()[0]	
            split2 = re.search('\d',st).span()[0]	
            #公司类型	
            company_type = st[:split1]	
            #公司规模	
            company_scale = st[split1:split2]	
            #公司人数	
            people = st[split2:]	
        except:	
            print('...' + company_name + '规模字段或有问题')	
            company_type = None	
            company_scale = None	
            people = None	
    	
        job_url_part1 = i.xpath('div[@class = "info-primary"]/h3/a/@href')[0]	
        job_url_part12 = i.xpath('div[@class = "info-primary"]/h3/a/@data-itemid')[0]	

	
        cache = pd.DataFrame({'岗位名称':[job],'薪资水平':[salary],'城市':[city],'工作年限要求':[work_year],'学历要求':[education],	
                             '公司名':[company_name],'公司类型':[company_type],'公司规模':[company_scale],	
                              '公司人数':[people],'JOB_ID1':[job_url_part1],'JOB_ID2':[job_url_part12]})	
        result = pd.concat([result,cache])	
        	
    return result	

	

	
#现在单个城市只能爬取10页,要想抓取不同城市的更多数据,须先获取各城市的编码	
def get_city_data(headers):	
    city_data = pd.DataFrame()	
    city_url = 'https://www.zhipin.com/common/data/city.json'	
    html = requests.get(city_url,headers = headers)	
    bs = json.loads(html.text)	
    for i in bs['data']['hotCityList']:	
        city_code = i['code']	
        city_name = i['name']	
        cache = pd.DataFrame({'city_code':[city_code],'city_name':[city_name]})	
        city_data = pd.concat([city_data,cache])	
    return city_data	

	

	
#输入爬取的职位,爬取多少个城市	
def run(keyword = '产品',city_num = 6):	
  #获取所有城市编码	
  city_data = get_city_data(headers)	
  final_result = pd.DataFrame()	

	
  for area,c_name in zip(city_data['city_code'].values[:city_num],city_data['city_name'].values[:city_num]):	
    count = 1	
    cache = pd.DataFrame()	
    print('这是{}的地盘'.format(c_name))	
    urls = format_url(area,keyword,num = 10)	
    for url in urls:	
          result = parse_page(url,headers)	
          time.sleep(5.2 + random.random())	
          cache = pd.concat([cache,result])	
          print('完成第爬取{}页'.format(count))	
          count += 1	
      	
    print('-----------------------------')	
    print('')	

	
    final_result = pd.concat([final_result,cache])	

	
  return final_result	

	

	

	
if __name__ == '__main__':	
  	
  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}	
  final_result = run(keyword = '产品',city_num = 6)	
  
640?wx_fmt=png
在看点这里
640?wx_fmt=gif

猜你喜欢

转载自blog.csdn.net/lovenankai/article/details/102548377