首页 首页 大数据 查看内容

Python和Java薪资最高,C#最低!你的工资还跟这些因素有关!

木马童年 2018-9-15 17:15 7 0

本文主要用Python爬取拉勾网不同编程语言职位信息,包括:Python岗、Java岗、C++岗、PHP岗、C#岗位(5岗);用R语言对影响薪资的因素进行分析。由于拉勾网的职位信息只显示30页,一页15个职位信息,如果单独爬取一个 ...

本文主要用Python爬取拉勾网不同编程语言职位信息,包括:Python岗、Java岗、C++岗、PHP岗、C#岗位(5岗);用R语言对影响薪资的因素进行分析。由于拉勾网的职位信息只显示30页,一页15个职位信息,如果单独爬取一个城市的岗位信息,只有几页是匹配的信息,信息量太小,分析没有说服力。因此,本文爬取拉勾网全国职位信息。

主要三部分内容:

一、爬取拉勾网5岗职位信息--以Python岗为例

二、以Python岗位信息为例,分析影响薪资的因素

三、5岗之间薪水因素影响比较分析

01、爬取拉勾网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=%E5%85%A8%E5%9B%BD#filterBox')

browser.implicitly_wait(10)

def get_dates(selector):

items = selector.xpath('//*[@]/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('//*[@]/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岗位信息类似。

02、以Python岗位信息为例,分析影响薪资的因素

这里包括数据清洗部分和数据分析部分两部分内容。

1. 数据清洗部分

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(DATA$Salary %in% "Salary")

[1] 16 32 48 64 80 96 102 118 134 150 166 182 198 214 230 246 262 278 294 310 326 342 358 374 390 406 422 438 454 470 486 502 518

[34] 534 550 566

##去除多余的标题所在的行

DATA<-DATA[-(which(DATA$Salary %in% "Salary")),]

dim(DATA)

[1] 545 4

1.1 变量Salary

变量Salary一般都是范围值,用“-”连接,但是不排除有XXK以上,例如10k以上这种表示形式,或者其他形式,这里需要处理一下。

##如果薪资是一个范围值,都是"-"连接,注意,薪资是一个范围值,匹配末尾结束k值需要注意,有大写K和小写k两种形式。

newdata<-DATA[grep('\\-',DATA$Salary),]

dim(newdata)

[1] 544 4

##对比前面dim(DATA),说明薪水少了一行,Salary具有其他的表示形式。

##这里将范围薪水的值分成底薪和高薪两部分,后面取平均值来表示薪水

library(tidyr)

library(stringr)

newdata<-separate(data=newdata,col=Salary,into=c("lowsalary","highsalary"),sep="-")

##分别去除后面的k值,注意k有大写和小写两种形式

newdata$lowsalary<-str_replace(newdata$lowsalary,'k|K',"")## |表示或的关系

newdata$highsalary<-str_replace(newdata$highsalary,'k|K',"")

newdata$lowsalary<-as.numeric(newdata$lowsalary)##转换数据类型

newdata$highsalary<-as.numeric(newdata$highsalary)

newdata$salary<-(newdata$lowsalary+newdata$highsalary)/2

newdadat<-newdata[,-c(1,2)]##去除原有的lowsalary和highsalary

1.2 变量Education

###Education部分

##首先将Education中工作经验和学历分开

newdata<-separate(data = newdata,col=Education,into=c("Experience","Graduate"),sep = '/')

table(newdata$Experience)

经验1-3年 经验1年以下 经验3-5年 经验5-10年 经验不限 经验应届毕业生

187 6 261 46 37 7

table(newdata$Graduate)

本科 不限 大专 硕士

447 27 63 7

1.3 变量Size

##此处以公司人数作为描述公司规模的标准

newdata<-separate(data=newdata,col=Size,into=c('Type','Rong','Number'),sep='/')

table(newdata$Number)

15-50人 150-500人 2000人以上 50-150人 500-2000人 少于15人

76 139 117 119 82 11

table(newdata$Rong)

A轮 B轮 C轮 D轮及以上 不需要融资 上市公司 天使轮 未融资

86 81 54 30 132 80 33 48

##将Type去除

newdata<-newdata[,-3]

1.4 变量Welfare

Welfare<-newdata[,"Welfare"]

##将Welfare去除

newdata<-newdata[,-5]

head(newdata)

到此,数据清洗部分内容全部结束。

2. 数据分析部分

2.1 工资与工作年限的关系

library(ggplot2)

ggplot(newdata,aes(x=Experience,y=salary))+geom_boxplot(col="red")

符合大众的认知,从事python的应届毕业生起始工资平均值在5K左右,且薪资水平跨度最小,经验5-10年,工资水平跨度较大,主要可能是因为,有一部分转为技术管理岗位,工资较低的可能还在继续码代码,是不是对广大同胞们的警告啊.......

2.2 工资与学历的关系(专科,本科,研究生,不限)

ggplot(newdata,aes(x=Graduate,y=salary))+geom_boxplot(col="red")

这里是否能说明学历在一定程度上的重要性?学历本科的工资跨度比较大,因为工作经验的不同导致了薪资的差异。

2.3 工资与公司融资的关系

ggplot(newdata,aes(x=Rong,y=salary))+geom_boxplot(col="red")

对于这部分知识是盲点,但是可以看出融资公司(上市也是一种融资方式)比没有融资的公司平均工资要高出不少,这部分是不是可以是以后找工作的一个风向标……

2.4 工资与公司大小的关系

公司规模越大,平均的工资也越高。

2.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年、经验不限的情况下,拥有硕士学历的平均收入都普遍高于本科,本科都高于大专。(这里完全没有歧视低学历之意)

2.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")

现在公司的福利贴有“弹性工作,氛围好,团队,大牛,技术,五险一金”等标签来吸引求职者眼球。

03、5岗之间薪水因素影响比较分析

1. Python岗、Java岗、C++岗、PHP岗、C#岗位的平均薪水

抓取拉勾网职位信息,可以看出python和java的平均薪资较高,C#的平均工资较低。

由此也验证python近几年火热的态势,由于AI的火热,python的需求越来越大,传统的java也比较强势,薪资待遇较高。

2. 相同工作经验不同职位信息薪水比较

对于不同工作经验,不同编程语言平均薪水还是有较大的差异。

3. 相同学历信息不同职位信息薪水比较

通过硕士、本科、大专、不限四种比较,硕士的总体薪资高于本科。

4. 同一职位不同学历信息薪水比较

总的看来,在每个职业,硕士学历的平均薪水高于本科,本科的平均薪水高于大专。

关于作者:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据,知乎:parkson

欢迎加入本站公开兴趣群

软件开发技术群

兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流

QQ群:26931708

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

编程语言
0

聚焦多智时代,引领智能变革

© 多智时代(www.duozhishidai.com)版权所有 / 工信部备案 豫ICP备15012664号-1