2018年 資料分析師 市場需求現狀分析報告 基於獵聘網
背景
最近幾個月學了資料分析相關知識,到現在也算學了不少內容,接下來打算慢慢開始找工作了。本專案打算著重複習 python 相關的知識。首先用requests、BeautifulSoup、pandas庫對<獵聘網>現有的資料分析招聘資訊進行爬取和儲存,然後利用numpy, pandas 和 matplotlib庫對爬取到的資料進行資料抽取、資料清洗以及視覺化呈現:
目的
主要是希望通過實際的資料來解答針對資料分析崗位的一些疑惑。具體來說,主要針對以下幾個問題:
- 資料分析師崗位需求的地域性分佈;
- 不同城市資料分析師的薪酬情況是怎樣的;
- 該崗位對於工作經驗的要求是怎樣的;
資料爬取:
import requests importpandas as pd from bs4 import BeautifulSoup #在獵聘網全國範圍搜尋,得到100頁結果,下面一行程式碼是這100頁連結 url_list=['https://www.liepin.com/zhaopin/?init={}&imscid=R000000058&d_sfrom=search_fp_bar&key=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90'.format(pages) for pages in range(0,100)] def detail(url): result=requests.get(url) #獲取本頁面內容soup=BeautifulSoup(result.text,'lxml') job_info=soup.find_all('div',class_='job-info') #頁面審查元素->找到所需資訊的位置->通過位置獲取 job = pd.DataFrame(columns=[['position', 'salary', 'city', 'edu-background', 'experience']])#需要的欄位:職位、年薪、城市、教育背景、經驗 job['position']=[div.h3.get('title') for div injob_info] job['salary'] = [div.p.get('title').split('_')[0] for div in job_info] job['city'] = [div.p.get('title').split('_')[1][:2] for div in job_info] job['edu-background'] = [div.p.get('title').split('_')[2] for div in job_info] job['experience'] = [div.p.get('title').split('_')[3] for div in job_info] return job job_ = pd.DataFrame(columns=[['position', 'salary', 'city', 'edu-background', 'experience']]) for i in range(0,100): job_=job_.append(detail(url_list[i])) #迴圈獲取100頁的所有需要的資訊 job_.to_excel('../lagou/data0.xls') #資料儲存
資料處理、視覺化:
import pandas as pd import numpy as np import matplotlib.pyplot as plt #因爬取的時候確認過資料的完整性,所以就不需要再次確認了 input='../lagou/data.xls' #檔案路徑 data=pd.read_excel(input) #獲取檔案 data_city=data.groupby(by='city')['position'].count().sort_values(ascending=False) #按城市降序排列 fig=plt.figure() ax1=plt.subplot() rect=ax1.bar(np.arange(len(data_city)),data_city.values,width=0.5) def auto_xtricks(rects,xticks): #X軸刻度標籤 x=[] for rect in rects: x.append(rect.get_x()+rect.get_width()/2) x=tuple(x) plt.xticks(x,xticks) def auto_tag(rects,data=None,offset=[0,0]): #資料標籤 for rect in rects: try: height=rect.get_height() plt.text(rect.get_x()+rect.get_width()/2.4,1.01*height,'%s'%int(height)) except AttributeError: x=range(len(data)) y=data.values for i in range(len(x)): plt.text(x[i]+offset[0],y[i]+0.05+offset[1],y[i]) auto_tag(rect,offset=[-1,0]) auto_xtricks(rect,data_city.index) ax1.set_xticklabels(data_city.index)
plt.show()
結果如下:
(上面圖裂X軸的漢字顯示需要先處理下,不然只顯示兩個框,詳見:https://segmentfault.com/a/1190000005144275)
在獵聘網上,全國有7個城市的企業郵資料分析師的人才需求,其中1/3需求在北京市,排名第一。排名分別是:北京、上海、深圳、廣州、杭州-成都、福州
結論:目前,對大資料分析的需求主要集中在北上廣深,其次是杭州、成都、福州,其它城市目前的需求量較小(考慮到獵聘網上的招聘不能代表所有,所有不能說其它城市沒有需求)
data1=data[data['salary']!='面議'] #去掉薪酬為面議的 data1.index=range(len(data1)) #重設索引 def avg_salary(salary): #因年薪是區間,此處處理是通過平均值得方式把區間轉換成一個數 s_list=salary.split(u'萬') #去掉‘萬’字 s_list=s_list[0].split('-') #以‘-’為分隔符,把區間拆成兩個數 s_min=int(s_list[0]) s_max=int(s_list[1]) s_avg=float(s_max+s_min)/2 #求平均值 return s_avg data1['avg_salary']=data1['salary'].apply(avg_salary)
count_by_city_salary=data1.groupby(['city'])['avg_salary'] #把薪水按城市分組 top_data_by_city=data_city df=[] for group in top_data_by_city.index: v=count_by_city_salary.get_group(group).values df.append(v) fig=plt.figure() ax3=plt.subplot() rect=ax3.boxplot(df) ax3.set_xticklabels(top_data_by_city.index) ax3.set_title(u'不同城市薪酬分佈') ax3.set_ylabel(u'薪酬k/月') plt.show()
可以看出,北上深廣的待遇是和城市發達程度很相關的(北-上-深-廣),杭州和程度算是得意與阿里巴巴和騰訊,才會有比較高的待遇,但是需求量不多。
count_by_exp=data1.groupby(['experience'])['position'].count().sort_values(ascending=False)
print(count_by_exp.index)
fig=plt.figure()
ax4=plt.subplot()
rect=ax4.bar(range(len(count_by_exp)),count_by_exp.values,width=0.5)
ax4.set_xticklabels(['','3年以上', '2年以上', '經驗不限', '1年以上', '5年以上'])
ax4.set_title(u'工作經驗分佈')
plt.show()
可以看出:主要需求是集中在2~3年工作經驗的,無經驗要求的非常少,所以對於轉行或者應屆生來說,入行的第一份工作還是比較難找的,所以正處在這個階段的朋友可以不用焦慮,不是你不行,這是由市場需求決定的,多點耐心就好。
總結
對於資料分析師技能的分析是比較簡陋的,在本次分析過程中,僅針對工具型的技能進行了分析。但其實,資料分析師所需要具備的素質遠不止這些,還需要有紮實的數學、統計學基礎,良好的資料敏感度,開拓但嚴謹的思維等。如果要對這些內容進行深入挖掘的話,應該會更加有趣。不過,需要掌握大量中文分詞、關鍵字提取等方面的知識和技能,難度也會更高。時間所限,在這裡不再進一步展開了。