如何分析“資料分析師”的崗位?
前言
在《 ofollow,noindex" target="_blank">手把手帶你抓取智聯招聘的“資料分析師”崗位! 》一期中我們分享瞭如何抓取智聯招聘中“資料分析師”崗位的資料資訊(資料截止到2018年11月4日),在本期我們將基於已有的資料對其作進一步的分析和探索。在探索過程中,我們將圍繞如下幾個主題進行問題的回答:
- 哪些省份和城市對資料分析師的需求比較高?
- 資料分析師崗位在全國和TOP3城市的薪資差異是否顯著?
- 企業在招聘資料分析師崗位時,對應聘者的工作經驗和學歷要求是怎樣的?
- 不同的工作經驗和學歷在薪資上是否存在差異呢?
- 招聘資料分析師崗位的企業,都是哪些型別的企業?
實操
資料分析師在全國的需求分佈
# 匯入第三方模組 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 讀入招聘資訊的資料 jobs = pd.read_excel('jobs.xlsx') # 資料預覽 jobs.head(5)
考慮到招聘崗位的資料中含有城市資訊(city變數),不妨再結合城市與省份的資料,在原有的資料基礎上再新增省份欄位,程式碼如下:
# 讀取省份與城市的對應資料 Province_City = pd.read_excel('Province_City.xls') # 將省份資訊加入到jobs表中 jobs = pd.merge(left = jobs, right = Province_City, left_on='city', right_on='City') # 刪除jobs表中的City變數(該變數是多餘的) jobs.drop(labels='City', axis = 1, inplace = True)
接下來,我們來探索一下資料分析師崗位在全國各省份和各城市的需求情況:
# 設定中文和負號正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False # 近5000個數據分析的職位,在各省份的分佈(Top10) jobs.Province.value_counts()[:10].plot(kind = 'bar', color = 'steelblue', alpha = 0.8) # 顯示圖形 plt.show()
如上圖所示,這裡顯示了全國各省招聘資料分析師崗位數量的Top10,不難發現,前三甲都是國內非常發達的省份。但比較令我吃驚的是山東和安徽排在了江蘇前面,所以,個人覺得資料相關的崗位在山東和安徽也有比較好的市場(可能大家還不知道哦,山東在全國的GDP排在了第三呢,絕對是低調的奢華)。在瞭解了各省份的需求情況,再從城市維度看一下Top10的分佈:
# 近5000個數據分析的職位,在全國各城市的分佈(Top10) jobs.city.value_counts()[:10].plot(kind = 'bar', color = 'steelblue', alpha = 0.8) # 顯示圖形 plt.show()
如上圖所示,從城市級別來看,北京、上海和深圳對資料分析崗的需求最多,尤其是北京,她的需求量甚至超過了上海、深圳、合肥的總和。那麼,可能會有網友非常關心資料分析師崗位的薪資情況,下面我們就針對薪資做一個探索和介紹。
薪資水平的探索
需要說明的是,由於原始資料中絕大多數的薪資都是一個範圍,如“10K-15K”,當然還有其他形式的薪資,如“薪資面議”、“校招”和“1K一下”。對於這些非數值的薪資,我是這樣處理的:
- 對於有範圍的薪資,取範圍中兩個數的平均值,如“10K-15K”的平均值為12.5K;
- 對於“薪資面議”的情況,當作缺失值,後面將以整體薪資的中位數作為填充;
- 對於“校招”的情況,根據個人的經驗,按3500元的待遇為填充(主要是發達城市,由於發達城市的需求超過了總需求的一半);
- 對於薪資為“1K以下”的情況,月薪設定為1000; 下面就通過具體的程式碼,對薪資資料進行處理和探索:
# 將未知薪資的特殊資料提取出來 salary1 = jobs.salary[jobs.salary.isin(['薪資面議','校招','1K以下'])] # 將有薪資範圍的資料提取出來 other_salary = jobs.salary[~jobs.salary.isin(['薪資面議','校招','1K以下'])] # 提取出薪資的下界 salary_low = other_salary.str.replace('K','').str.split('-').apply(lambda x: float(x[0])) # 提取出薪資的上界 salary_high = other_salary.str.replace('K','').str.split('-').apply(lambda x: float(x[1])) # 對於薪資為面議的情況,將其轉換為缺失值,並用整體水平的平均值代替 salary1[salary1 == '薪資面議'] = np.nan # 對於薪資為校招的情況,根據經驗將月薪設定為3500 salary1[salary1 == '校招'] = 3500 # 對於薪資為1K以下的情況,月薪設定為1000 salary1[salary1 == '1K以下'] = 1000 # 將處理好的薪資水平作合併 salary2 = pd.concat([salary1,1000*(salary_low+salary_high)/2]) # 使用薪資的中位數填充缺失值 salary2.fillna(value = salary2.median(), inplace=True) # 繪製薪資資料的直方圖(設定組距為3000) salary2.plot(kind = 'hist', bins = np.arange(salary2.min()-1000, salary2.max()+3000,3000), color = 'steelblue', edgecolor = 'black') plt.show()
如上結果所示,為全國薪資的直方圖,從圖中可知,絕大多數崗位的薪資落在3K-12K。如果只考慮北京、上海和深圳這三個城市(因為需求量大,經濟發達),可以進一步得到該崗位的薪資範圍,程式碼如下:
# 給salary2向量設定名稱屬性 salary2.name = 'salary2' # 將salary2欄位加入到jobs資料集中 jobs = pd.concat([jobs, salary2], axis = 1) # 繪製北上深三個城市的薪資直方圖 salary_subset = salary2[jobs.city.isin(['北京','上海','深圳'])] salary_subset.plot(kind = 'hist', bins = np.arange(salary2.min()-1000, salary2.max()+3000,3000), color = 'steelblue', edgecolor = 'black') plt.show()
如上圖所示,對於一線城市的資料分析師崗位而言,絕大多數崗位的薪資在6K-15K,相比於全國的水平,要高一個階段。所以,一線城市的薪資和全國比較,還是存在顯著差異的。當然,讀者如果感興趣,也可以從定量的角度(採用t檢驗),驗證一線城市和全國的薪資差異。
企業對工作經驗和學歷的要求
在聊完企業提供的薪資後,就該聊聊他們對應聘者學歷和工作經的要求啦。由於學歷變數的水平值過多,故考慮把幾個相似的學歷作合併處理,如將高中、中技、中專和大專設定為”本科以下”,其他的學歷不調整:
# 將受教育水平劃分為本科以下、本科、碩士、博士和不限五種 jobs.eduLevel[jobs.eduLevel.isin(['高中','中技','中專','大專'])] = '本科以下' # 設定圖框,將橫、縱座標軸作標準化處理,保證餅圖是一個正圓,否則為橢圓 plt.axes(aspect='equal') jobs.eduLevel.value_counts().plot(kind = 'pie', autopct='%.1f%%', explode = [0,0.1,0,0,0]) # 突出顯示“本科以下”的學歷 # 去除y軸標籤 plt.ylabel('') plt.show()
如上餅圖所示,本科學歷的比重最多,佔到43.8%;其次是本科以下的學歷,佔比為37%;排第三的是學歷不限,個人覺得對於學歷不限的情況,企業可能更看重應聘者的工作經驗。很奇怪的是,對於碩士和博士這樣的高學歷,總共佔比才3.8%(個人覺得可能是11月份屬於招聘淡季,對高學歷人才的需求比較低)。同理,在瞭解一下工作經驗的分佈情況:
plt.axes(aspect='equal') jobs.workingExp.value_counts().plot(kind = 'pie', autopct='%.1f%%') plt.ylabel('') plt.show()
如上圖所示,企業對於工作年限不限的比例最高,其次是1~3年,緊接著是3~5年。這個分佈比例其實還是非常特殊的,本人只能將其歸咎於11月份時間節點不好,一是用人單位想招人招不到,故放低經驗要求,二是有工作經驗的人在此時不願意跳槽。
前文的幾個餅圖全都是基於全國所有城市的資料繪製出來的,感興趣的朋友也可以篩選出一線城市(如北京、上海、深圳、廣州等),並對其探索用人單位對學歷和工作經驗的要求。
工作經驗和學歷對薪資的影響
接下來要探索的就是不同學歷和工作經驗在薪資上的差異,這裡重點關注一線城市(以北京、上海、深圳和廣州為例)的資料特徵。
# 不同的工作年限,在薪資上的體現(限定在北京、上海、深圳和廣州四個城市) # 篩選指定城市的資料 jobs_subset = jobs.loc[jobs.city.isin(['北京','上海','深圳','廣州']),] # 按工作經驗分組 grouped = jobs_subset.groupby(by = 'workingExp') # 計算各工作經驗下的平均薪資 Exp_Salary = (grouped.aggregate('mean')['salary2']).sort_values(ascending = False) # 繪製條形圖 Exp_Salary.plot(kind='bar', color = 'steelblue', alpha = 0.8) # 新增數值標籤 for x,y in enumerate(Exp_Salary): plt.text(x,y+1000,'%s' %round(y,1),ha='center') # 限定y軸範圍 plt.ylim(7000,90000) # 去除x軸標籤 plt.xlabel('') plt.show()
如上圖所示,工作年限越長的對應的薪資水平就越高(最為突出的是十年以上的工作經驗,平均薪資在85000)。總體來說,資料分析的工種在各個工作年限上的平均薪資還是比較高的(相比於其他工種而言,如會計、銷售、服務業等)。同理,也可以根據上面的程式碼,稍作修改,就可以繪製出不同學歷在薪資上的差異條形圖:
# 不同的學歷,在薪資上的體現(限定在北京、上海、深圳和廣州四個城市) grouped = jobs_subset.groupby(by = 'eduLevel') Edu_Salary = (grouped.aggregate('mean')['salary2']).sort_values(ascending = False) Edu_Salary.plot(kind='bar', color = 'steelblue', alpha = 0.8) for x,y in enumerate(Edu_Salary): plt.text(x,y+1000,'%s' %round(y,1),ha='center') plt.ylim(7000,20000) plt.xlabel('') plt.show()
如上圖所示,碩士的平均薪資是最高的,其次是本科,而博士學歷還是挺出乎預料的,盡然排在了第三。後來從資料中查詢發現,博士學歷的崗位只有三個,都屬於北京的崗位,薪資分別是6K-12K、15K-25K和10K-20K。需要注意的是,這裡探索得到的結論(博士學歷薪資第三)並不代表普遍現象,可能還要歸咎於爬出來的資料屬於11月份的時間節點,如果是來年的3~4月份,也許資料會更加接近真實。
OK,橫向對比工作經驗和學歷水平,不難發現,工作經驗絕對能夠影響到薪資水平,試想,如果站在企業的角度考慮,相信他們更看重的是應聘者的工作經驗,而非學歷。
企業的型別分佈
最後,再來探索一個問題,招聘資料分析師崗位的企業,都屬於哪些型別的企業呢?這裡通過Python程式碼繪製企業型別的條形圖:
# 各企業型別的分佈比例 (jobs.type.value_counts()/jobs.shape[0]).plot(kind = 'bar', color = 'steelblue', alpha = 0.8) # 顯示圖形 plt.show()
如上圖所示,在蒐集的近5000個數據分析職位,民營企業佔到一半以上;其次是股份制企業,佔比為18%左右;排在第三的是合資企業,這三類企業佔到所有企業的80%以上。
結語
OK,使用Python完成資料分析崗的探索和分析就分享到這裡,如果你有任何問題,歡迎在公眾號的留言區域表達你的疑問。同時,也歡迎各位朋友繼續轉發與分享文中的內容,讓更多的人學習和進步。
關於Python的其他知識(包括資料的清洗、整理、運算、分析、視覺化和建模),讀者可以查閱我的新書《從零開始學Python資料分析與挖掘》,如果您對書中的內容有任何疑問,都可以聯絡我。
本文中的程式碼和資料可以從百度雲盤中下載,只需關注“資料分析1480”公眾號,並回復“智聯招聘”即可。
版權宣告: 作者保留權利。文章為作者獨立觀點,不代表資料人網立場。嚴禁修改,轉載請註明原文連結:http://shujuren.org/article/784.html
資料人網: 資料人學習,交流和分享的平臺,誠邀您創造和分享資料知識,共建和共享資料智庫。