如何分析“数据分析师”的岗位?

栏目: Python · 发布时间: 5年前

内容简介:在《考虑到招聘岗位的数据中含有城市信息(city变量),不妨再结合城市与省份的数据,在原有的数据基础上再添加省份字段,代码如下:

前言

在《 手把手带你抓取智联招聘的“数据分析师”岗位! 》一期中我们分享了如何抓取智联招聘中“数据分析师”岗位的数据信息(数据截止到2018年11月4日),在本期我们将基于已有的数据对其作进一步的分析和探索。在探索过程中,我们将围绕如下几个主题进行问题的回答:

  • 哪些省份和城市对数据分析师的需求比较高?
  • 数据分析师岗位在全国和TOP3城市的薪资差异是否显著?
  • 企业在招聘数据分析师岗位时,对应聘者的工作经验和学历要求是怎样的?
  • 不同的工作经验和学历在薪资上是否存在差异呢?
  • 招聘数据分析师岗位的企业,都是哪些类型的企业?

实操

数据分析师在全国的需求分布

# 导入第三方模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读入招聘信息的数据
jobs = pd.read_excel('jobs.xlsx')
# 数据预览
jobs.head(5)

如何分析“数据分析师”的岗位?

考虑到招聘岗位的数据中含有城市信息(city变量),不妨再结合城市与省份的数据,在原有的数据基础上再添加省份字段,代码如下:

# 读取省份与城市的对应数据
Province_City = pd.read_excel('Province_City.xls')
# 将省份信息加入到jobs表中
jobs = pd.merge(left = jobs, right = Province_City, 
                left_on='city', right_on='City')
# 删除jobs表中的City变量(该变量是多余的)
jobs.drop(labels='City', axis = 1, inplace = True)

接下来,我们来探索一下数据分析师岗位在全国各省份和各城市的需求情况:

# 设置中文和负号正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False

# 近5000个数据分析的职位,在各省份的分布(Top10)
jobs.Province.value_counts()[:10].plot(kind = 'bar', color = 'steelblue', alpha = 0.8)
# 显示图形
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,这里显示了全国各省招聘数据分析师岗位数量的Top10,不难发现,前三甲都是国内非常发达的省份。但比较令我吃惊的是山东和安徽排在了江苏前面,所以,个人觉得数据相关的岗位在山东和安徽也有比较好的市场(可能大家还不知道哦,山东在全国的GDP排在了第三呢,绝对是低调的奢华)。在了解了各省份的需求情况,再从城市维度看一下Top10的分布:

# 近5000个数据分析的职位,在全国各城市的分布(Top10)
jobs.city.value_counts()[:10].plot(kind = 'bar', color = 'steelblue', alpha = 0.8)
# 显示图形
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,从城市级别来看,北京、上海和深圳对数据分析岗的需求最多,尤其是北京,她的需求量甚至超过了上海、深圳、合肥的总和。那么,可能会有网友非常关心数据分析师岗位的薪资情况,下面我们就针对薪资做一个探索和介绍。

薪资水平的探索

需要说明的是,由于原始数据中绝大多数的薪资都是一个范围,如“10K-15K”,当然还有其他形式的薪资,如“薪资面议”、“校招”和“1K一下”。对于这些非数值的薪资,我是这样处理的:

  • 对于有范围的薪资,取范围中两个数的平均值,如“10K-15K”的平均值为12.5K;
  • 对于“薪资面议”的情况,当作缺失值,后面将以整体薪资的中位数作为填充;
  • 对于“校招”的情况,根据个人的经验,按3500元的待遇为填充(主要是发达城市,由于发达城市的需求超过了总需求的一半);
  • 对于薪资为“1K以下”的情况,月薪设置为1000; 下面就通过具体的代码,对薪资数据进行处理和探索:
# 将未知薪资的特殊数据提取出来
salary1 = jobs.salary[jobs.salary.isin(['薪资面议','校招','1K以下'])]
# 将有薪资范围的数据提取出来
other_salary = jobs.salary[~jobs.salary.isin(['薪资面议','校招','1K以下'])]
# 提取出薪资的下界
salary_low = other_salary.str.replace('K','').str.split('-').apply(lambda x: float(x[0]))
# 提取出薪资的上界
salary_high = other_salary.str.replace('K','').str.split('-').apply(lambda x: float(x[1]))

