王國(guó)珺
(福州職業(yè)技術(shù)學(xué)院 福建 福州 350000)
人類(lèi)已經(jīng)進(jìn)入了信息時(shí)代很多年了,隨著云時(shí)代的來(lái)臨,大數(shù)據(jù)(Big data)的概念越來(lái)越吸引了很多人的注意力。無(wú)論是云計(jì)算還是大數(shù)據(jù),都是用來(lái)幫助人們解決問(wèn)題的,特別是大數(shù)據(jù)的出現(xiàn),在很多行業(yè)方面,讓人們的預(yù)測(cè)建立在海量的數(shù)據(jù)基礎(chǔ)之上,使預(yù)測(cè)結(jié)果更加準(zhǔn)確和具有科學(xué)性。
中華民族有著五千多年的燦爛文明,自古以來(lái)就是一個(gè)熱愛(ài)閱讀的民族,歷史上也有很多關(guān)于愛(ài)讀書(shū)的故事。常言道:三更燈火五更雞,正是男兒讀書(shū)時(shí),說(shuō)的就是讀書(shū)的事情。據(jù)媒體報(bào)道,2012年中國(guó)人年均讀書(shū)0.7本,與韓國(guó)的人均7本,日本的40本,俄羅斯的55本相比,中國(guó)人的閱讀量少得可憐。
當(dāng)然,因?yàn)楝F(xiàn)在人的閱讀方式多種多樣,統(tǒng)計(jì)結(jié)果不一定是最準(zhǔn)確的。但是中國(guó)人的閱讀量在不斷的變少,這是大家有目共睹的事實(shí)。中國(guó)人的閱讀量在不停的減少,這其中的原因當(dāng)然是多方面的。首先是由于生活的壓力,工作的時(shí)間很長(zhǎng),能夠自由閱讀的時(shí)間當(dāng)然就變少了。其次,現(xiàn)在電子產(chǎn)品越來(lái)越多,電腦,電視,智能手機(jī)等,人們的娛樂(lè)方式更加多元化,娛樂(lè)搶占了人們更多的自由時(shí)間,閱讀時(shí)間當(dāng)然少的可憐。現(xiàn)在大部分不愛(ài)閱讀的第三個(gè)原因,是人們找不到自己感興趣的書(shū)籍,覺(jué)得好書(shū),適合自己的書(shū)越來(lái)越少。以前,大家都是去圖書(shū)館漫無(wú)目的的逛,一本本的找自己適合的書(shū),這個(gè)過(guò)程比較浪費(fèi)時(shí)間,而且收獲不大。如何從技術(shù)角度,讓大家用最快的方式,最短的時(shí)間發(fā)現(xiàn)自己喜歡的書(shū),這是我們這次討論的主要問(wèn)題。
現(xiàn)在有了電子設(shè)備,特別是internet的普及,人們希望達(dá)到這樣的效果,希望在搜索地址欄中輸入地域、年齡、性別、個(gè)人愛(ài)好或者具體需求等一項(xiàng)或者多項(xiàng),我們的網(wǎng)絡(luò)能夠自動(dòng)搜索出適合這個(gè)讀者想看的圖書(shū),以前,這基本是不可想象,遙不可及的事情,但是現(xiàn)在,有大數(shù)據(jù)的技術(shù)作為基礎(chǔ),這就變成一個(gè)可以解決的問(wèn)題。
大數(shù)據(jù)技術(shù)按照解決事物的過(guò)程主要有圖1中各個(gè)部分組成:
圖1 大數(shù)據(jù)技術(shù)結(jié)構(gòu)
現(xiàn)在有專(zhuān)門(mén)的公司通過(guò)統(tǒng)計(jì)圖書(shū)的整體銷(xiāo)量,主要通過(guò)圖書(shū)城的銷(xiāo)售記錄,網(wǎng)上著名圖書(shū)網(wǎng)店的銷(xiāo)售流水等。
現(xiàn)在的數(shù)據(jù)來(lái)源與以前不同,以前的數(shù)據(jù)主要是來(lái)自各個(gè)系統(tǒng)的積累,主要是結(jié)構(gòu)化數(shù)據(jù),現(xiàn)在的數(shù)據(jù)主要來(lái)自網(wǎng)絡(luò),數(shù)據(jù)的的結(jié)構(gòu)也比較復(fù)雜,有結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。應(yīng)該說(shuō)像日志、歷史數(shù)據(jù)、用戶(hù)行為記錄等等這些事大數(shù)據(jù)的主要組成部分,他們幾乎都是半結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)。這種數(shù)據(jù)傳統(tǒng)的存儲(chǔ)技術(shù)無(wú)法解決。因此大數(shù)據(jù)進(jìn)行存儲(chǔ)或者處理必須使用能夠兼容多種數(shù)據(jù)及軟硬件的平臺(tái),而且要適應(yīng)各種應(yīng)用算法或者數(shù)據(jù)的提取轉(zhuǎn)換與加載(ETL)。
現(xiàn)在,人們已經(jīng)可以通過(guò)大數(shù)據(jù)的相關(guān)技術(shù),統(tǒng)計(jì)出已經(jīng)出版的圖書(shū)的銷(xiāo)量,主要銷(xiāo)售對(duì)象和銷(xiāo)售地域,這些都可以作為大數(shù)據(jù)統(tǒng)計(jì)的數(shù)據(jù)基礎(chǔ)。在選擇存儲(chǔ)技術(shù)時(shí),既要考慮數(shù)據(jù)的存儲(chǔ)又要考慮數(shù)據(jù)處理的方式,我們采用目前比較流行的MySql的MyISAM作為存儲(chǔ)的基礎(chǔ),因?yàn)樗麄冊(cè)谔幚泶罅繑?shù)據(jù)時(shí),專(zhuān)門(mén)使用門(mén)設(shè)計(jì)的分布式集群查詢(xún)方式-MyFOX.
如下圖所示,是Mysql的一次查詢(xún)處理數(shù)據(jù)的過(guò)程:
圖2 MyFOX的數(shù)據(jù)查詢(xún)過(guò)程
MyFOX處理數(shù)據(jù)時(shí),將數(shù)據(jù)中使用的比較頻繁的數(shù)據(jù)放置在存取速度比較快的硬盤(pán)上,將基本不會(huì)進(jìn)行訪問(wèn)的數(shù)據(jù)放置在比較老舊的硬盤(pán)上,這樣既提高了數(shù)據(jù)的訪問(wèn)速度,還節(jié)約了成本。將訪問(wèn)比較頻繁的數(shù)據(jù)成為“熱節(jié)點(diǎn)”,將基本不訪問(wèn)的數(shù)據(jù)稱(chēng)為“冷節(jié)點(diǎn)”,訪問(wèn)示意圖如下圖所示:
圖3 MyFOX節(jié)點(diǎn)結(jié)構(gòu)
數(shù)據(jù)在存儲(chǔ)之后,還要經(jīng)過(guò)數(shù)據(jù)的清洗和標(biāo)準(zhǔn)化處理,因?yàn)楝F(xiàn)在的數(shù)據(jù)基本都是一些半結(jié)構(gòu)化,或者非結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)種可能存儲(chǔ)很多的空值、重復(fù)值或者不合理的值,我們經(jīng)過(guò)清洗和標(biāo)準(zhǔn)化處理將這些數(shù)據(jù)轉(zhuǎn)變?yōu)榭梢苑治龊徒5臄?shù)據(jù)。
現(xiàn)在數(shù)據(jù)分析的方式有很多,我們利用目前比較成熟的Hadoop開(kāi)源框架。其主要原因一個(gè)是其能夠處理我們得到的非結(jié)構(gòu)化數(shù)據(jù),另一個(gè)主要原因是他可以運(yùn)行在比較便宜的硬件上,減少了我們資金上的壓力。Hadoop是開(kāi)源的框架,通過(guò)非常多的愛(ài)好者不停的改進(jìn)他的核心技術(shù),他的功能已經(jīng)變得非常強(qiáng)大,完全可以完成我們的任務(wù)。他將大量的數(shù)據(jù)分成多個(gè)組成部分,運(yùn)行在多臺(tái)廉價(jià)的機(jī)器上,這樣每一部分都能同時(shí)對(duì)數(shù)據(jù)進(jìn)行處理和分析。
Hadoop缺省使用文件存儲(chǔ)系統(tǒng)是文件系統(tǒng)HDFS,HDFS在存儲(chǔ)數(shù)據(jù)時(shí)不需要把數(shù)據(jù)組織成關(guān)系型的行和列所以在存儲(chǔ)海量的非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)方面有優(yōu)勢(shì),為保證數(shù)據(jù)的可靠性,Hadoop將數(shù)據(jù)分成多個(gè)部分后,會(huì)將每個(gè)部分復(fù)制很多次,將每一部分加載到文件系統(tǒng),這樣保證了如果某一個(gè)節(jié)點(diǎn)啟動(dòng)失敗后,數(shù)據(jù)仍然有效。
數(shù)據(jù)在加載到集群中后,就做好了分析的準(zhǔn)備,我們是通過(guò)MapReduce的框架來(lái)進(jìn)行分析。我們需要提交提交一個(gè)“適合”的任務(wù)這個(gè)任務(wù)是用Java編寫(xiě)的查詢(xún)語(yǔ)句,提交給給節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)稱(chēng)為作業(yè)跟蹤器。這個(gè)作業(yè)跟蹤器用來(lái)確定我們要完成查詢(xún)需要訪問(wèn)哪些數(shù)據(jù),還有他要提交數(shù)據(jù)在集群的存儲(chǔ)地址。數(shù)據(jù)和數(shù)據(jù)地址確定后,作業(yè)跟蹤器負(fù)責(zé)給相關(guān)節(jié)點(diǎn)提交查詢(xún)結(jié)果。同樣,分析數(shù)據(jù)也是每個(gè)節(jié)點(diǎn)一起、同時(shí)處理。而不是將數(shù)據(jù)集中到一起以后在處理。
數(shù)據(jù)處理完畢后,要存儲(chǔ)結(jié)果,這需要hadoop啟動(dòng)“Reduce”,俗稱(chēng)規(guī)約,將映射階段(map階段)上存儲(chǔ)的每個(gè)節(jié)點(diǎn)上的結(jié)果取出來(lái),加載到集群上的某一個(gè)節(jié)點(diǎn)上去。我們可以通過(guò)訪問(wèn)這個(gè)節(jié)點(diǎn)上的結(jié)果數(shù)據(jù),獲取分析結(jié)果。
接下來(lái)我們就使用分析工具進(jìn)行分析,目前比較流行的分析工具是Pandas,它提供了很多分析函數(shù),節(jié)省了我們編程的時(shí)間和過(guò)程。使用pandas首先是實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接,然后采用分析工具進(jìn)行分析。
連接數(shù)據(jù)庫(kù)代碼如下:
importpandasaspd
from sqlalchemy importcreate_engine
# 創(chuàng)建一個(gè)mysql連接器,用戶(hù)名為user,密碼為1234
## 地址為127.0.0.1,數(shù)據(jù)庫(kù)名稱(chēng)為tushu,編碼為utf-8
engine=create_engine('mysql+pymysql://user:1234@127.0.0.1:3306/tushu?charset=utf8')
print(engine)
最長(zhǎng)常見(jiàn)的分析工具是DataFrame,他是一種數(shù)據(jù)結(jié)構(gòu),特別適合用來(lái)提取數(shù)據(jù)表中的部分?jǐn)?shù)據(jù),而切片是數(shù)據(jù)分析中最經(jīng)常做的事情。
數(shù)據(jù)分析有了結(jié)果,接下來(lái)就是利用數(shù)據(jù)進(jìn)行建模,建模工具主要包括聚類(lèi)、分類(lèi)和遞歸等,我們使用的是聚類(lèi)中的Kmeans方法。
實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ)和分析之后,最后要考慮的就是將分析結(jié)果進(jìn)行應(yīng)用,這里我們采用B/S的結(jié)構(gòu),開(kāi)發(fā)使用大家應(yīng)用較廣的java開(kāi)發(fā)技術(shù),主要實(shí)現(xiàn)前臺(tái)信息的輸入和關(guān)聯(lián)信息的輸出。
所有的技術(shù)都是手段,讓我們這個(gè)有著五千年悠久歷史文化的文明古國(guó),有著良好的閱讀傳統(tǒng)的民族,從內(nèi)心真正愛(ài)上閱讀,提升自我修養(yǎng)才是最終的目的。