Python爬取12840條拉勾招聘信息看互聯網薪資水平

很多人學習python,都是從數據分析開始入門的,具體來說,就是使用pandas進行數據讀取存儲,數據概述,數據清洗和整理,分析和可視化。

今天我們通過一個經典的案例,從拉勾網上獲取12840條招聘信息,分析互聯網行業幾個熱門的招聘崗位的薪資水平。

新手入門可以通過下載樣本數據,跟着本文教程一步一步練習,對學習pandas有非常大的幫助。樣本下載請看文末。

1.載入樣本數據

在pandas中,常用的函數是read_csv。樣本也是以csv格式存儲的。當然也有很多使用mongodb的。除此之外還有read_excel和read_table、read_sql,直接訪問數據庫,但它必須配合mysql相關包。甚至還可以直接當作爬蟲工具的read_html

import pandas as pd

載入成功後,我們需要用info()函數對整個列表做整體的預覽,包括行數,每個字段的類型。

當然一開始也需要對每個字段顯示的具體內容做一個瞭解,可以使用head()函數進行預覽,默認顯示前5行,也可以自定義顯示多少行

df_new.head()

2.剔除重複項

通常爬蟲獲取到的數據,未清洗的情況下,有可能存在重複的情況,根據數據的不同情況及處理數據的不同需求,通常會分爲兩種情況,一種是去除完全重複的行數據,另一種是去除某幾列重複的行數據,這裏我們使用去除完全重複的即可。

df_new.drop_duplicates(inplace=True)

清洗之後得到12840條記錄。

3.拆分薪資字段

先來處理最關心的工資部分,salary這個字段都是一個工資範圍,比較好處理,把中間的‘-’ 號作爲切割點,劃分成兩個字段,再剔除字母k,變成整數類型

這裏使用pandas的apply函數,能夠快速的將這一列的每一行都在函數中執行。

# 獲取薪資下限
# 接下來是工資上限

這時候已經生成了新的兩列出來,並且這兩列的類型是整數的

這裏使用新的知識點,匿名函數lamba。不需要複雜地使用def定義函數,用lamdba即可一行代碼作爲一次性函數。

axis是apply中的參數,axis=1表示將函數用在行,axis=1則是列。

df_new['avg_salary'] = df_new.apply(lambda x:(x.low_salary + x.high_salary)/2, axis=1)

4.拆分公司詳細信息、工作年限、教育背景信息

掌握了上面的方法,接下來的公司信息和工作年限教育背景的處理都是類似的。

df_new['com_type'] = df_new.apply(lambda x:x.com_info.split('/')[0].strip(), axis=1)

工作年限和教育背景的要求, 由於該字段存儲到csv文件後,該字段從列表類型變成字符串,所以轉化的時候比較特殊,函數內容比較複雜,新手建議使用apply函數。

df_new['year'] = df_new.apply(lambda x:x.year_edu.split(',')[2].split('/')[0].strip(), axis=1)

到這裏基本數據處理完成,記得保存起來

df_new.to_csv('lagou_cleaned.csv',encoding='utf-8-sig')

5.數據分析

說明:樣本數據由於受到拉鉤的限制,部分職位即使數量超過450個,也只能獲得450個,所以通過職位數量這個維度分析會有點問題,但影響不大,我們主要是分析不同維度對薪資水平的影響。

5.1 薪資概覽

互聯網行業的薪資水平比較高,我們先從整體上來看看這些職位的薪資分佈:

import matplotlib.pyplot as plt

分佈得不太均勻,不是標準的正態分佈,由於這個平均薪資是通過區間計算過來的,所以會集中在某個數值,比如大部分薪資範圍寫着15-25k,那平均薪資就會集中在20k。

但從整體來看,薪資水平還是集中在10-20k這個區間,超過20k的也不少。也可以從整體的平均數來看:

df_new.describe()

它能快速生成各類統計指標。比如平均數是19.35k,中位數是185k,兩者相差不大。標準差在8.84k,有一定的波動性,大部分薪資在19k上下8.8k之間。

在數據分析領域,觀測數量分佈還有一個常見的方法,就是分段法。我們使用cut將平均薪資劃分幾個區間,然後對比每個區間的數量,從另外一種圖表,觀測薪資水平。

bins = [0,5,10,15,20,25,30,40,100]

使用餅圖:

import matplotlib.pyplot as plt

薪資區間都可以由我們自定義,這種方式是否更直觀的查看薪資水平的分佈呢?

5.2 崗位和城市概覽

這裏面主要的維度,崗位和城市有哪些,我們需要有個整體的認知,可以使用value_counts函數,把這兩個字段的值的數量顯示出來,方便觀測:

部分崗位註解:qianduan:前端 changpinjingli1:產品經理

之前提到過收到限制,部分職位的數量獲取有限,但也可以看出,Java在所有崗位中的數量處於領先,是互聯網行業中崗位最多的。

5.3 不同崗位****的薪資水平

接下來是分析的重點,不同崗位的薪資水平差異,很明顯C++處於最高水平,Java可能崗位太多,拉低了整體的水平。

df_new[df_new.avg_salary<70].boxplot(column='avg_salary', by='position',figsize=(9,9))

5.4 不同城市的薪資水平

箱線圖在觀察這類型的數據時,非常直觀。在城市維度上,北京果然是獨佔鰲頭,不出意外,最近幾年來被人吐槽跌出一線城市的廣州整體不如北上深杭了。

df_new[df_new.avg_salary<70].boxplot(column='avg_salary', by='city',figsize=(9,9))

經常做數據分析的同學,相信都離不開excel的透視表,pandas中同樣有類似的功能,就是groupby函數,這裏我們通過這個函數,來更直觀地對比不同城市下不同崗位的平均薪資水平:

df_new.groupby(['city','position']).mean()['avg_salary'].unstack().plot.bar(figsize=(14,9))

5.5 不同學歷的薪資水平

使用matplotlib 的時候,經常遇到圖表中文顯示的問題,這裏時windows的處理方法,如果mac的可以上網搜索一下。

import matplotlib.pyplot as plt

互聯網行業主要的招聘學歷是本科,和碩士的薪資水平差異不大,甚至在高薪區域,本科甚至超過了碩士。但是專科的可能就有點喫虧了。

5.6 不同工作年限的薪資水平

df_new[df_new.avg_salary<70].boxplot(column='avg_salary', by='year',figsize=(9,9))

基本上隨着工作年限的增長,薪資水平的增長還是穩步增長的,但是35歲危機確實存在。

今天就分享到這裏,希望對想要做數據分析或者對互聯網行業薪資水平感興趣的朋友有所幫助。
如果需要樣本數據,可以關注公衆號:迷途小球迷 並在後臺回覆:招聘 即可獲取。樣本數據僅做學習用途,請勿做他用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章