如何分析「數據分析師」的崗位?

  • 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%以上。