嚴(yán) 志
(長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院軟件學(xué)院,湖南長(zhǎng)沙410004)
隨著云計(jì)算技術(shù)的不斷發(fā)展,大數(shù)據(jù)內(nèi)含的價(jià)值逐漸被人們正視。淘寶大數(shù)據(jù)系統(tǒng)[1]會(huì)統(tǒng)計(jì)用戶(hù)頁(yè)面級(jí)的點(diǎn)擊量來(lái)分析熱門(mén)產(chǎn)品,將最受歡迎的產(chǎn)品推薦給用戶(hù),并且能夠根據(jù)用戶(hù)年齡、歷史消費(fèi)記錄向用戶(hù)推薦其他產(chǎn)品。農(nóng)夫山泉公司利用大數(shù)據(jù)系統(tǒng)分析礦泉水的銷(xiāo)售[2],這些數(shù)據(jù)分析體現(xiàn)在如何在終端擺放產(chǎn)品、產(chǎn)品購(gòu)買(mǎi)者的年齡、消費(fèi)者消費(fèi)停留時(shí)間、購(gòu)買(mǎi)數(shù)量等,系統(tǒng)甚至還將物流數(shù)據(jù)也納入評(píng)價(jià)范圍,通過(guò)數(shù)據(jù)精準(zhǔn)分析使產(chǎn)品利潤(rùn)達(dá)到最大。Wal-Mart應(yīng)用大數(shù)據(jù)分析系統(tǒng)Polaris研究用戶(hù)的消費(fèi)行為,該系統(tǒng)利用 Deep learning、Semantic data、Machine learning等方式對(duì)用戶(hù)輸入關(guān)鍵詞進(jìn)行文本分析,深度挖掘用戶(hù)所需商品并支持個(gè)性化推薦。社交巨頭Facebook公司利用用戶(hù)在平臺(tái)上留下的歷史數(shù)據(jù)進(jìn)行大數(shù)據(jù)計(jì)算,能夠判斷出用戶(hù)的財(cái)務(wù)狀況、教育水平,使得用戶(hù)個(gè)人數(shù)據(jù)能夠被一覽無(wú)余。
目前工業(yè)界各大廠商如Amazon、IBM、Google、Microsoft、Sun、阿里巴巴等公司都推出自己的大數(shù)據(jù)系統(tǒng),越來(lái)越多的學(xué)者推出了大數(shù)據(jù)在行業(yè)領(lǐng)域內(nèi)的應(yīng)用。孟超、金龍、孫知信[3]運(yùn)用無(wú)線(xiàn)傳感網(wǎng)絡(luò)技術(shù),設(shè)計(jì)構(gòu)建了一個(gè)傳感網(wǎng)結(jié)點(diǎn)實(shí)時(shí)定位跟蹤的大數(shù)據(jù)傳輸模型;荊旭全、蔡德楠等開(kāi)發(fā)精準(zhǔn)施肥大數(shù)據(jù)系統(tǒng)及相應(yīng)的信息服務(wù)應(yīng)用平臺(tái),集施肥決策、農(nóng)技推廣、施肥數(shù)據(jù)可視化于一體[4];徐超、吳波提出了以最小化系列跨域作業(yè)平均完成時(shí)間為優(yōu)化目標(biāo)的在線(xiàn)隨機(jī)調(diào)度算法處理跨域大數(shù)據(jù)帶來(lái)的作業(yè)完成時(shí)延[5];行艷妮、錢(qián)育蓉等分析了內(nèi)存計(jì)算框架Spark和K-means聚類(lèi)算法,分析了K-means算法聚類(lèi)不穩(wěn)定性的因素,提出優(yōu)化K-means算法方法[6];王靜宇等提出了基于數(shù)據(jù)敏感性Hadoop大數(shù)據(jù)訪(fǎng)問(wèn)控制模型,模型利用數(shù)據(jù)內(nèi)容、使用模式和數(shù)據(jù)敏感性來(lái)強(qiáng)化訪(fǎng)問(wèn)控制策略,在評(píng)估數(shù)據(jù)敏感性上用戶(hù)干預(yù)最小[7]。趙帥對(duì)大數(shù)據(jù)知識(shí)服務(wù)模式進(jìn)行分析,以圖書(shū)館用戶(hù)信息作為研究調(diào)查對(duì)象,并對(duì)平臺(tái)中關(guān)鍵技術(shù)進(jìn)行探索[8]。楊正理、史文等利用海量招生異構(gòu)數(shù)據(jù),采用并行化隨機(jī)森林預(yù)測(cè)高校招生策略模型,縮短了模型的預(yù)測(cè)時(shí)間、提高了模型的預(yù)測(cè)精度[9]。
本文以某招聘網(wǎng)站數(shù)據(jù)作為數(shù)據(jù)源,通過(guò)爬取網(wǎng)頁(yè)關(guān)鍵數(shù)據(jù),然后將數(shù)據(jù)保存到云平臺(tái),接著對(duì)數(shù)據(jù)進(jìn)行清洗、聚類(lèi),最后使用可視化工具將分析結(jié)果呈現(xiàn)出來(lái)。通過(guò)大數(shù)據(jù)系統(tǒng)分析,可以得到某個(gè)地區(qū)的薪資水平、崗位分布、學(xué)歷要求、工作行業(yè)性質(zhì)等數(shù)據(jù),為企業(yè)精準(zhǔn)人才需求、技能要求提供了可靠的服務(wù)。
大數(shù)據(jù)體量巨大,數(shù)據(jù)價(jià)值密度低,聚類(lèi)分析是將數(shù)據(jù)樣本劃分為若干個(gè)不相交的子集,每一個(gè)子集稱(chēng)為一個(gè)簇。一般是用來(lái)對(duì)數(shù)據(jù)按照特征屬性進(jìn)行分組,經(jīng)常被應(yīng)用在客戶(hù)分群、欺詐檢測(cè)、圖像分析等領(lǐng)域。
K-means是最典型的聚類(lèi)算法,其主要思想是:給定K值和K個(gè)初始類(lèi)簇中心點(diǎn),計(jì)算數(shù)據(jù)節(jié)點(diǎn)到所有類(lèi)簇中心點(diǎn)的歐式距離,把每個(gè)數(shù)據(jù)節(jié)點(diǎn)加入到類(lèi)簇中心點(diǎn)距離最小的類(lèi)簇中,直到所有數(shù)據(jù)節(jié)點(diǎn)分配完畢,再次計(jì)算類(lèi)簇中所有數(shù)據(jù)節(jié)點(diǎn)到各類(lèi)簇中心的距離,取距離的均值重新計(jì)算該類(lèi)簇的中心點(diǎn),然后所有數(shù)據(jù)節(jié)點(diǎn)再次進(jìn)行聚類(lèi)迭代分配并更新類(lèi)簇中心點(diǎn)的,直至類(lèi)簇中心點(diǎn)的變化很小,或者達(dá)到指定的迭代次數(shù)。
給定數(shù)據(jù)樣本 D,包含了 n 個(gè)對(duì)象 D={X1,X2,X3,...,Xn},其中每個(gè)對(duì)象包含m個(gè)維度屬性,算法目標(biāo)是將n個(gè)對(duì)象依據(jù)對(duì)象間的相似性聚集到指定的k個(gè)類(lèi)簇中,每個(gè)對(duì)象僅且屬于一個(gè)其到類(lèi)簇中心距離最小的類(lèi)簇。
k 個(gè)類(lèi)簇定義為 ={C1,C2,C3,...,CK},1≤k≤n,通過(guò)計(jì)算對(duì)象X到C中的每個(gè)聚類(lèi)中心的歐式距離,公式如下:
上式中是樣本數(shù)據(jù)對(duì)象,1≤i≤n,Cj表示第j個(gè)聚類(lèi)中心,1≤j≤k,Xit表示 Xi對(duì)象的第 t個(gè)屬性,1≤t≤m,Cjt表示第j個(gè)聚類(lèi)中心的第t個(gè)屬性,依次比較每一個(gè)對(duì)象到每一個(gè)聚類(lèi)中心的距離,將對(duì)象分配到離聚類(lèi)中心最近的類(lèi)簇中,得到 k 個(gè)類(lèi)簇{S1,S2,S3,...,Sk}。
K-means算法用類(lèi)簇中心定義了類(lèi)簇的原型,類(lèi)簇中心就是類(lèi)簇內(nèi)所有數(shù)據(jù)對(duì)象在各個(gè)維度的均值,其計(jì)算公式如下:
上式中,Cl表示第L個(gè)聚類(lèi)的中心,1≤L≤k,|Sl|表示第L個(gè)類(lèi)簇中對(duì)象的個(gè)數(shù),Xi表示第l個(gè)類(lèi)簇中的第i個(gè)對(duì)象,1≤i≤|Sl|
該算法的實(shí)現(xiàn)如下[10]:
輸入:樣本集 D={X1,X2,X3,...,Xn},k 個(gè)聚類(lèi)簇?cái)?shù)
過(guò)程:
1:從樣本集D中隨機(jī)選擇k個(gè)樣本作為初始向量值{u1,u2,u3,…,uk}
2:repeat
3:令 Ci= φ(1≤i≤n)
4:for j=1,2,3,…,mdo
5:計(jì)算樣本xj與各均值向量ui(1≤i≤k)的距離,dji=|xj-ui|2;
6:根據(jù)距離最近的均值向量確定xj的簇標(biāo)記:
7:將樣本xj劃入相應(yīng)的簇:
8:end for
9:for i=1,2,…,k do
11:if u'i!=uithen
12:將當(dāng)前向量值ui更新為u'i;
13:else
14:保持當(dāng)前均值不變
15:end if
16:end for
17:until當(dāng)前均值向量均未更新
輸出:簇劃分 C={C1,C2,C3,...,Ck}
招聘大數(shù)據(jù)分析系統(tǒng)的主要原理是:利用開(kāi)源框架解析數(shù)據(jù)源,將爬取得到的文本數(shù)據(jù)經(jīng)過(guò)分詞算法處理后上傳到HDFS,經(jīng)過(guò)MapReaduce處理后存儲(chǔ)到云數(shù)據(jù)庫(kù)Hbase,然后訪(fǎng)問(wèn)云數(shù)據(jù)庫(kù)計(jì)算獲取元數(shù)據(jù),對(duì)不規(guī)則的數(shù)據(jù)進(jìn)行清洗,將清洗后的數(shù)據(jù)存放到Hbase列簇,清洗列簇?cái)?shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行聚類(lèi)分析,將聚類(lèi)結(jié)果通過(guò)可視化的形式直觀展示給用戶(hù)。系統(tǒng)以Hadoop作為云平臺(tái),采用第三方招聘網(wǎng)站作為數(shù)據(jù)源,得到了如圖1的系統(tǒng)的核心架構(gòu)。
圖1 系統(tǒng)架構(gòu)圖
系統(tǒng)自下而上分為數(shù)據(jù)解析層、數(shù)據(jù)存儲(chǔ)層和數(shù)據(jù)應(yīng)用層,每一層的實(shí)現(xiàn)細(xì)節(jié)如下。
數(shù)據(jù)解析層:數(shù)據(jù)解析層主要功能是爬取第三方網(wǎng)站的web數(shù)據(jù),運(yùn)用中文分詞,xpath解析獲取數(shù)據(jù)源。爬蟲(chóng)核心采用第三方爬蟲(chóng)框架WebMagic,系統(tǒng)架構(gòu)如圖2所示。Downloader通過(guò)http請(qǐng)求從互聯(lián)網(wǎng)上下載頁(yè)面,交給頁(yè)面處理對(duì)象PageProcesor處理。頁(yè)面處理對(duì)象采用jsoup工具解析頁(yè)面,通過(guò)xpath表達(dá)式抽取頁(yè)面關(guān)鍵信息,如果發(fā)現(xiàn)新的鏈接加入到采集地址隊(duì)列Scheduler。Scheduler調(diào)度管理待抓取的URL,對(duì)URL集合來(lái)進(jìn)行去重,Pipeline負(fù)責(zé)處理抽取結(jié)果,將數(shù)據(jù)持久化到文件、數(shù)據(jù)庫(kù)。
圖2 WebMagic架構(gòu)
數(shù)據(jù)存儲(chǔ)層:WebMagic網(wǎng)絡(luò)爬蟲(chóng)程序獲得數(shù)據(jù)源之后,將數(shù)據(jù)保存到云數(shù)據(jù)庫(kù)HBase,爬取過(guò)程中需要進(jìn)行中文分詞處理,本文使用的中文分詞工具是基于Lucence內(nèi)核的庖丁解牛工具,該工具可實(shí)現(xiàn)自定義詞典,將特殊詞語(yǔ)構(gòu)建詞典保存到項(xiàng)目路徑即可。將所得到的數(shù)據(jù)存入到HDFS文件中,然后對(duì)HDFS中的文件進(jìn)行MapReducer大數(shù)據(jù)處理,清晰無(wú)規(guī)則數(shù)據(jù),將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)到HBase中。為了對(duì)數(shù)據(jù)進(jìn)行歸類(lèi)整理,找出統(tǒng)計(jì)規(guī)律再次對(duì)清洗的數(shù)據(jù)進(jìn)行聚類(lèi)分析,將聚類(lèi)分析的結(jié)果存儲(chǔ)到MongoDB。以崗位聚類(lèi)分析為例,通過(guò)搜集發(fā)布的工作崗位,按照地區(qū)顯示崗位數(shù)量,可以推導(dǎo)出工作熱點(diǎn)。
數(shù)據(jù)應(yīng)用層:通過(guò)云平臺(tái)存儲(chǔ)的大量數(shù)據(jù),可以按照用戶(hù)的要求抽取數(shù)據(jù),然后在數(shù)據(jù)應(yīng)用曾定義顯示數(shù)據(jù)的接口,將數(shù)據(jù)與接口對(duì)應(yīng)起來(lái)即可。典型的應(yīng)用如按照崗位發(fā)布的地區(qū)統(tǒng)計(jì)工作數(shù)目,按照崗位的學(xué)歷要求統(tǒng)計(jì)工作數(shù)目,按照工作發(fā)布的招聘企業(yè)類(lèi)型統(tǒng)計(jì)工作分布。
通過(guò)網(wǎng)絡(luò)爬取數(shù)據(jù)文檔模型是一個(gè)N元組,其定義為:
<PAGEID, JOBNAME,LOCATION,RELEASEDATE,SALARY,EXPERIENCE,EDUCATION,AMOUNT,COMPANY_SCALE,CATEGORY,COMPANY_INDUSTRY,COMPANY_NAME,COMPANY_NATURE,ISTAGED,DISCRIPTION>,
其含義分別是html頁(yè)面編號(hào),崗位名稱(chēng),招聘地點(diǎn),發(fā)布日期,薪資水平,工作經(jīng)驗(yàn),教育水平,公司規(guī)模,招聘人數(shù),崗位類(lèi)別,所處行業(yè),公司名稱(chēng),公司性質(zhì),是否標(biāo)記,任職要求,其爬取原型數(shù)據(jù)如下圖3所示。
通過(guò)Web端遠(yuǎn)程訪(fǎng)問(wèn)云數(shù)據(jù)庫(kù)HBase的數(shù)據(jù),Hbase數(shù)據(jù)表效果如圖4所示。
圖4 Hbase表數(shù)據(jù)
原始頁(yè)面的數(shù)據(jù)如圖3所示,是一個(gè)不規(guī)則文檔,需要對(duì)數(shù)據(jù)進(jìn)行清洗。以公司行業(yè)性質(zhì)為例,在配置文件中,詳細(xì)定義了各種性質(zhì)的類(lèi)型,如國(guó)企、民營(yíng)企業(yè)、事業(yè)單位、外企、私企等等,由于有些就業(yè)發(fā)布信息沒(méi)有說(shuō)明,所以爬取的時(shí)候無(wú)法獲得數(shù)據(jù),對(duì)于這些數(shù)據(jù)需要進(jìn)行處理。在招聘需求時(shí),許多公司都發(fā)布了職位的任職需求,爬取數(shù)據(jù)會(huì)將換行數(shù)據(jù)或者是空數(shù)據(jù)存放,這些數(shù)據(jù)是不規(guī)則數(shù)據(jù),需要進(jìn)行清理。在獲得職位的類(lèi)別時(shí),需要對(duì)工作任職要求或者工作名進(jìn)行中文分詞,然后匹配工作類(lèi)型詞庫(kù),分析該工作所屬類(lèi)別。
數(shù)據(jù)清洗關(guān)鍵步驟如下:
(1)通過(guò)手動(dòng)配置開(kāi)啟數(shù)據(jù)清洗服務(wù);
(2)從云數(shù)據(jù)庫(kù)Hbase的列族讀取爬取原始數(shù)據(jù);
(3)根據(jù)配置文件的規(guī)則對(duì)原始字段進(jìn)行清洗判斷或者分詞處理;
(4)將處理后的數(shù)據(jù)緩存到集合中,批量提交到云數(shù)據(jù)庫(kù)的清洗列族;
(5)數(shù)據(jù)清洗后,按崗位類(lèi)別保存數(shù)據(jù),關(guān)閉清洗服務(wù);
以下是截取以云計(jì)算分類(lèi)的配置文件,當(dāng)崗位名稱(chēng)或者任職描述中包含以下詞語(yǔ)時(shí),可以將該條記錄分類(lèi)到云計(jì)算的類(lèi)別當(dāng)中。
數(shù)據(jù)清洗完畢之后,所有的數(shù)據(jù)保存到HBase中,聚類(lèi)服務(wù)根據(jù)用戶(hù)需求,按崗位類(lèi)別進(jìn)行數(shù)據(jù)聚類(lèi)計(jì)算,然后顯示給用戶(hù)。其工作流程如圖5所示。
圖5 數(shù)據(jù)聚類(lèi)流程
本文以爬取的492條計(jì)算機(jī)類(lèi)招聘數(shù)據(jù)作為研究對(duì)象,按照 develop、operation、framework 三類(lèi)進(jìn)行抽取,詳細(xì)聚類(lèi)過(guò)程如下:
1.從服務(wù)配置中啟動(dòng)服務(wù),輸入待聚類(lèi)的崗位集合;
2.根據(jù)指定的崗位集合從清洗數(shù)據(jù)庫(kù)中解析數(shù)據(jù)源,并對(duì)所有的數(shù)據(jù)崗位進(jìn)行分類(lèi),形成崗位集合數(shù)據(jù);
3.遍歷崗位集合數(shù)據(jù),對(duì)每一個(gè)崗位的任職要求進(jìn)行分詞計(jì)算,獲得每一個(gè)崗位的描述;
4.以崗位分類(lèi)和崗位描述分析進(jìn)行向量距離計(jì)算,并將結(jié)果作為數(shù)據(jù)聚類(lèi)的依據(jù);
5.將向量結(jié)果計(jì)算并以MongoDB文檔對(duì)象存儲(chǔ),最后將MongoDB對(duì)象文檔提交到MongoDB數(shù)據(jù)庫(kù)中
6.通過(guò)web前端的計(jì)算,將文檔對(duì)象轉(zhuǎn)換成json對(duì)象數(shù)據(jù),顯示到html文檔中。
服務(wù)配置的關(guān)鍵代碼如下所述:
本系統(tǒng)的開(kāi)發(fā)是在南京55所云計(jì)算系統(tǒng)框架下展開(kāi)的,通過(guò)數(shù)據(jù)采集整理分析可以發(fā)掘出用戶(hù)想要的數(shù)據(jù)。圖6是以開(kāi)發(fā)、運(yùn)維和架構(gòu)三個(gè)類(lèi)簇模型進(jìn)行的聚類(lèi)效果展示,每個(gè)類(lèi)簇包含若干數(shù)據(jù)記錄。以開(kāi)發(fā)類(lèi)簇為例,該類(lèi)簇總的記錄條數(shù)是27條,占所有類(lèi)簇中記錄數(shù)據(jù)的84.38%,在開(kāi)發(fā)類(lèi)簇中,主要分為云計(jì)算開(kāi)發(fā)工程師和云應(yīng)用開(kāi)發(fā)工程師,通過(guò)該數(shù)據(jù)可以得出,云計(jì)算開(kāi)發(fā)工程師在就業(yè)市場(chǎng)比較受歡迎。
圖6 崗位聚類(lèi)效果
圖7 地區(qū)分布效果圖
在所有采集的數(shù)據(jù)中,按照崗位發(fā)布的地區(qū)進(jìn)行統(tǒng)計(jì),形成了如圖7的效果圖,通過(guò)不同的地區(qū)顏色標(biāo)記崗位的發(fā)布數(shù)量,可以得出全國(guó)崗位發(fā)布密集的地區(qū)是浙江、上海、北京、廣東、湖北、四川等省市,其中廣東發(fā)布的工作崗位需求量最大。
根據(jù)用戶(hù)的需求,還可以抽取其他數(shù)據(jù)進(jìn)行分析,如分析工作的薪水、招聘公司的行業(yè)性質(zhì)、崗位學(xué)歷的要求等等。
本文詳細(xì)描述了聚類(lèi)算法的思想及算法實(shí)現(xiàn),解剖了Hadoop環(huán)境下招聘大數(shù)據(jù)系統(tǒng)架構(gòu),論述了源數(shù)據(jù)的大爬取,數(shù)據(jù)整理保存到Hbase,然后對(duì)Hbase數(shù)據(jù)進(jìn)行清洗和聚類(lèi),將聚類(lèi)的結(jié)果保存到MongoDB,,最后通過(guò)echarts顯示出來(lái),為今后類(lèi)似大數(shù)據(jù)系統(tǒng)的開(kāi)發(fā)提供參照。
本文的聚類(lèi)算法是基于Spark框架下自帶的聚類(lèi)方法,對(duì)于聚類(lèi)的k值的選取及算法的性能測(cè)試并沒(méi)有做深入的研究,聚類(lèi)算法的演變有基于原型聚類(lèi)、密度聚類(lèi)及層次聚類(lèi)等,在算法改進(jìn)需要做進(jìn)一步的研究。
長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院學(xué)報(bào)2019年1期