一、简介
本文中主要通过Python爬取了拉勾网的职位信息,包括城市,公司名称,福利待遇,工作地点,学历要求,工作类型,发布时间,职位名称,薪资,工作年限;并使用了pyecharts进行交互性的图表分析。
pyecharts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化。pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。
二、数据爬取
下面是所爬取的一系列变量。
information.append(job['positionId']) # 岗位对应 ID
information.append(job['city']) # 岗位对应城市
information.append(job['companyFullName']) # 公司全名
information.append(job['district']) # 工作地点
information.append(job['education']) # 学历要求
information.append(job['firstType']) # 工作类型
information.append(job['formatCreateTime']) # 发布时间
information.append(job['positionName']) # 职位名称
information.append(job['salary']) # 薪资
information.append(job['workYear']) # 工作年限
information.append(job['companySize']) # 公司规模
information.append(job['financeStage']) # 融资规模
information.append(job['positionAdvantage']) # 福利待遇
information.append(job['createTime']) # 创建时间
information.append(job['positionLables']) # 职位标签
在这里我选择爬取和数据分析相关的职位,一共50页。如果对其他职位进行分析,仅需要修改关键字,后面的可视化步骤基本一致。
抓取结果如图:
三、数据分析
各城市对数据分析岗位的需求量
counts_city=df['城市'].value_counts().sort_values(ascending=True) #不同城市需求量
from pyecharts import Bar
bar = Bar("各城市对数据分析岗位的需求量",height=600)
bar.add("", counts_city.index,counts_city, mark_point=["max"],is_convert=True)
bar.render('各城市对数据分析岗位的需求量.html')
从招聘信息的所在地来看,对数据分析师岗位需求量较大的是四个一线城市以及新一线城市杭州,其中北京和上海分别位列前两位。除了北上广深和杭州外,其他热门城市的需求并不大,所以,如果你想找数据分析相关的工作,最好还是去一线城市寻找相应的机会。
不同规模公司的用人需求差异
scale=['15人以下','50-150人','150-500人','500-2000人','2000人以上']
scale_salary=df.groupby('公司规模')['最小薪资'].count().sort_values(ascending=False)
from pyecharts import Bar
bar = Bar("各规模公司用人需求")
bar.add("", scale_salary.index,scale_salary,is_label_show = True,
)
bar.render('各规模公司用人需求.html')
可以发现2000人以上的大公司对于数据分析岗位的需求要远大于小公司,其次500-2000人和150-500人的用人需求差距并不大。
学历要求
counts_Edu=df.groupby('学历要求')['学历要求'].count() #不同学历分组计数
from pyecharts import Pie
pie = Pie("学历要求",title_text_size = 25)
pie.add("", counts_Edu.index, counts_Edu, is_label_show=True,
)
pie.render('学历要求.html')
其实可以看到,数据分析这个岗位对学历的要求并不是很高,绝大部分岗位的要求都是本科即可,其次有6.93%的数据分析岗位并不在意学历。
那么现在数据分析这个岗位的薪水是个什么水平呢?
#取薪资区间最小薪资
def avg_salary(salary):
salary_list = salary.split('-')
salary_min = salary_list[0][:-1]
return salary_min
df['最小薪资'] = df['薪资'].apply(avg_salary).astype(int)
各城市数据分析岗位的薪资状况
counts_salary=df.groupby('城市')['最小薪资'].mean().round() #按城市分组 统计中位数
counts_salary=counts_salary.sort_values(ascending=False) #排序
from pyecharts import Bar
bar = Bar("各城市薪资状况",width=1400)
bar.add("均值", counts_salary.index,
counts_salary,
mark_point=["max"],
xaxis_type = 'category',
datazoom_type = 'inside',
yaxis_formatter ='K',
)
bar.render('各城市薪资状况.html')
我们可以发现在数据分析这个岗位上,北京、上海、东莞处于第一梯队,月均薪水都超过了15k,佛山、南京、深圳以及杭州位列第二梯队,月均薪水在15k左右,其他城市则处于第三梯队。其中令我比较好奇的是广州的平均薪水,作为四大一线城市之一,虽然生活成本比其他一线城市略低,但均薪却被其他三个兄弟甩了一截。
北上广深杭数据分析岗位薪资分布
city=['北京','上海','广州','深圳','杭州']
work_yr=range(1,51,1)
df2=pd.DataFrame(columns=work_yr)
for j in city:
df1=df[df['城市']==j]
df2.loc[j] = df1.groupby('最小薪资')['最小薪资'].count().astype(int)
df2 = df2.fillna(0)
df2 = df2.astype(int)
df2
from pyecharts import Line
line = Line('北上广深杭数据分析岗位薪资分布',width=1800)
line.add(
"北京",
df2.columns,
df2.loc['北京'],
area_opacity=0.6,
is_fill=True,
symbol=None,
is_smooth=True,
xaxis_force_interval =10
)
line.add(
"上海",
df2.columns,
df2.loc['上海'],
is_fill=True,
area_opacity=0.6,
symbol=None,
is_smooth=True,
xaxis_force_interval = 10
)
line.add(
"广州",
df2.columns,
df2.loc['广州'],
is_fill=True,
area_opacity=0.6,
symbol=None,
is_smooth=True,
xaxis_force_interval = 10
)
line.add(
"深圳",
df2.columns,
df2.loc['深圳'],
is_fill=True,
area_opacity=0.6,
symbol=None,
is_smooth=True,
xaxis_force_interval = 10
)
line.add(
"杭州",
df2.columns,
df2.loc['杭州'],
is_fill=True,
area_opacity=0.6,
symbol=None,
is_smooth=True,
xaxis_force_interval = 10
)
line.render('北上广深杭数据分析岗位薪资.html')
接下来,我绘制了北上广深杭的薪资分布图,看看这5个城市数据分析岗位薪资的具体分布。
从5个城市的薪资分布来看,5个城市的分布都较为接近,其中广州在5-8k占比要多于其他城市。主要薪资梯队为15K和20K,第二薪资梯队为10K和25K。
那会不会是因为广州的招聘信息中,工作经验要求低的岗位占比较高而拉低了整体的薪资水平呢?。
北上广深杭工作经验与薪水(均值)热力图
city=['北京','上海','广州','深圳','杭州']
work_yr=['应届毕业生','1年以下','1-3年','3-5年', '5-10年', '10年以上', '不限' ]
df2=pd.DataFrame(columns=work_yr)
for j in city:
df1=df[df['城市']==j]
df2.loc[j] = df1.groupby('工作年限')['最小薪资'].mean().round()
df2
from pyecharts import HeatMap
list1=[]
for i in range(0,7):
for j in range(0,5):
list1.append([i,j,df2.iat[j, i]])
heatmap = HeatMap('北上广深杭工作经验与薪水(均值)的关系')
heatmap.add(
"",
df2.columns,
df2.index,
list1,
is_visualmap=True,
is_label_show = True,
label_pos = 'inside',
visual_range=[0, 45],
visual_text_color="#000",
visual_orient="horizontal",
)
heatmap.render('北上广深杭工作经验与薪水(均值)的关系.html')
带着上面的疑惑,我绘制了热力图进行进一步的分析,图中的空白部分表示该部分是缺失值。
从横向对比来看,可以明显的看出,随着资历的增加,数据分析师的薪水也会相应提高。
值得注意的是,杭州对于应届毕业生的月均薪水到达了15K。考虑到深圳和上海都为缺失值,很有可能大部分校招岗位并不在拉勾网进行招聘,杭州的月均薪水可能并不具有代表性。
对有5-10年经验的数据分析师,若符合企业的招聘条件,在北上深杭基本平均而言都能拿到20k及以上的薪水。纵向对比来看,广州在各个经验段上的薪资均不及其他三个一线城市,而且差距还不小。所以,广州给的钱确实少。(但还应该结合生活成本进行综合考虑)
由于本文中选择的均为最低薪资,实际薪水还要高于报告中的数值。
福利待遇词云
除了用人需求和薪资,让我们再来看一下,各公司除了薪资以外还提供哪些福利待遇呢?
df3=df['福利待遇'].str.split(r'[,、 ,;]').apply(pd.Series, 1).stack() #分词
from pyecharts import WordCloud
wrdcld=df3.groupby(df3).count()
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", wrdcld.index, wrdcld, word_size_range=[20, 100])
wordcloud.render('福利待遇词云.html')
从词云能够发现,大部分公司愿意提供五险一金或六险一金,带薪年假,弹性工作以及周末双休等福利来吸引求职者。
总结对数据分析师有较大需求的主要还是一线城市,且主要需求来源于中大型公司。
从薪水上看,北京、上海、东莞处于第一梯队,月均薪水都超过了15k,佛山、南京、深圳以及杭州位列第二梯队,月均薪水在15k左右,广州作为一线城市在薪资上并无优势。
杭州对应届毕业生的薪资要高于一线城市。数据分析岗位如果希望薪水超过20k,经验是一个较大的门槛。
大部分公司最常提供五险一金或六险一金,带薪年假,弹性工作以及周末双休等福利来吸引求职者。