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

栏目: 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

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


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

查看所有标签

猜你喜欢:

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

创新者的窘境

创新者的窘境

克莱顿•克里斯坦森( Clayton M. Christensen ) / 胡建桥 / 中信出版社 / 2010-6 / 38.00元

管理类经典图书 o 被《福布斯》评为20世纪最具影响的20本商业图书之一 o “全球商业书籍奖”获奖图书 “颠覆大师”克莱顿•克里斯坦森经典力作。 《金融时报》/布兹•亚兰及汉密顿全球商务书刊颁发“1997年最佳商务书”奖 “1997年最佳商务‘实用’书”奖 一本书, 让志在必得者战战兢兢, 让犹豫不前者胸有成竹, 掀起激荡决策者的脑力风暴, ......一起来看看 《创新者的窘境》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码