Python、Java or C++?用薪资判定编程语言的万年之争

徐涛 北风网 2018-09-06

IT教育领导品牌

职场/人工智能/大数据

关注

| 作者:徐涛

| 来源:授权转载于公众号数据森麟(ID:shujusenlin)

本文主要用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('//*[@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.writeessay-header()
            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岗位信息为例

分析影响薪资的因素


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


数据清洗部分


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.变量Salary


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


    ##如果薪资是一个范围值,都是"-"连接,注意,薪资是一个范围值,匹配末尾结束k值需要注意,有大写K和小写k两种形式。
    newdata<-DATA[grep('-',DATA$Salary),]
    dim(newdata)
    [1544   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


    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 


    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]


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

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


      03

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


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



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


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


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





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


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



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


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



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


      PS:你钟情于哪些编程语言呢?


      | 作者介绍:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据。


      【大咖公开课】


      惊喜继续:

      原汇丰银行首席技术顾问,北风网人工智能金牌讲师伍老师主讲:伍笑侃机器学习第七话——回归预测和K近邻

      直播间额外惊喜:

      原国内某大型金融公司智能交易系统研发首席顾问,高级研究员、北风网Ai金牌讲师刘老师主讲:聊天机器人发展概述


      点击下方图片直接可进入直播间☟☟☟


      精彩回顾



      Python开发课程火热进行中!

      点击【阅读原文】立即免费申请试听!

      戳原文,更有料!

        本站仅按申请收录文章,版权归原作者所有
        如若侵权,请联系本站删除
        觉得不错,分享给更多人看到