|
|
51CTO旗下网站
|
|
移动端

Python or Java?大数据解读学什么语言最赚钱

本文主要用Python爬取拉勾网不同编程语言职位信息,包括:Python岗、Java岗、C++岗、PHP岗、C#岗位(5岗);用R语言对影响薪资的因素进行分析。

作者:徐涛来源:数据森麟|2018-08-28 12:43

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

  1. 爬取拉勾网5岗职位信息--以Python岗为例
  2. 以Python岗位信息为例,分析影响薪资的因素
  3. 5岗之间薪水因素影响比较分析

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

我们抓取的信息包括Python岗位名称、公司名称、薪资、工作经验、学历、公司规模、公司福利。

Python or Java?大数据解读学什么语言最赚钱

  1. ##以python岗位为例,运用selenium+Chrome()爬取岗位信息 
  2. # coding=UTF-8 
  3. from lxml import etree 
  4. from selenium import webdriver 
  5. import time 
  6. import csv 
  7.  
  8. browser = webdriver.Chrome() 
  9. browser.get('https://www.lagou.com/jobs/list_PYTHON?px=default&city=%E5%85%A8%E5%9B%BD#filterBox'
  10. browser.implicitly_wait(10) 
  11.  
  12. def get_dates(selector): 
  13.         items = selector.xpath('//*[@id="s_position_list"]/ul/li'
  14.         for item in items: 
  15.             yield { 
  16.                 'Name': item.xpath('div[1]/div[1]/div[1]/a/h3/text()')[0], 
  17.                 'Company': item.xpath('div[1]/div[2]/div[1]/a/text()')[0], 
  18.                 'Salary': item.xpath('div[1]/div[1]/div[2]/div/span/text()')[0], 
  19.                 'Education': item.xpath('div[1]/div[1]/div[2]/div//text()')[3].strip(), 
  20.                 'Size': item.xpath('div[1]/div[2]/div[2]/text()')[0].strip(), 
  21.                 'Welfare': item.xpath('div[2]/div[2]/text()')[0] 
  22.             } 
  23. def main(): 
  24.     i = 0 
  25.     for i in range(30): 
  26.         selector = etree.HTML(browser.page_source) 
  27.         browser.find_element_by_xpath('//*[@id="order"]/li/div[4]/div[2]').click() 
  28.         time.sleep(5) 
  29.         print('第{}页抓取完毕'.format(i+1)) 
  30.         for item in get_dates(selector): 
  31.             print(item) 
  32.         with open('Py.csv''a', newline=''as csvfile:  ##Py.csv是文件的保存路径,这里默认保存在工作目录 
  33.             fieldnames = ['Name''Company''Salary''Education''Size''Welfare'
  34.             writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 
  35.             writer.writeheader() 
  36.             for item in get_dates(selector): 
  37.                 writer.writerow(item) 
  38.         time.sleep(5) 
  39.     browser.close() 
  40. if __name__=='__main__'
  41.     main() 

抓取结果如下:

Python or Java?大数据解读学什么语言最赚钱

将抓取结果循环写入csv文件:

Python or Java?大数据解读学什么语言最赚钱

此外还抓取了Java岗、C++岗、PHP岗、C#岗位4岗的信息,代码和抓取Python岗位信息类似。

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

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

数据清洗部分

  1. data<-read.csv("E://Data For R/RData/Py.csv"
  2. data[sample(1:nrow(data),size=10),] 

Python or Java?大数据解读学什么语言最赚钱

在抓取过程中,由于将python字典循环写入csv文件,因此列名也被循环写在csv文件中。

Python or Java?大数据解读学什么语言最赚钱

考虑本文主要分析影响薪资的因素,这里去除Name和Company两列。

  1. ##去除Name和Company两列 
  2. DATA<-data[,-c(1,2)] 
  3. ##将python字典循环写入csv文件时,标题也会被写入,去除多余的标题 
  4. ##查找哪些行是标题重复的行 
  5. which(DATA$Salary %in"Salary"
  6.  [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 
  7. [34] 534 550 566 
  8. ##去除多余的标题所在的行 
  9. DATA<-DATA[-(which(DATA$Salary %in"Salary")),] 
  10. dim(DATA) 
  11. [1] 545   4 

1.变量Salary

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

  1. ##如果薪资是一个范围值,都是"-"连接,注意,薪资是一个范围值,匹配末尾结束k值需要注意,有大写K和小写k两种形式。 
  2. newdata<-DATA[grep('\\-',DATA$Salary),] 
  3. dim(newdata) 
  4. [1] 544   4 
  5. ##对比前面dim(DATA),说明薪水少了一行,Salary具有其他的表示形式。 
  6. ##这里将范围薪水的值分成底薪和高薪两部分,后面取平均值来表示薪水 
  7. library(tidyr) 
  8. library(stringr) 
  9. newdata<-separate(data=newdata,col=Salary,into=c("lowsalary","highsalary"),sep="-"
  10. ##分别去除后面的k值,注意k有大写和小写两种形式 
  11. newdata$lowsalary<-str_replace(newdata$lowsalary,'k|K',"")##  |表示或的关系 
  12. newdata$highsalary<-str_replace(newdata$highsalary,'k|K',""
  13. newdata$lowsalary<-as.numeric(newdata$lowsalary)##转换数据类型 
  14. newdata$highsalary<-as.numeric(newdata$highsalary) 
  15. newdata$salary<-(newdata$lowsalary+newdata$highsalary)/2 
  16. newdadat<-newdata[,-c(1,2)]##去除原有的lowsalary和highsalary 

2.变量Education

  1. ###Education部分 
  2. ##首先将Education中工作经验和学历分开 
  3. newdata<-separate(data = newdata,col=Education,into=c("Experience","Graduate"),sep = '/'
  4. table(newdata$Experience) 
  5. 经验1-3年     经验1年以下       经验3-5年      经验5-10年        经验不限  经验应届毕业生   
  6.  187               6             261              46              37               7  
  7. table(newdata$Graduate) 
  8.  本科  不限  大专  硕士  
  9.   447    27    63     7  

3.变量Size

  1. ##此处以公司人数作为描述公司规模的标准 
  2. newdata<-separate(data=newdata,col=Size,into=c('Type','Rong','Number'),sep='/'
  3. table(newdata$Number) 
  4.  
  5.  15-50人   150-500人  2000人以上    50-150人  500-2000人    少于15人  
  6.    76         139         117         119          82          11  
  7. table(newdata$Rong) 
  8. A轮          B轮          C轮    D轮及以上   不需要融资     上市公司       天使轮       未融资   
  9. 86           81           54           30          132           80           33           48  
  10. ##将Type去除    
  11. newdata<-newdata[,-3] 

4.变量Welfare

  1. Welfare<-newdata[,"Welfare"
  2. ##将Welfare去除 
  3. newdata<-newdata[,-5] 
  4. head(newdata) 

Python or Java?大数据解读学什么语言最赚钱

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

数据分析部分

1.工资与工作年限的关系

  1. library(ggplot2) 
  2. ggplot(newdata,aes(x=Experience,y=salary))+geom_boxplot(col="red"

Python or Java?大数据解读学什么语言最赚钱

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

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

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

Python or Java?大数据解读学什么语言最赚钱

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

3.工资与公司融资的关系

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

Python or Java?大数据解读学什么语言最赚钱

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

4.工资与公司大小的关系

Python or Java?大数据解读学什么语言最赚钱

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

5.工资与工作时间和学历的关系

  1. library(ggthemes) 
  2. library(scales) 
  3. ggplot(newdata,aes(x=Experience,y=salary,fill=factor(Graduate)))+ 
  4. geom_boxplot()+ 
  5. geom_hline(aes(yintercept=20),color="red",linetype="dashed",lwd=1)+ 
  6. scale_y_continuous(labels=dollar_format())+theme_few() 

Python or Java?大数据解读学什么语言最赚钱

这张图告诉我们,在大部分情况下,没(Ren)钱(Chou)就要多读书。不管是经验经验1年以下、经验3-5年、经验5-10年、经验不限的情况下,拥有硕士学历的平均收入都普遍高于本科,本科都高于大专。(这里完全没有歧视低学历之意)

6.公司福利的云图

  1. ##公司福利的云图 
  2. library(jiebaR) 
  3. Welfare<-as.character(Welfare) 
  4. wk = worker() 
  5. seg_words<-wk[Welfare] 
  6. library(plyr) 
  7. library(wordcloud) 
  8. tableWord<-count(seg_words) 
  9. windowsFonts(myFont=windowsFont("华文彩云")) ##使用华文彩云字体 
  10. wordcloud(tableWord[,1],tableWord[,2],random.order=F,col= rainbow(100),family="myFont"

Python or Java?大数据解读学什么语言最赚钱

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

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

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

Python or Java?大数据解读学什么语言最赚钱

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

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

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

Python or Java?大数据解读学什么语言最赚钱

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

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

Python or Java?大数据解读学什么语言最赚钱

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

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

Python or Java?大数据解读学什么语言最赚钱

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

【编辑推荐】

  1. 如何用Python进行大数据挖掘和分析?快速入门路径图!
  2. Python爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码
  3. Python测算女朋友还完花呗多久后吃土
  4. 8个Python高效数据分析的技巧
  5. 用Python分析了数千个微信昵称后,我们发现了这些规律...
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java面向对象编程

Java是当前最流行的程序设计语言之一。本书以Java最新版本Java SE5为基础,涵盖了Java SE5最新特性,由浅入深地介绍了Java SE5的主要内容。...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