黃錦帆 梁少華 張佳
摘要:通過對當(dāng)今的招聘現(xiàn)狀進(jìn)行研究,該文設(shè)計并開發(fā)出一款可視化分析系統(tǒng),主要分為數(shù)據(jù)采集、存儲與處理、數(shù)據(jù)分析、可視化等功能模塊。通過網(wǎng)絡(luò)爬蟲爬取到的招聘數(shù)據(jù),經(jīng)預(yù)處理和分析之后,將學(xué)歷、熱門職位、福利待遇及技能要求等進(jìn)行可視化展示,采用基于用戶的協(xié)同過濾算法對職位進(jìn)行推薦并實現(xiàn)動態(tài)更新。在一定程度上可幫助求職者了解目前的社會人才招聘需求,快速找準(zhǔn)自身定位。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;招聘數(shù)據(jù);協(xié)同過濾;可視化分析
中圖分類號:TP311? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)18-0039-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 引言
隨著國內(nèi)互聯(lián)網(wǎng)行業(yè)的飛速發(fā)展,以及一些非傳統(tǒng)因素的影響,網(wǎng)絡(luò)求職招聘愈發(fā)受到人們的歡迎。但其中也出現(xiàn)了一些問題,最突出的就是信息繁多雜亂,人崗的信息匹配度不是很理想。求職者希望可以直觀地看到某行業(yè)的現(xiàn)狀、發(fā)展前景以及招聘要求[1]。因此,我們可以利用相應(yīng)的數(shù)據(jù)可視化技術(shù),采用圖表及圖示等方式來展示分析后的結(jié)果,幫助他們提高求職效率。
2 相關(guān)技術(shù)
2.1 Scrapy爬蟲
它是基于Python開發(fā)的一個快速抓取Web站點并提取結(jié)構(gòu)化數(shù)據(jù)的一個爬蟲框架,其主要由調(diào)度器、下載器、爬蟲、實體管道、Scrapy引擎構(gòu)成。它的優(yōu)勢就是使用了Twisted異步網(wǎng)絡(luò)框架處理網(wǎng)絡(luò)通信,大大加快了下載速率。工作流程如下:首先爬蟲將發(fā)送請求的URL經(jīng)引擎交給調(diào)度器,然后其處理后通過下載中間件傳給下載器,下載器對網(wǎng)頁發(fā)起請求并接受下載響應(yīng)經(jīng)過引擎?zhèn)鹘o爬蟲,爬蟲接收響應(yīng)并解析提取數(shù)據(jù),最后將數(shù)據(jù)通過實體管道保存到本地或?qū)?yīng)數(shù)據(jù)庫[2],根據(jù)所需重復(fù)上述過程直到停止。
2.2 職位推薦算法
對求職者進(jìn)行相應(yīng)的職位推薦,需要精準(zhǔn)地了解到每個人的個性職位需求, 通過他們對某類職位的搜索次數(shù)以及對詳細(xì)信息的查看收藏次數(shù),系統(tǒng)會進(jìn)行相關(guān)熱度的計算并排序。這里采用了基于用戶的協(xié)同過濾算法,對歷史行為數(shù)據(jù)進(jìn)行度量打分,根據(jù)不同的求職者對某職位的偏好程度,使用歐幾里得距離評價公式來計算他們之間的系數(shù)關(guān)系。通過求職者之間的相似度數(shù)值,選擇關(guān)系最接近的用戶,利用他們的喜好為當(dāng)前用戶進(jìn)行相應(yīng)的職位推薦[3]。 職位推薦信息將會隨著用戶的點擊不斷地動態(tài)實時更新,更加智能化地幫助求職者找到合適的崗位。
2.3 可視化技術(shù)
可視化技術(shù)就是將大量雜亂的數(shù)據(jù)轉(zhuǎn)化為人們直觀易懂的可視化形式,突出重點、條理分明地將分析結(jié)果展示出來,其中包含了科學(xué)計算可視化、數(shù)據(jù)可視化及信息可視化。Python中封裝了大量的繪制圖表庫,如:matplotlib、bokeh等。在對網(wǎng)絡(luò)招聘數(shù)據(jù)的分析中,如何去設(shè)計頁面,使其美觀又不突兀,展示出所需的結(jié)果,是需要考慮的問題。本文通過對目前主流的可視化庫進(jìn)行比較,最后采用的是pyecharts可視化庫,它將基于百度可視化設(shè)計開源的Echarts庫和Python語言相結(jié)合,方便在Python中調(diào)用Echarts接口[4],直接生成可視化圖表,還可以生成可視化的HTML網(wǎng)頁,使用起來很方便。
3 系統(tǒng)設(shè)計
本系統(tǒng)基于B/S架構(gòu)開發(fā),主要分為數(shù)據(jù)采集、存儲和處理、數(shù)據(jù)分析、可視化四大功能模塊,將大量的業(yè)務(wù)邏輯直接在服務(wù)器端實現(xiàn),降低了開發(fā)和維護(hù)成本,也方便了用戶使用。使用三層結(jié)構(gòu)對系統(tǒng)進(jìn)行切片分層,模塊化的迭代式開發(fā),保證了各功能模塊的獨立性,便于開發(fā)和維護(hù)工作的展開。從上到下依次分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。架構(gòu)圖如圖1所示。
4 系統(tǒng)實現(xiàn)
4.1 數(shù)據(jù)采集模塊
網(wǎng)絡(luò)爬蟲主要是通過偽裝瀏覽器頭等繞開反爬機(jī)制,編寫遵循一定規(guī)則的腳本或者程序?qū)W(wǎng)站的信息進(jìn)行爬取,設(shè)計適宜的解析結(jié)構(gòu)對網(wǎng)頁結(jié)構(gòu)進(jìn)行解析得到數(shù)據(jù)。首先訪問Boss直聘,點擊不同的界面觀察,右鍵檢查進(jìn)入開發(fā)者工具,點擊Network,按F5刷新,觀察URL結(jié)構(gòu)。然后設(shè)計爬蟲的基本結(jié)構(gòu),構(gòu)造動態(tài)的URL來爬取想要的信息。為了繞開反扒機(jī)制,通過在瀏覽器的Headers中看到的User-Agent和Accept-Language以及Cookie,以此構(gòu)造表頭,讓瀏覽器允許爬蟲腳本訪問。將需要爬取的key關(guān)鍵字存儲在字典中,通過item方法進(jìn)行關(guān)鍵字的獲取,以便后面的爬取[5],使用的是request庫中的request.get()方法來獲取頁面,返回response對象。在Resopnse中可以看到爬取的字段的網(wǎng)頁構(gòu)造,以便于后面的解析數(shù)據(jù)。
4.2 數(shù)據(jù)存儲和處理模塊
由于爬蟲獲取到的數(shù)據(jù)并不都是符合規(guī)范的,存在著重復(fù)、不一致、錯誤、空值等問題。為了解決此不足,本文使用了Pandas庫來進(jìn)行數(shù)據(jù)處理的工作。首先將數(shù)據(jù)轉(zhuǎn)換為DataFrame格式,通過使用其中的isnull()方法來判斷數(shù)據(jù)是否為空值,DataFrame.fillna()方法對數(shù)據(jù)進(jìn)行填充;DataFrame.drop_duplicates()可以快速按行檢測并刪除重復(fù)的記錄[6]。
Python中包含了很多的常見存儲方式,如:MySQL、CSV文件、JSON文件等,這里使用的是MongoDB非關(guān)系型數(shù)據(jù)庫,它基于Key-Value保存數(shù)據(jù),能很好地適應(yīng)爬蟲字段變化,非常適合存儲爬取到的招聘信息中的職位名稱、工作地點、薪資福利待遇、學(xué)歷和技能要求等結(jié)構(gòu)化文本字段。用它存儲數(shù)據(jù)時,需要事先安裝好MongoDB數(shù)據(jù)庫并啟動相應(yīng)服務(wù),在Python中導(dǎo)入pymongo庫,然后使用client=pymongo.MongoClient(host=‘localhost,port=27017)創(chuàng)建數(shù)據(jù)庫連接對象,導(dǎo)入處理之后的數(shù)據(jù)集。
4.3 數(shù)據(jù)分析模塊
數(shù)據(jù)分析是整個流程中最重要的階段,它主要的工作是將上階段經(jīng)過清洗處理之后的數(shù)據(jù)按照一定的規(guī)則方法進(jìn)行分析,為之后的可視化展示提供數(shù)據(jù)支撐[7]。主要涉及:中文分詞、工作經(jīng)驗及學(xué)歷與薪資關(guān)系、熱門職位、繪制職位技能關(guān)鍵詞和福利待遇詞云圖、崗位地點分布等。
1)中文分詞:招聘信息多為中文文本,這里采用了jieba作為分詞工具。它基于前綴詞典實現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的DAG,采用動態(tài)規(guī)劃去查找最大的概率路徑, 找出基于詞頻的最大切分組合。具有高性能、準(zhǔn)確率高、速度快等特點。
2)工作經(jīng)驗、學(xué)歷與薪資的相關(guān)性:采用最小二乘法計算兩組數(shù)據(jù)的線性相關(guān)程度,公式如下:
r=[1nk=1n(xk- uxσx? × yk- uyσy)]
其中,[ux]、[σx]分別表示數(shù)據(jù)列x的平均值和標(biāo)準(zhǔn)差,[uy]、[σy]分別表示數(shù)據(jù)列y的平均值和標(biāo)準(zhǔn)差。相關(guān)系數(shù)r的值越接近于[±]1,說明相關(guān)程度越強(qiáng);r越接近于0,說明數(shù)據(jù)相關(guān)性越差。
3)熱門職位:首先使用K-means聚類算法,將數(shù)據(jù)中的職位名稱字段進(jìn)行分類,統(tǒng)計出數(shù)量最多的職位類別。在此類中對職位名稱字段使用jieba進(jìn)行中文分詞處理,統(tǒng)計它們出現(xiàn)的詞頻大小,得到出現(xiàn)次數(shù)最多的幾個職位關(guān)鍵詞,則它們就是此類中的熱門職位。
4)繪制技能及福利詞云圖:每個行業(yè)類型的職位技能關(guān)鍵字和福利待遇詞云的實現(xiàn)主要是通過遍歷所有的職位信息,再使用jieba分析統(tǒng)計各種關(guān)鍵字出現(xiàn)的次數(shù),統(tǒng)計詞頻進(jìn)行格式的轉(zhuǎn)換。最后使用Python的List.sort()方法設(shè)定參數(shù)進(jìn)行排序,就可以得到其頻率順序,從而通過Python中的WordCloud庫繪制這些詞的詞云,在可視化界面進(jìn)行展示。
5)崗位地點分布:通過對工作城市關(guān)鍵字進(jìn)行分詞統(tǒng)計,計算每個的總數(shù)大小。繪制分布圖來展示全國的工作崗位城市分布圖,可以通過圖上的顏色深淺大小來判斷崗位的數(shù)量。
4.4 數(shù)據(jù)可視化模塊
系統(tǒng)最后就是要實現(xiàn)對網(wǎng)絡(luò)招聘數(shù)據(jù)的可視化分析,將分析之后的結(jié)果以圖表或圖畫的形式展現(xiàn)在前臺界面上。主要使用了目前的主流開發(fā)Python Web框架Django以及pyecharts開源可視化庫[8]。
Django框架采用的是MVT模式,系統(tǒng)中的settings.py存放的是項目的各類配置文件,urls.py存放的是路由,wsgi.py是Web服務(wù)器與Django交互的入口。工作原理如下:首先是用戶通過瀏覽器來對頁面發(fā)起請求,之后請求會到達(dá)Request MiddlewaRes,其會對request做預(yù)處理或者是直接response回應(yīng),URLConf會將請求的url用來和urls.py中的進(jìn)行匹配,從而找到相應(yīng)的views。找到之后,就可以調(diào)用視圖views中的對應(yīng)函數(shù)對業(yè)務(wù)邏輯進(jìn)行處理。視圖views作為溝通橋梁,可以通過調(diào)用Model層來對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行訪問并返回。views接收到請求之后,構(gòu)造一個HttpResponse響應(yīng)對象,可以使用context來對上下文進(jìn)行處理,context被傳遞給template用來生成頁面。調(diào)用模板template里的render()方法并使用context傳進(jìn)的參數(shù)渲染HTML界面,將響應(yīng)對象返回到瀏覽器,呈現(xiàn)給用戶。
5 可視化分析結(jié)果
1)學(xué)歷分布狀況
在這個科技高速發(fā)展的時代,學(xué)歷是求職的敲門磚。對于沒有實踐經(jīng)驗的應(yīng)屆畢業(yè)生來說,更是衡量其學(xué)習(xí)能力、自身素質(zhì)的重要因素。從分析結(jié)果可知,本科占據(jù)了大多數(shù),與目前的教育狀況有關(guān)。另外,我們可以了解到現(xiàn)在的企業(yè)對求職者的學(xué)歷層次要求,更好地找準(zhǔn)自身定位[9]。
2)熱門職位展示
隨著科學(xué)技術(shù)的飛速發(fā)展,以人工智能領(lǐng)域為例,自動駕駛、元宇宙風(fēng)頭正盛,但也急需新的人工智能算法去解決出現(xiàn)的問題。因此,使得算法工程師、圖像處理、數(shù)據(jù)挖掘等領(lǐng)域也日趨熱門。隨著國家政策的不斷投入,工業(yè)產(chǎn)業(yè)鏈升級,相關(guān)的人才缺口巨大,創(chuàng)造了很多的就業(yè)機(jī)會。
3)數(shù)據(jù)挖掘的福利待遇詞云圖
以數(shù)據(jù)挖掘崗位為例,在眾多的福利待遇中,五險一金是其中最基本最重要的保障,隨之是績效和年終獎等,這是激勵求職者的重要手段。
4)職位技能要求詞云圖
以Python開發(fā)工程師為例,可以看到的是對于數(shù)據(jù)庫以及Web框架、工作經(jīng)驗、競賽還是比較看重的。對于之后有志從事于此的學(xué)生,要注意這方面的積累,打好堅實的專業(yè)基礎(chǔ)。
6 結(jié)束語
針對眾多的線上招聘信息,本文設(shè)計開發(fā)出一款基于網(wǎng)絡(luò)爬蟲的招聘數(shù)據(jù)可視化分析系統(tǒng)。采用的開發(fā)技術(shù)和方式,占用內(nèi)存少,完整地實現(xiàn)了功能。采用基于用戶的協(xié)同過濾算法對求職者進(jìn)行職位推薦,以各類圖表以及詞云的形式直觀地給用戶展示了各類分析結(jié)果,為他們展示了一個清晰的招聘求職現(xiàn)狀。它在一定程度上幫助人們找準(zhǔn)定位,及時調(diào)整求職方式和策略,具有積極的指導(dǎo)意義。
參考文獻(xiàn):
[1] 韓月喬.中小企業(yè)網(wǎng)絡(luò)招聘問題研究[J].價值工程,2020,39(16):223-224.
[2] 黎妍,肖卓宇.引入Scrapy框架的Python網(wǎng)絡(luò)爬蟲應(yīng)用研究[J].福建電腦,2021,37(10):58-60.
[3] 王碩.基于協(xié)同過濾的農(nóng)業(yè)新聞推薦系統(tǒng)的研究[D].長春:吉林農(nóng)業(yè)大學(xué),2021.
[4] 侯瑾菲,梁藝多.基于Python的政府開放數(shù)據(jù)可視化應(yīng)用研究[J].科學(xué)技術(shù)創(chuàng)新,2021(34):160-162.
[5] 黎曦.基于網(wǎng)絡(luò)爬蟲的論壇數(shù)據(jù)分析系統(tǒng)的設(shè)計與實現(xiàn)[D].武漢:華中科技大學(xué),2019.
[6] 殷麗鳳,張浩然.基于Python網(wǎng)上招聘信息的爬取和分析[J].電子設(shè)計工程,2019,27(20):22-26.
[7] 孫亞紅.基于Python的招聘信息爬蟲系統(tǒng)設(shè)計[J].軟件,2020,41(10):213-214,235.
[8] 白昌盛.基于 Django的 Python Web開發(fā)[J].信息與電腦,2019,31(24):37-40.
[9] 扶明亮,李剛.基于招聘網(wǎng)站大數(shù)據(jù)分析的求職者需求與企業(yè)需求匹配研究[J].統(tǒng)計與管理,2021,36(8):91-97.
【通聯(lián)編輯:梁書】