導讀:本文主要用Python爬取拉勾網不同程式語言職位資訊,包括:Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗);用R語言對影響薪資的因素進行分析。由於拉勾網的職位資訊只顯示30頁,一頁15個職位資訊,如果單獨爬取一個城市的崗位資訊,只有幾頁是匹配的資訊,資訊量太小,分析沒有說服力。因此,本文爬取拉勾網全國職位資訊。
作者:徐濤
來源:資料森麟(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崗位資訊為例,分析影響薪資的因素
這裡包括資料清洗部分和資料分析部分兩部分內容。
1. 資料清洗部分
data"E://Data For R/RData/Py.csv")
data[sample(1:nrow(data),size=10),]
在抓取過程中,由於將python字典迴圈寫入csv檔案,因此列名也被迴圈寫在csv檔案中。
考慮本文主要分析影響薪資的因素,這裡去除Name和Company兩列。
##去除Name和Company兩列
DATA##將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
##去除多餘的標題所在的行
DATAwhich(DATA$Salary %in% "Salary")),]
dim(DATA)
[1] 545 4
1.1 變數Salary
變數Salary一般都是範圍值,用“-”連線,但是不排除有XXK以上,例如10k以上這種表示形式,或者其他形式,這裡需要處理一下。
##如果薪資是一個範圍值,都是"-"連線,註意,薪資是一個範圍值,匹配末尾結束k值需要註意,有大寫K和小寫k兩種形式。
newdata'\\-',DATA$Salary),]
dim(newdata)
[1] 544 4
##對比前面dim(DATA),說明薪水少了一行,Salary具有其他的表示形式。
##這裡將範圍薪水的值分成底薪和高薪兩部分,後面取平均值來表示薪水
library(tidyr)
library(stringr)
newdata"lowsalary","highsalary"),sep="-")
##分別去除後面的k值,註意k有大寫和小寫兩種形式
newdata$lowsalary'k|K',"")## |表示或的關係
newdata$highsalary'k|K',"")
newdata$lowsalaryas.numeric(newdata$lowsalary)##轉換資料型別
newdata$highsalaryas.numeric(newdata$highsalary)
newdata$salary2
newdadat1,2)]##去除原有的lowsalary和highsalary
1.2 變數Education
###Education部分
##首先將Education中工作經驗和學歷分開
newdata"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'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
1.4 變數Welfare
Welfare"Welfare"]
##將Welfare去除
newdatahead(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)
Welfarewk = worker()
seg_wordslibrary(plyr)
library(wordcloud)
tableWordwindowsFonts(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
活動資訊
長按識別二維碼,瞭解更多
更多精彩
在公眾號後臺對話方塊輸入以下關鍵詞
檢視更多優質內容!
PPT | 報告 | 讀書 | 書單
Python | 機器學習 | 深度學習 | 神經網路
區塊鏈 | 揭秘 | 乾貨 | 數學
猜你想看
Q: 高工資的因素,你佔了幾條?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:baiyu@hzbook.com
更多精彩,請在後臺點選“歷史文章”檢視