Python、Java 薪资最高,C# 垫底:分析什么编程语言最赚钱!
本文主要用Python爬取拉勾网不同编程语言职位信息,包括Python岗、Java岗、C++岗、PHP岗、C#岗位(5岗),再用R语言对影响薪资的因素进行分析。由于拉勾网的职位信息只显示30页,一页15个职位信息,如果单独爬取一个城市的岗位信息,只有几页是匹配的信息,信息量太小,分析没有说服力。因此,本文爬取拉勾网全国职位信息。主要包括三部分内容:
爬取拉勾网5岗职位信息,以Python岗为例;
以Python岗位信息为例,分析影响薪资的因素;
5岗之间薪水因素影响比较分析。
爬取拉勾网5岗职位信息——以Python岗为例
我们抓取的信息包括Python岗位名称、公司名称、薪资、工作经验、学历、公司规模、公司福利。
##以python岗位为例,运用selenium+Chrome()爬取岗位信息
coding=UTF-8 from lxml import etree from selenium import webdriver import time import csv browser = webdriver.Chrome()
browser.get(‘https://www.lagou.com/jobs/list_PYTHON?px=default&city=全国#filterBox’)
browser.implicitly_wait(10) def get_dates(selector): items =
selector.xpath(’//[@id=“s_position_list”]/ul/li’) for item in items:
yield { ‘Name’: item.xpath(‘div[1]/div[1]/div[1]/a/h3/text()’)[0],
‘Company’: item.xpath(‘div[1]/div[2]/div[1]/a/text()’)[0], ‘Salary’:
item.xpath(‘div[1]/div[1]/div[2]/div/span/text()’)[0], ‘Education’:
item.xpath(‘div[1]/div[1]/div[2]/div//text()’)[3].strip(), ‘Size’:
item.xpath(‘div[1]/div[2]/div[2]/text()’)[0].strip(), ‘Welfare’:
item.xpath(‘div[2]/div[2]/text()’)[0] } def main(): i = 0 for i in
range(30): selector = etree.HTML(browser.page_source)
browser.find_element_by_xpath(’//[@id=“order”]/li/div[4]/div[2]’).click()
time.sleep(5) print(‘第{}页抓取完毕’.format(i+1)) for item in
get_dates(selector): print(item) with open(‘Py.csv’, ‘a’,
newline=’’) as csvfile: ##Py.csv是文件的保存路径,这里默认保存在工作目录 fieldnames =
[‘Name’, ‘Company’, ‘Salary’, ‘Education’, ‘Size’, ‘Welfare’] writer
= csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for item in get_dates(selector): writer.writerow(item) time.sleep(5)
browser.close() if name==‘main’: main()
抓取结果如下:
将抓取结果循环写入csv文件:
此外还抓取了Java岗、C++岗、PHP岗、C#岗位4岗的信息,代码和抓取Python岗位信息类似。
以Python岗位信息为例,分析影响薪资的因素
这里包括数据清洗部分和数据分析部分两部分内容。
数据清洗部分
data<-read.csv(“E://Data For R/RData/Py.csv”)
data[sample(1:nrow(data),size=10),]
在抓取过程中,由于将Python字典循环写入csv文件,因此列名也被循环写在csv文件中。
考虑本文主要分析影响薪资的因素,这里去除Name和Company两列。
##去除Name和Company两列 DATA<-data[,-c(1,2)]
##将python字典循环写入csv文件时,标题也会被写入,去除多余的标题
##查找哪些行是标题重复的行 which(DATAKaTeX parse error: Expected 'EOF', got '#' at position 171: …4] 534 550 566 #̲#去除多余的标题所在的行 DA…Salary %in% “Salary”)),] dim(DATA) [1] 545 4
1.变量Salary
变量Salary一般都是范围值,用“-”连接,但是不排除有XXK以上,例如10k以上这种表示形式,或者其他形式,这里需要处理一下。
##如果薪资是一个范围值,都是"-"连接,注意,薪资是一个范围值,匹配末尾结束k值需要注意,有大写K和小写k两种形式。 newdata<-DATA[grep(’\-’,DATAKaTeX parse error: Expected 'EOF', got '#' at position 34: …ata) [1] 544 4 #̲#对比前面dim(DATA),…lowsalary<-str_replace(newdataKaTeX parse error: Expected 'EOF', got '#' at position 20: …alary,'k|K',"")#̲# |表示或的关系 newda…highsalary<-str_replace(newdatalowsalary<-as.numeric(newdataKaTeX parse error: Expected 'EOF', got '#' at position 11: lowsalary)#̲#转换数据类型 newdatahighsalary<-as.numeric(newdatasalary<-(newdatahighsalary)/2
newdadat<-newdata[,-c(1,2)]##去除原有的lowsalary和highsalary
2.变量Education
###Education部分
##首先将Education中工作经验和学历分开 newdata<-separate(data = newdata,col=Education,into=c(“Experience”,“Graduate”),sep = ‘/’)
table(newdataGraduate) 本科 不限 大专 硕士 447 27 63 7
3.变量Size
##此处以公司人数作为描述公司规模的标准 newdata<-separate(data=newdata,col=Size,into=c(‘Type’,‘Rong’,‘Number’),sep=’/’)
table(newdataRong) A轮 B轮 C轮 D轮及以上 不需要融资 上市公司
天使轮 未融资 86 81 54 30 132 80 33 48
##将Type去除 newdata<-newdata[,-3]
4.变量Welfare
Welfare<-newdata[,“Welfare”]
##将Welfare去除 newdata<-newdata[,-5] head(newdata)
到此,数据清洗部分内容全部结束。
数据分析部分
1.工资与工作年限的关系
library(ggplot2)
ggplot(newdata,aes(x=Experience,y=salary))+geom_boxplot(col=“red”)
符合大众的认知,从事Python的应届毕业生起始工资平均值在5K左右,且薪资水平跨度最小。经验5-10年的工资水平跨度最大,主要可能是因为,有一部分转为技术管理岗位,工资较低的可能还在继续码代码,是不是对广大同胞们的警告啊…
2.工资与学历的关系(专科,本科,研究生,不限)
ggplot(newdata,aes(x=Graduate,y=salary))+geom_boxplot(col=“red”)
这里是否能说明学历在一定程度上的重要性?学历本科的工资跨度比较大,因为工作经验的不同导致了薪资的差异。
3.工资与公司融资的关系
ggplot(newdata,aes(x=Rong,y=salary))+geom_boxplot(col=“red”)
对于这部分知识是盲点,但是可以看出融资公司(上市也是一种融资方式)比没有融资的公司平均工资要高出不少,这部分是不是可以是以后找工作的一个风向标…
4.工资与公司大小的关系
公司规模越大,平均的工资也越高。
5.工资与工作时间和学历的关系
library(ggthemes) library(scales)
ggplot(newdata,aes(x=Experience,y=salary,fill=factor(Graduate)))+
geom_boxplot()+
geom_hline(aes(yintercept=20),color=“red”,linetype=“dashed”,lwd=1)+
scale_y_continuous(labels=dollar_format())+theme_few()
这张图告诉我们,在大部分情况下,没(Ren)钱(Chou)就要多读书。不管是经验经验1年以下、经验3-5年、经验5-10年、经验不限的情况下,拥有硕士学历的平均收入都普遍高于本科,本科都高于大专(这里完全没有歧视低学历之意)。
6.公司福利的云图
##公司福利的云图 library(jiebaR) Welfare<-as.character(Welfare) wk = worker() seg_words<-wk[Welfare] library(plyr) library(wordcloud)
tableWord<-count(seg_words) windowsFonts(myFont=windowsFont(“华文彩云”))
##使用华文彩云字体 wordcloud(tableWord[,1],tableWord[,2],random.order=F,col= rainbow(100),family=“myFont”)
现在公司的福利贴有“弹性工作,氛围好,团队,大牛,技术,五险一金”等标签来吸引求职者眼球。
5岗之间薪水因素影响比较分析从事后端的小伙伴们都可以来了解一下的,这里是程序员秘密聚集地,各位还在架构师的道路上挣扎的小伙伴们速来。“
加QQ群:585550789(名额有限哦!)