教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)

简介:

项目背景

在学习数据分析的路上,少不了经常逛知乎,这也是我第一篇在知乎上的文章,写这篇文章的启发来源于@BigCarrey 的一篇文章《数据分析师挣多少钱?“黑”了招聘网站告诉你!》(https://zhuanlan.zhihu.com/p/25704059),该文章给了我一些帮助,让我了解了数据分析岗位相关的信息,但同样也留给我一些疑问,该文章分析的数据分析师所需技能的结果丝毫没有R的踪影,尽管是一年前的分析,我觉得应该不可能不存在。

因此,抱着证实R语言这款工具的想法,以及希望了解当前企业对数据分析岗位的需求,开始了一次针对招聘网站的数据分析岗位招聘数据的分析与挖掘实践,避免自己所学习的方向与企业实际需求脱轨。

此实例采用R语言作为分析工具,下面展现的是我整个分析过程。

目标

了解企业当前需要什么样的数据分析人才,以及应该具备的能力和素质。

分析的结果为今后的学习和求职提供指导,也为正在学习数据分析和找工作的朋友们提供一定的参考价值。

问题的分解:

不同地区经验学历企业规模数据分析岗位的需求分布以及对应的薪资分布。

探索数据分析岗位对应的工具型技能与对应的薪资水平及非工具型能力的需求。

数据集的定义

5c467f38b9a3bfc65654be57cdcfb15454931f49

表1:数据分析岗位信息表

b87a33061d2e28c4b505d41517bcaff95a49c563

表2:数据分析岗位技能关键词表

数据获取

数据来源:拉勾网

数据范围:互联网行业、数据分析岗位

数据集:全国数据分析岗位招聘信息数据集(采集样本量:449)

工具:爬虫

时间:所有数据截止2018年3月12日

数据集下载地址:

链接:https://pan.baidu.com/s/1Bz7mA_dnvD1MGTVrZKyhPA

密码:layp

数据处理

步骤1:加载原始数据

#readxl包的read_excel函数
library(readxl)
#数据加载
CN.df <- read_excel("CN_lagou_jobdata.xlsx",1)
CN.df <- CN.df[,c("title","salary","experience","education",
"campany","scale","scale2","description","phase","city")]
#观察数据,分类变量不是因子的格式,且存在不需要的字符
str(CN.df)

步骤2:识别缺失值

#VIM包的aggr函数来识别
library(VIM)
aggr(CN.df,prop=TRUE,numbers=TRUE)
111196f63fc361a3492a4d6b7ed207b82b95d16a


图1. aggr缺失值识别图

幸运的是该数据集不存在缺失值,这是很少遇到的情况。

步骤3:数据清洗

#zoo包的index函数

library(zoo)

#定义数据清洗函数

cleaning <- function(my.data){

#删除重复值

my.data <- my.data[!duplicated(my.data[c("title","campany","description")]),]

#计算平均月薪

min_salary <- as.numeric(sub("([0-9]*).*","\\1",my.data$salary))

max_salary <- as.numeric(sub(".*-([0-9]*).*","\\1",my.data$salary))

my.data$avg_salary <- (max_salary + min_salary)/2

#清理字符串中的不需要的字符

#并将需要分析的字符变量转化为因子,并对部分因子重新编码

my.data$city <- factor(gsub("[/ ]*","",my.data$city))


my.data$experience <- gsub("经验|[/ ]*","",my.data$experience)

my.data$experience[my.data$experience %in% c("不限","应届毕业生")] <- "1年以下"

my.data$experience <- factor(my.data$experience,

levels=c("1年以下","1-3年","3-5年","5-10年","10年以上"))

#这里的学历:“大专”,“本科”,“硕士”都表明是要求该学历“及以上”

my.data$education <- gsub("学历|及以上|[/ ]*","",my.data$education)

my.data$education[my.data$education=="不限"] <- "大专"

my.data$education <- factor(my.data$education,levels=c("大专","本科","硕士"))

my.data$phase <- factor(gsub("[\n]*","",my.data$phase),levels =

c("不需要融资","未融资","天使轮","A轮",

"B轮","C轮","D轮及以上","上市公司"))

my.data$campany <- gsub("[\n| ]*","",my.data$campany)

my.data$scale <- factor(gsub(".*(少于15人|15-50人|50-150人|150-500人|500-2000人|2000人以上).*",

"\\1",paste(my.data$scale,my.data$scale2)),

levels =c("少于15人","15-50人","50-150人",

"150-500人","500-2000人","2000人以上"))

my.data$id <- index(my.data)

my.data <- droplevels(subset(my.data,select=-scale2))

return(my.data)

}

#清洗数据,得到清洗后的数据

CN.clean <- cleaning(CN.df)

str(CN.clean)

步骤4:文本挖掘

文本挖掘工具:jiebaR包

说明:在进行正式挖掘之前测试了一下jiebaR的关键词(keywords)分词器,测试的结果发现SQL,Python等词在jiebaR词典中的IDF值均为11.7392,但“R”这个字符无论如何(即使自定义了用户字典,或者在idf字典中添加R的idf值)都无法被分词器识别为关键词,猜测可能是默认R的词性标注或者算法实现方法的原因。但因为R是数据分析师的重要工具,识别不出来是不可容忍的,因此要另求出路。

测试代码如下:

> library(jiebaR)
> library(jiebaRD)
> engine <- worker(type = "keywords",topn = 20,idf = IDFPATH)
> keywords("我在用R,R,R,R语言,SQL,PYTHON,EXCEL等工具,了解MySQL会更有好处",engine)

结果如下:

# 11.7392 11.7392 11.7392 11.7392 6.87603 6.1635 6.11745 5.09665 
# "EXCEL" "MySQL" "PYTHON" "SQL" "好处" "语言" "工具" "了解"

解决办法

关键词算法的实现原理是TF-IDF算法,TF为词频,IDF为逆文档率(词的权重),因此TF-IDF=TF*IDF为衡量是否关键词的指标,若控制IDF,则TF-IDF的值与TF值成正比关系,简单来说TF值可以代替TF-IDF值。

由于此次分析的是数据分析师的工具和技能,因此只考虑SQL,PYTHON,R,SAS等常用且类似的词的分析,又因为该类词在jiebaR分词器识别出来的IDF值均是同级别的(即使可能存在有差异也在此假设其等值),因此这部分词汇的关键指标的衡量可以简化为出现的词频,即TF值,这个可以通过jiebaR的默认分词器(不是关键词分词器)来处理即可,最终解决R关键词识别的问题。

文本挖掘思路:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 工具型技能的关键词:采用默认分词器的词频TF值
d47e62d2b349aca45e42305ed6714efbe5ed61d9 非工具型能力或素质的关键词:采用关键词分词器的TF-IDF值

代码如下:

library(jiebaR)

library(jiebaRD)

library(zoo)

library(plyr)

source("myfun.R")

#提取技能型关键词

#采用默认jiebaR分词器

engine <- worker(user = "user_dict.txt")

#分词,并删除无关的词汇

word.lis <- lapply(CN.clean$description, function(x){

v <- gsub("[\u4e00-\u9fa5|0-9|\\.|\\-]","",segment(x,engine))

v <- v[v!=""]

return(v)

})

#将所有分出来的词转化为大写,消除大小写差异

segWords <- toupper(unlist(word.lis))

stopwords <- toupper(readLines("stopwords.txt"))

#过滤停词,由于文本可能会存在其他高频的词汇,把不需要的词去除,如(and,of…)

#此处确保我要得到的前20个关键技能是正确的数据分析技能

segWords<-filter_segment(segWords,stopwords)


#形成词频表(数据框格式),获取前15个技能关键词

top15.df <- top.freq(segWords,topn = 15)


#生成有id和keyword构建的数据框,id对应cleandata数据集的id(即数据字典表1和表2的关系)

id <- NULL

keyword <- NULL

for (i in index(word.lis)) {

id <- c(id,rep(i,length(word.lis[[i]])))

keyword <- c(keyword,word.lis[[i]])

}

keyword.df <- data.frame("id"=id,"keyword"=toupper(keyword))

keyword.df <- droplevels(keyword.df[keyword.df$keyword %in% top15.df$x,])

str(keyword.df)

#合并两个数据集(表之间的内连接,类似sql语句的inner jion)

merge.df <- merge(CN.clean,keyword.df,by="id")

#该数据集用于工具型技能关键词的分析str(merge.df)

#提取非技能型关键词,停词可以自行定义

keys <- worker(type = "keywords",user = "user_dict.txt",topn = 20,stop_word = "stopkw.txt")

keyword.lis <- lapply(CN.clean$description, function(x){

v <- gsub("[a-zA-Z|0-9|\\.|\\-]","",keywords(x,keys))

v <- v[v!=""]

return(v)

})

keyword.lis <- unlist(keyword.lis)

#形成非工具型技能关键词词频表

not.tool.keyword <- top.freq(keyword.lis)

str(not.tool.keyword)

到此数据处理的过程基本完成,处理后干净的数据如下:

9f8acded3380e20097e9a703314bf8e031c75741

分析的结果

数据分析代码:

具体代码可以前往该链接查看整个过程:RPubs - 分析实例:企业需要什么样的数据分析人才(http://rpubs.com/Joffy_Z/DA_analysis)

描述统计信息:

## city phase scale education experience 
## 北京 :222 不需要融资:94 15-50人 : 15 大专: 33 1年以下: 34 
## 杭州 : 48 上市公司 :88 50-150人 : 36 本科:389 1-3年 :156 
## 上海 : 48 D轮及以上 :80 150-500人 :104 硕士: 20 3-5年 :206 
## 广州 : 38 C轮 :73 500-2000人:116 5-10年 : 46 
## 深圳 : 38 B轮 :49 2000人以上 :171 
## 长沙 : 11 A轮 :42 
## (Other): 37 (Other) :16 
## avg_salary 
## Min. : 2.50 
## 1st Qu.:12.50 
## Median :17.50 
## Mean :18.22 
## 3rd Qu.:22.50 
## Max. :75.00

问题一:不同地区,数据分析岗位的需求分布以及对应的薪资分布

c0dc3889e212a1109c8a42187f16b7afb74e351a

总的来说数据分析师的平均薪资比较好,工作1年以上拿到10k月薪的机会还是比较大的,在需求量前5的城市中,北京深圳的平均薪资是最高的,广州的平均薪资最低

需求量在第二梯度的城市中,长沙成都的平均薪资较低,但武汉、厦门、郑州也有不错的薪资表现,二线城市也是一个可以考虑的选择。

需要注意的是苏州的需求量相对于其他城市是非常低的,但其平均薪酬接近深圳,是可以值得关注的城市。

问题二:不同经验,数据分析岗位的需求分布以及对应的薪资分布

b4b06e6f6e6aac112360c3c8c6c9e4be0205ad56

跟预想的差不多,薪资随工作经验的增加而有一个稳定的增长,但企业对最大的数据求集中在3-5年经验的数据分析师,这对于转型进入数据分析的人来说不是一个好的消息,转行需要更有充足的准备,且要不断寻找能够积累经验的项目来做。

问题三:不同学历,数据分析岗位的需求分布以及对应的薪资分布

9529871d9922f3b3ca40c218739a38e7b830c114

企业似乎更加注重分析师的实践经验,而不是学历的高低,但至少需要具备本科以上的学历,数据分析还是需要具备一定的理论基础,在薪资方面,相对与本科来说,硕士及以上学历在获取高薪方面并没有太大的优势,能够解决实际问题才是数据分析师拿高薪的关键,而非深奥的理论知识。大专学历的分析师还是有机会,重点在于增加自己的工作经验才是本质上与其他分析师拉开距离的关键,当然,理论知识也不能落下。

问题四:不同企业规模,数据分析岗位的需求分布以及对应的薪资分布

58c6fccecd2782301b57c20575d4de56859df442

150人规模以下的企业需求量较少,但给出的薪资较高(甚至有异常的高薪),该类企业可能处于快速融资且高速的发展阶段,需要有丰富经验的数据分析专家来建设整个数据体系。

50~150人规模的企业适合有足够经验的分析师且想要创业的人,对自己职位以及薪酬均会有明显的提升,但最大的风险就是该类企业容易失败,特别在互联网行业,因此更不建议作为转型新人的首选。

对于转型的新人,尽可能往大企业走,越大规模的企业,整个体系越成熟,因此可以在150人以上的规模从上往下选择自己合适的企业才是比较科学的方式,且需求量巨大。

问题五:数据分析岗位对应的工具型技能与对应的薪资水平

50f5c91b95b72e72be66c0613bd28136b2df21dd

SQL和Excel几乎是每个数据分析师要掌握的基础技能,大多数企业都有自己的数据库体系或者系统平台,因此企业工作人员读取和处理数据还是以数据库和Excel为主。

R,Python是两个最热门的开源数据分析工具,且当前R语言在需求仍然不低,因此核心掌握两门语言的其中一门都会让数据分析师具备有力的竞争优势。

除此之外工作经验较低的数据分析师还需要掌握一些BI可视化分析工具,工作经验较高的数据分析师需要掌握主流的关系型数据库系统和NoSQL,以及Hadoop,Hive,Spark等大数据工具,掌握Hadoop,Hive,Spark,R,Python等技能是获取高薪必备条件。

问题六:数据分析岗位对应非工具型能力的需求

声明:此处数据涉及到岗位细分和难以衡量的原因,并没有进行深入分析,词云本身不具备太高的数据分析价值,仅作为可视化关键词的分布情况的工具;阅读者需要根据自身岗位以及所处的工作定位查看关键词的情况,这里的大小表示关键词出现的频次。

775521df3df0212cc6273b8e817c5fc5a2b61ca7

通过资料的收集,了解到数据分析岗位主要有偏工程方向和偏业务方向两个类型,透过词云可以大概了解到如下信息:

d47e62d2b349aca45e42305ed6714efbe5ed61d9偏工程方向 的数据分析师对“数据挖掘”、“数据建模”、“模型分析”等能力要求较高;
d47e62d2b349aca45e42305ed6714efbe5ed61d9 偏业务方向的数据分析师对“业务分析”、“运营分析”、“产品分析”、“用户分析”等能力要求较高;
d47e62d2b349aca45e42305ed6714efbe5ed61d9 两个类型共同需要“逻辑思维”、“沟通”、“分析报告”、“统计分析”、“团队合作”等关键能力;

总结

地域来看,北京、深圳、上海、杭州、广州应该是数据分析师的首选城市,苏州是一个值得关注的城市,外部数据了解到苏州的GDP仅次于一线城市,此处结果平均薪资接近北京和深圳,但需求量较低,想要苏州发展的朋友可以关注其动态。

总体需求来看,企业更加需要具备多年工作经验,且动手能力强、解决实际问题的分析人才,随着工作经验的增加,其对应的薪资也有可观的增长。

大环境看,外部资料了解到,自助式分析工具的逐步完善与人工智能技术的突破,也可能使得企业现有业务人员能够上手基础的分析工作,导致企业对经验较低的分析师需求减少。

企业规模看,150人以上规模的企业更加适合新人进去锻炼,一方面企业已经完成了基本的数据体系架构,且越大的企业数据量级越大,另一方面,企业需要逐步培养强大的数据分析团队来支撑业务的增长。

分析师个人的角度,则需要更加关注自身成功项目经验的积累,这是升职加薪的必备条件,且需要思考未来自身的发展路径,提前做好准备,相对于业务方向,大数据工程师方向会有更可观的薪资。

能力的角度,数据分析师需要掌握SQL,Excel,R,Python四个必备的工具(R和Python可以选择其一为主要工具),新人可以注重BI,PPT等office工具的技能,如果是大数据挖掘,越往后则需要更加关注hadoop,Hive,Spark等工具;

数据分析师个人还需要注重逻辑思维、表达沟通、分析报告等关键能力

建议

对于想要转型的数据分析师新人,转型之前尽可能做好项目经验的积累,尽量做到跨岗不跨行,在自己熟悉的领域学习数据分析。

企业比较看重经验和动手能力,面试的时候尽可能展示你的作品或者案例,如果当前没有,则需要在日常学习,练习,积累。

可以掌握一些可视化工具和数据可视化的思维,熟练掌握报告和表达的技巧,数据分析的工具多样,方式多样,只有能够正确解读数据且让对方看懂听懂才是有价值的

不足与局限

本次分析并没有按照分析报告的方式来呈现,文章中以个人的整个分析过程来撰写,希望能够与各位朋友一起交流学习,如果你不同意我文章中的观点,欢迎指正交流。

文章中我附上了我的数据集以及分析的代码链接,有兴趣的朋友可以重复我的过程,甚至做更加深入有趣的分析,如果有新的发现和观点,希望也能让我知道,向你们学习。

数据仅采集到449份样本,数据量相对少一点,因此数据分析的结果需要大家用怀疑的心态来看待,且仅局限在互联网行业,相对于其他行业,本文章的分析结果只能作为一个参考。


原文发布时间为:2018-04-15
本文作者:Joffy Zhong
本文来自云栖社区合作伙伴“ 数据派THU”,了解相关信息可以关注“ 数据派THU”。
相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
15天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
39 3
|
2月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
3月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
3月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
3月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
67 3
下一篇
无影云桌面