萬年的編程語言之爭,這次要用薪資高低來決定勝負了!
本文主要用Python爬取拉勾網不同編程語言職位信息,包括Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗),再用R語言對影響薪資的因素進行分析。由於拉勾網的職位信息只顯示30頁,一頁15個職位信息,如果單獨爬取一個城市的崗位信息,只有幾頁是匹配的信息,信息量太小,分析沒有說服力。因此,本文爬取拉勾網全國職位信息。主要包括三部分內容:
- 爬取拉勾網5崗職位信息,以Python崗為例;
- 以Python崗位信息為例,分析影響薪資的因素;
- 5崗之間薪水因素影響比較分析。
爬取拉勾網5崗職位信息——以Python崗為例
我們抓取的信息包括Python崗位名稱、公司名稱、薪資、工作經驗、學歷、公司規模、公司福利。
<code>from
lxmlimport
etreefrom
seleniumimport
webdriverimport
timeimport
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
itemin
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
iin
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
itemin
get_dates(selector): print(item)with
open('Py.csv'
,'a'
, newline=''
)as
csvfile: fieldnames = ['Name'
,'Company'
,'Salary'
,'Education'
,'Size'
,'Welfare'
] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader()for
itemin
get_dates(selector): writer.writerow(item) time.sleep(5
) browser.close()if
__name__=='__main__'
: main()/<code>
抓取結果如下:
將抓取結果循環寫入csv文件:
此外還抓取了Java崗、C++崗、PHP崗、C#崗位4崗的信息,代碼和抓取Python崗位信息類似。
以Python崗位信息為例,分析影響薪資的因素
這裡包括數據清洗部分和數據分析部分兩部分內容。
數據清洗部分
<code>data
"E://Data For R/RData/Py.csv")data
[sample(1
:nrow(data
),size=10
),]/<code>
在抓取過程中,由於將Python字典循環寫入csv文件,因此列名也被循環寫在csv文件中。
考慮本文主要分析影響薪資的因素,這裡去除Name和Company兩列。
<code>DATA
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
%in%
"Salary"
)),]
dim(DATA)
[1]
545
4
/<code>
1.變量Salary
變量Salary一般都是範圍值,用“-”連接,但是不排除有XXK以上,例如10k以上這種表示形式,或者其他形式,這裡需要處理一下。
<code> newdata'\\-',DATA$Salary),] dim(newdata) [1
]544
4
library(tidyr) library(stringr) newdata"lowsalary","highsalary"
),sep="-"
) newdata$lowsalary'k|K',""
) newdata$highsalary'k|K',""
) newdata$lowsalaryas.numeric(newdata$lowsalary) newdata$highsalaryas.numeric(newdata$highsalary) newdata$salary2 newdadat1,2
)]/<code>
2.變量Education
<code>newdata
=
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
/<code>
3.變量Size
<code>newdata
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
newdata
/<code>
4.變量Welfare
<code>Welfare
<-newdata
[,
"Welfare"
] ##將Welfare
去除newdata
<-newdata
[,-5]
head
(newdata
)/<code>
到此,數據清洗部分內容全部結束。
數據分析部分
1.工資與工作年限的關係
<code>library
(ggplot2)ggplot
(newdata,aes(x=Experience,y=salary))+geom_boxplot
(col="red"
)/<code>
符合大眾的認知,從事Python的應屆畢業生起始工資平均值在5K左右,且薪資水平跨度最小。經驗5-10年的工資水平跨度最大,主要可能是因為,有一部分轉為技術管理崗位,工資較低的可能還在繼續碼代碼,是不是對廣大同胞們的警告啊.......
2.工資與學歷的關係(專科,本科,研究生,不限)
<code>ggplot
(newdata,aes(x=Graduate,y=salary))+geom_boxplot
(col="red"
)/<code>
這裡是否能說明學歷在一定程度上的重要性?學歷本科的工資跨度比較大,因為工作經驗的不同導致了薪資的差異。
3.工資與公司融資的關係
<code>ggplot
(newdata,aes(x=Rong,y=salary))+geom_boxplot
(col="red"
)/<code>
對於這部分知識是盲點,但是可以看出融資公司(上市也是一種融資方式)比沒有融資的公司平均工資要高出不少,這部分是不是可以是以後找工作的一個風向標......
4.工資與公司大小的關係
公司規模越大,平均的工資也越高。
5.工資與工作時間和學歷的關係
<code>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
()/<code>
這張圖告訴我們,在大部分情況下,沒(Ren)錢(Chou)就要多讀書。不管是經驗經驗1年以下、經驗3-5年、經驗5-10年、經驗不限的情況下,擁有碩士學歷的平均收入都普遍高於本科,本科都高於大專(這裡完全沒有歧視低學歷之意)。
6.公司福利的雲圖
<code> library(jiebaR) Welfareas.character(Welfare) wk = worker() seg_words"華文彩雲")) wordcloud(tableWord[,1
],tableWord[,2
],random.order=F,col= rainbow(100
),family="myFont"
)/<code>
現在公司的福利貼有“彈性工作,氛圍好,團隊,大牛,技術,五險一金”等標籤來吸引求職者眼球。
5崗之間薪水因素影響比較分析
1.Python崗、Java崗、C++崗、PHP崗、C#崗位的平均薪水
抓取拉勾網職位信息,可以看出Python和Java的平均薪資較高,C#的平均工資最低。
由此也驗證Python近幾年火熱的態勢,由於AI的火熱,Python的需求越來越大,傳統的Java也比較強勢,薪資待遇較高。
2.相同工作經驗不同職位信息薪水比較
對於不同工作經驗,不同編程語言平均薪水還是有較大的差異。
3.相同學歷信息不同職位信息薪水比較
通過碩士、本科、大專、不限四種比較,碩士的總體薪資高於本科。
4.同一職位不同學歷信息薪水比較
總的看來,在每個職業,碩士學歷的平均薪水高於本科,本科的平均薪水高於大專。