如何分析「數據分析師」的崗位?
- 2019 年 10 月 8 日
- 筆記
作者 | 劉順祥
來源 | 數據分析1480
前言
- 哪些省份和城市對數據分析師的需求比較高?
- 數據分析師崗位在全國和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%以上。