Python or Java?大數(shù)據(jù)解讀學(xué)什么語言更賺錢
本文主要用Python爬取拉勾網(wǎng)不同編程語言職位信息,包括:Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗);用R語言對影響薪資的因素進(jìn)行分析。由于拉勾網(wǎng)的職位信息只顯示30頁,一頁15個職位信息,如果單獨爬取一個城市的崗位信息,只有幾頁是匹配的信息,信息量太小,分析沒有說服力。因此,本文爬取拉勾網(wǎng)全國職位信息。主要三部分內(nèi)容:
- 爬取拉勾網(wǎng)5崗職位信息--以Python崗為例
- 以Python崗位信息為例,分析影響薪資的因素
- 5崗之間薪水因素影響比較分析
一、爬取拉勾網(wǎng)5崗職位信息--以Python崗為例
我們抓取的信息包括Python崗位名稱、公司名稱、薪資、工作經(jīng)驗、學(xué)歷、公司規(guī)模、公司福利。
- ##以python崗位為例,運(yùn)用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是文件的保存路徑,這里默認(rèn)保存在工作目錄
- 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()
抓取結(jié)果如下:
將抓取結(jié)果循環(huán)寫入csv文件:
此外還抓取了Java崗、C++崗、PHP崗、C#崗位4崗的信息,代碼和抓取Python崗位信息類似。
二、以Python崗位信息為例,分析影響薪資的因素
這里包括數(shù)據(jù)清洗部分和數(shù)據(jù)分析部分兩部分內(nèi)容。
數(shù)據(jù)清洗部分
- data<-read.csv("E://Data For R/RData/Py.csv")
- data[sample(1:nrow(data),size=10),]
在抓取過程中,由于將python字典循環(huán)寫入csv文件,因此列名也被循環(huán)寫在csv文件中。
考慮本文主要分析影響薪資的因素,這里去除Name和Company兩列。
- ##去除Name和Company兩列
- DATA<-data[,-c(1,2)]
- ##將python字典循環(huán)寫入csv文件時,標(biāo)題也會被寫入,去除多余的標(biāo)題
- ##查找哪些行是標(biāo)題重復(fù)的行
- 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
- ##去除多余的標(biāo)題所在的行
- DATA<-DATA[-(which(DATA$Salary %in% "Salary")),]
- dim(DATA)
- [1] 545 4
1.變量Salary
變量Salary一般都是范圍值,用“-”連接,但是不排除有XXK以上,例如10k以上這種表示形式,或者其他形式,這里需要處理一下。
- ##如果薪資是一個范圍值,都是"-"連接,注意,薪資是一個范圍值,匹配末尾結(jié)束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',"")## |表示或的關(guān)系
- newdata$highsalary<-str_replace(newdata$highsalary,'k|K',"")
- newdata$lowsalary<-as.numeric(newdata$lowsalary)##轉(zhuǎn)換數(shù)據(jù)類型
- newdata$highsalary<-as.numeric(newdata$highsalary)
- newdata$salary<-(newdata$lowsalary+newdata$highsalary)/2
- newdadat<-newdata[,-c(1,2)]##去除原有的lowsalary和highsalary
2.變量Education
- ###Education部分
- ##首先將Education中工作經(jīng)驗和學(xué)歷分開
- newdata<-separate(data = newdata,col=Education,into=c("Experience","Graduate"),sep = '/')
- table(newdata$Experience)
- 經(jīng)驗1-3年 經(jīng)驗1年以下 經(jīng)驗3-5年 經(jīng)驗5-10年 經(jīng)驗不限 經(jīng)驗應(yīng)屆畢業(yè)生
- 187 6 261 46 37 7
- table(newdata$Graduate)
- 本科 不限 大專 碩士
- 447 27 63 7
3.變量Size
- ##此處以公司人數(shù)作為描述公司規(guī)模的標(biāo)準(zhǔn)
- 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)
到此,數(shù)據(jù)清洗部分內(nèi)容全部結(jié)束。
數(shù)據(jù)分析部分
1.工資與工作年限的關(guān)系
- library(ggplot2)
- ggplot(newdata,aes(x=Experience,y=salary))+geom_boxplot(col="red")
符合大眾的認(rèn)知,從事python的應(yīng)屆畢業(yè)生起始工資平均值在5K左右,且薪資水平跨度最小,經(jīng)驗5-10年,工資水平跨度***,主要可能是因為,有一部分轉(zhuǎn)為技術(shù)管理崗位,工資較低的可能還在繼續(xù)碼代碼,是不是對廣大同胞們的警告啊.......
2.工資與學(xué)歷的關(guān)系(???,本科,研究生,不限)
- ggplot(newdata,aes(x=Graduate,y=salary))+geom_boxplot(col="red")
這里是否能說明學(xué)歷在一定程度上的重要性?學(xué)歷本科的工資跨度比較大,因為工作經(jīng)驗的不同導(dǎo)致了薪資的差異。
3.工資與公司融資的關(guān)系
- ggplot(newdata,aes(x=Rong,y=salary))+geom_boxplot(col="red")
對于這部分知識是盲點,但是可以看出融資公司(上市也是一種融資方式)比沒有融資的公司平均工資要高出不少,這部分是不是可以是以后找工作的一個風(fēng)向標(biāo)。。。
4.工資與公司大小的關(guān)系
公司規(guī)模越大,平均的工資也越高。
5.工資與工作時間和學(xué)歷的關(guān)系
- 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)就要多讀書。不管是經(jīng)驗經(jīng)驗1年以下、經(jīng)驗3-5年、經(jīng)驗5-10年、經(jīng)驗不限的情況下,擁有碩士學(xué)歷的平均收入都普遍高于本科,本科都高于大專。(這里完全沒有歧視低學(xué)歷之意)
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")
現(xiàn)在公司的福利貼有“彈性工作,氛圍好,團(tuán)隊,大牛,技術(shù),五險一金”等標(biāo)簽來吸引求職者眼球。
三、5崗之間薪水因素影響比較分析
1.Python崗、Java崗、C++崗、PHP崗、C#崗位的平均薪水
抓取拉勾網(wǎng)職位信息,可以看出python和java的平均薪資較高,C#的平均工資***。
由此也驗證python近幾年火熱的態(tài)勢,由于AI的火熱,python的需求越來越大,傳統(tǒng)的java也比較強(qiáng)勢,薪資待遇較高。
2.相同工作經(jīng)驗不同職位信息薪水比較
對于不同工作經(jīng)驗,不同編程語言平均薪水還是有較大的差異。
3.相同學(xué)歷信息不同職位信息薪水比較
通過碩士、本科、大專、不限四種比較,碩士的總體薪資高于本科。
4.同一職位不同學(xué)歷信息薪水比較
總的看來,在每個職業(yè),碩士學(xué)歷的平均薪水高于本科,本科的平均薪水高于大專。