姜永成
(黔南民族職業技術學院 貴州 都勻 558000)
當前,社會高速發展,已然從IT 時代走向DT 時代。在此背景下,國外與國內企業相繼開展人才爭奪戰,如今人才已成為了最緊缺資源之一,企業為了吸引人才、用好人才、留住人才,采取了一系列措施。在信息化網絡快速發展的今天,以往傳統的招聘方式已經不適應當今企業對人才招聘的需求。網絡招聘由于具有覆蓋范圍廣、成本低、信息傳播速度快以及信息甄別優等特點受到廣大企業的追捧,已經成為當下主流的招聘方式。
軟件研發由多個部分構成,需求分析是非常重要的部分,是在調查研究、分析和與用戶交流之后對軟件具體需求有全面的掌握,再將具體需求制定成規范性的、清晰完整的需求文檔,對系統性能與功能等方面的要求進行確定。系統需求分析也可以稱為軟件需求分析或者需求分析工程等。本文首先進行調研分析,并以網絡招聘具體情況和需求為基礎,完成系統功能性需求的明確,具體包含數據獲取、導入、處理、分析和可視化5個模塊。在開發網絡招聘數據可視化分析系統之前,開發相關人員需要對系統進行詳細的調研,首先需要確定開發系統的可行性,本文主要從推廣可行性、經濟可行性、技術可行性、應用可行性等方面介紹該系統的可行性。
本文研發的系統運用的架構為B/S 架構,研發平臺為Pycharm,語言選擇Python,框架選擇Django,同時利用AdminLTE 框架完成前臺頁面的設計與實現,該框架是以JQuery 與Bootstrap3 為基礎的。因為數據處理與分析任務量非常大,Python 內部含有的類庫是非常多的,并且高級數據結構也非常齊全,框架成熟度也較高,使數據處理與分析更加便捷。因此本課題研發的系統選擇的編程語言為Python,Pycharm將Python研發需要的特性和工具進行集成,對于Web 研發框架給予更好的支持。數據分析結果基本上是通過直觀的圖標形式進行展現,因此系統還需要對ECharts圖表庫進行運用。對于獲取和分析數據等功能模塊生成的文件在存儲時基本上是以Excel 和CSV 為最主要的形式,CSV 可看作簡易的Excel。數據儲存格式為CSV,讀取和寫入都更加便捷,而且實現起來難度也很小,與Excel文件相比占用空間更小。
該功能模塊是指利用Scrapy框架完成爬蟲程序對獵聘網和前程無憂兩個招聘網站的職位數據進行爬取。數據爬取以前利用瀏覽器對這兩個招聘網站進行訪問,使用鼠標點擊頁面中的統一資源定位器(Uniform Resource Locator,URL)等信息,對訪問地址URL的改變情況進行觀看,同時對最后要訪問的URL和爬蟲程序結束條件進行確定,接下來將要訪問的URL在爬蟲程序內部動態構建,同時對其結束條件進行設置,使爬蟲程序能夠及時停止。將請求發送給URL,獲取到URL 反饋結果后完成HTML 分析,借助Xpath 解析庫將可視化分析系統需要的信息進行解析并將其保存到csv 文件或直接保存到mysql 數據庫中,提取數據以職位ID、地區、企業名稱、學歷、經驗、職位描述以及薪資福利等為主,可以在網頁信息解析過程中完成職位描述的url 的動態構建,接下來對職位描述頁面url 繼續訪問,進而將職位描述信息進行獲取。
數據導入功能是將招聘數據文件導入系統中便于后續的數據處理與數據分析,也使系統能夠在數據發生改變時及時將最新數據向系統進行導入,從而保證分析結果的時效性。數據導入功能是由數據與模板的下載與數據上傳構成的。系統頁面中有文件選擇的按鈕,通過該按鈕可以將所需文件進行上傳,待確定上傳之后還需要根據系統中提供的模板文件將已經傳遞給系統的文件與其匹配格式,對傳遞給系統的文件是否具有正確格式進行確定。本系統數據庫管理系統選擇MySQL關系型數據庫,MySQL屬于開源的數據庫,使用成本較低,并且開發人員對MySQL數據庫比較易于入手。其中招聘崗位信息表記錄著崗位的信息,主要包括崗位記錄編號ID、崗位名稱、最高工資、最低工資、崗位所在城市、公司名稱等12個數據項。
可視化分析是以數據處理為基礎的,數據分析通過Python展開分析的過程中,如果與數據庫直接相連,就將所需模塊導進Python中即可。不過由于獲取到的部分數據中存在很多問題,如噪聲、完整性不好、一致性不高、重復和遺失等,若不進行處理就進行可視化分析,分析結果必然會受到很大程度的影響。因此,需要利用Python 內部的pandas 庫將數據庫內部的信息向DataFrames寫入,以實現數據清洗,完成清洗處理以后再展開可視化分析。
2.4.1 中文分詞
在對獲取的數據集進行分析時,可以采用分詞、去停用詞等方式對非結構化的招聘信息文本進行處理。本文選用的中文文本分詞工具為jieba,jieba 是中文自然語言處理分詞庫,具有實用性強、使用簡單等特點,是一種概率語言分詞模型。最大概率路徑的查詢是通過動態規劃來獲取的,保證以詞頻為基礎的最大切分組合能夠順利獲取到。Jieba對全模式、精確模式和搜索引擎模式支持,并且繁體分詞與自定義詞典也都支持[1]。基于向環形圖(DAG)式,那些在字段里沒有查詢到的字段組成新的短語,即“未登錄詞”,然后通過隱馬爾科夫模型(Hidden Markov Model,HMM)分詞精確率得到顯著提升,通過Viterbi 算法使最佳隱藏狀態序列獲取到。對隱藏變量的馬爾科夫隨機的整個流程進行描述,這個模型要應用到3 個概率矩陣、2 個序列,3個概率矩陣分別為狀態生成觀測概率矩陣B、狀態轉移概率矩陣A和初始狀態概率矩陣π。{0,z,Π,A,B,λ=(Π,A,B)}可表示HMM,其模型可由λ=(Π,A,B)進行決定,Π和A對觀測序列有決定性作用,狀態序列是由B來決定的。訓練、預測與分詞是HMM的中文分詞的具體步驟。
2.4.2 文本表示
清洗、分詞和清除停用詞之后,數據分析還是不能進行,其原因是招聘數據是以文本形式表示,而這種文本都屬于非結構化數據,但算法顯然要求長度固定的數值特征向量。所以文本數據長度并未保持統一,就不能使用算法完成分析。因此要在數據原義維持不變的前提下,對其向量化處理以滿足計算機處理要求。本課題研發的系統選擇以文檔特征向量表示為基礎的向量空間模型實現文本的表示,英文簡稱是VSM,全稱為Vector Space Model。
這里采用TF-IDF作為權重確定的數值統計方法。該方法原旨在反映單詞對集合或者語料庫中文檔的重要性,在信息檢索、文本挖掘和用戶建模的搜索中常用作加權因子,其值與單詞在文檔中出現的次數成正比地增加,并被包含該單詞的語料庫中的文檔數量所抵消[2]。文章賦權特征項是通過TF-IDF 算法完成,文本內容中特征項體現越顯著權重越大,反之則權重就更小,這樣使關鍵詞能夠順利抽取出來。該算法基本思想為文本中詞出現頻次越高對應的重要程度就越大,出現頻次越少對應的重要程度越小[3]。
TF(Term Frequency)是指詞頻,用d表示文檔,用t表示特征項,TF是指d中t出現頻率,如果一個詞語ti在文檔dj中出現了ni,j次,那么ti的詞頻可表示為
逆向文件頻率簡稱IDF,可對一個字詞在文檔中普遍重要性衡量,IDF 為文檔總數乘以全部包含該字詞的文檔總數,然后獲取的結果去對數后就是該字詞的IDF[4]。對應的計算公式為
式(2)中,分子|D|為指語料庫內文章總體數量,分母表示含有此詞組的文章數量,通常會將分母進行加1,其目的是保證分母不會等于0,對應公式為
接下來利用下面公式將TF 與IDF 相乘后就能夠得到結果。
提取特征時Document是招聘信息,經過分詞處理和清除停用詞后就是Term。接下來計算TF-IDF 并按從大到小排列計算得到的結果,抽取出招聘數據中的新的特征詞,并在此前提下利用TF-IDF 加權詞向量,這樣加權詞矩陣就完成建立。
前臺頁面設計與可視化顯示構成可視化模塊,前臺頁面中注冊與登錄功能是非常重要的,任何用戶如果要對招聘信息分析結果進行查看,就要按照網頁提醒完成注冊操作,然后再進行登錄,這種方式能夠使平臺安全得到更好的保證。系統會將分析結果可視化展現給用戶,其中菜單欄主要包括總體信息概覽、Java 職位展示、前端開發崗位展示、Android崗位展示、數據分析工程師崗位展示、C/C++職位展示。
可視化分析系統的研發使用Python 語言、scrapy框架、Django 框架,為實現研發效率的提升,研發環境中操作系統選擇應用最為普遍且更加熟悉的Windows。Python 中內置了Python Shell 和IDE,使程序開發難度進一步降低。
3.2.1 數據獲取
系統需要的數據集通過scrapy框架進行獲取,主要收集的內容包括學歷要求、薪資福利、工作地區、崗位名以及企業名稱等。新建scrapy項目,在項目下新建爬蟲文件。在項目文件中編寫爬蟲文件、items文件、管道文件pipelines,配置settings。
3.2.2 數據導入
該模塊負責將數據獲取模塊獲取到的數據向系統內部導入,使后續數據分析工作更加便捷。該模塊的功能包含兩個方面:一為下載模塊,二為上傳數據的功能。對于第一個功能來說,就是將數據格式文件存儲到保存靜態文件的data 目錄中來,再在頁面內利用標簽提供模板下載的鏈接實現模板下載的功能。該功能通過頁面文件中的input標簽對文件進行選擇,再在Django后臺與模板文件匹配格式。匹配完成以后在upload文件夾中保存相應的文件,為以后數據分析和數據處理提供依據。
3.2.3 數據處理
得到的數據基本上噪聲偏多且規范性較差,因此要進行重復數據、缺失數據和異常數據的處理。文章對于此類數據的處理是通過Python內的pandas庫來實現的,處理過程如下。
(1)數據提取。創建數據庫連接對象,從MYSQ提取db=pymysql.connect(host='localhost',user='root',password='',db='liepindb',charset='utf8')。連接數據庫成功后,對數據庫中table 數據表進行讀取:data=db[collection].find(query)讀取結束以后,通過pandas 庫使數據庫內部的數據向DataFrame 形式進行轉變:df=pd.DataFrame(list(data))。
(2)數據去重。可以通過drop_duplicate方法對清除DataFrame格式的重復數據,再將格式為DataFrame的數據進行返回。重復數據的清除對應代碼為DataFrame.drop_duplicates(subset=None,keep='first',inplace=False)。
(3)填充數據。若數據缺失嚴重,完整性很低,就要刪除數據,不過如果數據缺失情況不是很嚴重,并且缺失的數據并非重要數據,此時可通過填充方式來解決。本課題中填充數據是通過DataFrame.fillna()函數來實現的。
3.2.4 數據分析
數據分析模塊最開始是要從數據庫中將已經處理完成的文本讀出來,還需要對其進行分詞和清除停用詞等處理過程,使后續數據分析更加便捷。本系統中對于分詞預處理選擇jieba分詞工具,這種工具支持的分詞模式主要有精確模式、全模式以及搜索引擎模式[5]。使用最大熵、支持向量機等多種經典機器學方法,逐步提高分類準確率,通過對詞語所在的語句的語境和該詞語與語句中其他詞語的依賴關系進行分析,構建了文本表示模型。其中,jieba部分核心源代碼如下:
3.2.5 數據可視化該系統首頁設計是通過Bootstrap 框架來完成的,首頁設計簡潔大氣且美觀入眼,用戶能夠從首頁中利用相應的操作完成不同功能,如檢索、登錄或者注冊等。如分析職位描述以后,對各個崗位展開相似的研究,提取關鍵詞通過TF-IDF 算法進行實現,生成詞云圖是由Python內的Wordcloud模塊來完成的,能夠很容易發現,技術崗位不同對應的專業技能需求也存在差異,詞云圖涵蓋很多個人素質方面的要求,將企業對員工能力和素質方面等要求更直觀地展現出來。總之,Python 作為大數據處理的主要操作語言,可以有效處理海量數據,并將數據結果以直觀圖形顯示,更易于數據使用人的讀取和理解[6]。
近年來,這些技術被越來越多地應用于招聘就業工作,以提高管理效率和就業質量。本文完成網絡招聘數據可視化分析系統的研發,前臺和后臺分離是通過Django 框架實現的,前臺頁面設計應用JQuery、CSS和HTML 等多種工具與技術。最后展現平臺頁面,具體頁面有系統首頁、用戶注冊與登錄頁面、用戶管理頁面,為求職者提供實用的數據支持,幫助他們更好地了解招聘市場的情況、分析市場趨勢。