# 对于薪资为面议的情况,将其转换为缺失值,并用整体水平的平均值代替
salary1[salary1 == '薪资面议'] = np.nan
# 对于薪资为校招的情况,根据经验将月薪设置为3500
salary1[salary1 == '校招'] = 3500
# 对于薪资为1K以下的情况,月薪设置为1000
salary1[salary1 == '1K以下'] = 1000

# 将处理好的薪资水平作合并
salary2 = pd.concat([salary1,1000*(salary_low+salary_high)/2])
# 使用薪资的中位数填充缺失值
salary2.fillna(value = salary2.median(), inplace=True)

# 绘制薪资数据的直方图(设置组距为3000)
salary2.plot(kind = 'hist', 
             bins = np.arange(salary2.min()-1000,
                              salary2.max()+3000,3000), 
                              color = 'steelblue', edgecolor = 'black')
plt.show()

如何分析“数据分析师”的岗位? 如上结果所示,为全国薪资的直方图,从图中可知,绝大多数岗位的薪资落在3K-12K。如果只考虑北京、上海和深圳这三个城市(因为需求量大,经济发达),可以进一步得到该岗位的薪资范围,代码如下:

# 给salary2向量设置名称属性
salary2.name = 'salary2'
# 将salary2字段加入到jobs数据集中
jobs = pd.concat([jobs, salary2], axis = 1)

# 绘制北上深三个城市的薪资直方图
salary_subset = salary2[jobs.city.isin(['北京','上海','深圳'])]
salary_subset.plot(kind = 'hist', 
                   bins = np.arange(salary2.min()-1000,
                                    salary2.max()+3000,3000), 
                                    color = 'steelblue', edgecolor = 'black')
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,对于一线城市的数据分析师岗位而言,绝大多数岗位的薪资在6K-15K,相比于全国的水平,要高一个阶段。所以,一线城市的薪资和全国比较,还是存在显著差异的。当然,读者如果感兴趣,也可以从定量的角度(采用t检验),验证一线城市和全国的薪资差异。

企业对工作经验和学历的要求

在聊完企业提供的薪资后,就该聊聊他们对应聘者学历和工作经的要求啦。由于学历变量的水平值过多,故考虑把几个相似的学历作合并处理,如将高中、中技、中专和大专设置为”本科以下”,其他的学历不调整:

# 将受教育水平划分为本科以下、本科、硕士、博士和不限五种
jobs.eduLevel[jobs.eduLevel.isin(['高中','中技','中专','大专'])] = '本科以下'

# 设置图框,将横、纵坐标轴作标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')
jobs.eduLevel.value_counts().plot(kind = 'pie', autopct='%.1f%%', 
                                  explode = [0,0.1,0,0,0]) # 突出显示“本科以下”的学历
# 去除y轴标签
plt.ylabel('')
plt.show()

如何分析“数据分析师”的岗位? 如上饼图所示,本科学历的比重最多,占到43.8%;其次是本科以下的学历,占比为37%;排第三的是学历不限,个人觉得对于学历不限的情况,企业可能更看重应聘者的工作经验。很奇怪的是,对于硕士和博士这样的高学历,总共占比才3.8%(个人觉得可能是11月份属于招聘淡季,对高学历人才的需求比较低)。同理,在了解一下工作经验的分布情况:

plt.axes(aspect='equal')
jobs.workingExp.value_counts().plot(kind = 'pie', autopct='%.1f%%')
plt.ylabel('')
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,企业对于工作年限不限的比例最高,其次是1~3年,紧接着是3~5年。这个分布比例其实还是非常特殊的,本人只能将其归咎于11月份时间节点不好,一是用人单位想招人招不到,故放低经验要求,二是有工作经验的人在此时不愿意跳槽。

前文的几个饼图全都是基于全国所有城市的数据绘制出来的,感兴趣的朋友也可以筛选出一线城市(如北京、上海、深圳、广州等),并对其探索用人单位对学历和工作经验的要求。

工作经验和学历对薪资的影响

接下来要探索的就是不同学历和工作经验在薪资上的差异,这里重点关注一线城市(以北京、上海、深圳和广州为例)的数据特征。

# 不同的工作年限,在薪资上的体现(限定在北京、上海、深圳和广州四个城市)
# 筛选指定城市的数据
jobs_subset = jobs.loc[jobs.city.isin(['北京','上海','深圳','广州']),]
# 按工作经验分组
grouped = jobs_subset.groupby(by = 'workingExp')
# 计算各工作经验下的平均薪资
Exp_Salary = (grouped.aggregate('mean')['salary2']).sort_values(ascending = False)
# 绘制条形图
Exp_Salary.plot(kind='bar', color = 'steelblue', alpha = 0.8)
# 添加数值标签
for x,y in enumerate(Exp_Salary):
    plt.text(x,y+1000,'%s' %round(y,1),ha='center')
# 限定y轴范围
plt.ylim(7000,90000)
# 去除x轴标签
plt.xlabel('')
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,工作年限越长的对应的薪资水平就越高(最为突出的是十年以上的工作经验,平均薪资在85000)。总体来说,数据分析的工种在各个工作年限上的平均薪资还是比较高的(相比于其他工种而言,如会计、销售、服务业等)。同理,也可以根据上面的代码,稍作修改,就可以绘制出不同学历在薪资上的差异条形图:

# 不同的学历,在薪资上的体现(限定在北京、上海、深圳和广州四个城市)
grouped = jobs_subset.groupby(by = 'eduLevel')
Edu_Salary = (grouped.aggregate('mean')['salary2']).sort_values(ascending = False)
Edu_Salary.plot(kind='bar', color = 'steelblue', alpha = 0.8)
for x,y in enumerate(Edu_Salary):
    plt.text(x,y+1000,'%s' %round(y,1),ha='center')    
plt.ylim(7000,20000)
plt.xlabel('')
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,硕士的平均薪资是最高的,其次是本科,而博士学历还是挺出乎预料的,尽然排在了第三。后来从数据中查询发现,博士学历的岗位只有三个,都属于北京的岗位,薪资分别是6K-12K、15K-25K和10K-20K。需要注意的是,这里探索得到的结论(博士学历薪资第三)并不代表普遍现象,可能还要归咎于爬出来的数据属于11月份的时间节点,如果是来年的3~4月份,也许数据会更加接近真实。

OK,横向对比工作经验和学历水平,不难发现,工作经验绝对能够影响到薪资水平,试想,如果站在企业的角度考虑,相信他们更看重的是应聘者的工作经验,而非学历。

企业的类型分布

最后,再来探索一个问题,招聘数据分析师岗位的企业,都属于哪些类型的企业呢?这里通过 Python 代码绘制企业类型的条形图:

# 各企业类型的分布比例
(jobs.type.value_counts()/jobs.shape[0]).plot(kind = 'bar', color = 'steelblue', alpha = 0.8)
# 显示图形
plt.show()

如何分析“数据分析师”的岗位? 如上图所示,在搜集的近5000个数据分析职位,民营企业占到一半以上;其次是股份制企业,占比为18%左右;排在第三的是合资企业,这三类企业占到所有企业的80%以上。

结语

OK,使用Python完成数据分析岗的探索和分析就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

关于Python的其他知识(包括数据的清洗、整理、运算、分析、可视化和建模),读者可以查阅我的新书《从零开始学Python数据分析与挖掘》,如果您对书中的内容有任何疑问,都可以联系我。

本文中的代码和数据可以从百度云盘中下载,只需关注“数据分析1480”公众号,并回复“智联招聘”即可。

版权声明: 作者保留权利。文章为作者独立观点,不代表数据人网立场。严禁修改,转载请注明原文链接:http://shujuren.org/article/784.html

数据人网: 数据人学习,交流和分享的平台,诚邀您创造和分享数据知识,共建和共享数据智库。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法的乐趣

算法的乐趣

王晓华 / 人民邮电出版社 / 2015-4 / 79.00元

算法之大,大到可以囊括宇宙万物的运行规律;算法之小,小到寥寥数行代码即可展现一个神奇的功能。算法的应用和乐趣在生活中无处不在: 历法和二十四节气计算使用的是霍纳法则和求解一元高次方程的牛顿迭代法; 音频播放器跳动的实时频谱背后是离散傅立叶变换算法; DOS时代著名的PCX图像文件格式使用的是简单有效的RLE压缩算法; RSA加密算法的光环之下是朴实的欧几里德算法、蒙哥马利算......一起来看看 《算法的乐趣》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换