遲殿委
(煙臺(tái)理工學(xué)院 人工智能學(xué)院,山東 煙臺(tái) 264003)
隨著計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展,各大型網(wǎng)站及平臺(tái)實(shí)時(shí)更新[1],產(chǎn)生了大量數(shù)據(jù)。在當(dāng)今大數(shù)據(jù)背景下[2],各行各業(yè)積累了海量數(shù)據(jù),這些數(shù)據(jù)具有數(shù)據(jù)容量大、類型多、數(shù)據(jù)增長(zhǎng)速度快、價(jià)值密度高的特點(diǎn)。許多學(xué)者也展開(kāi)了關(guān)于大數(shù)據(jù)分析算法、分析模式及分析軟件工具方面的研究[3]。其中,在大數(shù)據(jù)結(jié)構(gòu)模型和數(shù)據(jù)科學(xué)理論體系、大數(shù)據(jù)分析和挖掘基礎(chǔ)理論方面有很大進(jìn)步[4],大數(shù)據(jù)的應(yīng)用領(lǐng)域也從科學(xué)、工程、電信等領(lǐng)域擴(kuò)展到各行各業(yè)[5]。在中國(guó),許多規(guī)模較大的酒店都有自己的酒店管理系統(tǒng),提供了完善的酒店管理和酒店預(yù)訂、評(píng)價(jià)等服務(wù)。部分中小型酒店,由于缺乏投資,依托第三方平臺(tái)提供在線服務(wù),客戶進(jìn)行操作后,第三方平臺(tái)會(huì)生成記錄進(jìn)行保存[6]。酒店長(zhǎng)期積累了大量的在線基本數(shù)據(jù)和用戶評(píng)論數(shù)據(jù)。針對(duì)酒店行業(yè),如何利用大數(shù)據(jù)技術(shù)對(duì)現(xiàn)有的數(shù)據(jù)進(jìn)行處理和分析,幫助酒店從業(yè)者和出行用戶提供直觀的參考決策,是亟須解決的問(wèn)題。一方面,根據(jù)用戶在線評(píng)論數(shù)據(jù),為酒店從業(yè)者提供直觀的決策支持,改善酒店管理,以獲取最大利潤(rùn);另一方面,提供某地區(qū)的酒店基本滿意度情況、酒店分布情況、熱門酒店等可視化圖表,為用戶出行提供可靠參考。
為了保證用戶對(duì)旅游目標(biāo)城市的酒店住宿和用戶滿意度、城市各地區(qū)酒店分布、用戶出游目的等評(píng)論情況有更加直觀、明確的了解,并為用戶提前規(guī)劃好住宿和旅游景點(diǎn)的選擇提供決策支持,文章提出了一種基于城市酒店的大數(shù)據(jù)分析平臺(tái)的設(shè)計(jì)和實(shí)現(xiàn)方案。
文章設(shè)計(jì)的平臺(tái)基于山東省青島市城市酒店基本數(shù)據(jù)和用戶評(píng)論數(shù)據(jù)構(gòu)建大數(shù)據(jù)平臺(tái)數(shù)據(jù)倉(cāng)庫(kù),并進(jìn)行統(tǒng)計(jì)分析,最后以全球廣域網(wǎng)(World Wide Web,WEB)網(wǎng)頁(yè)形式將分析結(jié)果和決策以可視化圖表方式進(jìn)行展現(xiàn)。不僅可以為用戶到某個(gè)城市出游住宿提供參考依據(jù),也為酒店從業(yè)者提供了一定的決策支持,方便其在前期市場(chǎng)調(diào)查過(guò)程中提前了解各區(qū)酒店分布、滿意度、用戶出游目的等,如可以根據(jù)用戶出游類型占比等信息來(lái)為酒店從業(yè)者規(guī)劃酒店類型及相關(guān)配套等。
文章設(shè)計(jì)的大數(shù)據(jù)分析平臺(tái)采用的主要框架為Hadoop 生態(tài)圈組件及Spark 生態(tài)圈[7]組件。Hadoop 框架核心包括Hadoop 分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS) 和MapReduce。其 中HDFS 是 由Nutch[8]的創(chuàng)始人結(jié)合Google 文件系統(tǒng)(Google File System,GFS)提出的NGFS[9],后來(lái)整合了MapReduce。文章介紹了酒店大數(shù)據(jù)分析平臺(tái)的具體設(shè)計(jì)方案和實(shí)施步驟。
一般的大數(shù)據(jù)分析系統(tǒng)的流程是:數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)和清洗、數(shù)據(jù)分析、數(shù)據(jù)可視化。本文根據(jù)數(shù)據(jù)分析的典型流程提出了適合酒店大數(shù)據(jù)平臺(tái)的設(shè)計(jì)方案。首先對(duì)山東地區(qū)青島市的酒店評(píng)論和酒店基本數(shù)據(jù)進(jìn)行大數(shù)據(jù)分析和處理,數(shù)據(jù)存儲(chǔ)到Hadoop 集群,經(jīng)過(guò)數(shù)據(jù)清洗后構(gòu)建Hive 數(shù)據(jù)倉(cāng)庫(kù),并基于Hive 倉(cāng)庫(kù)進(jìn)行數(shù)據(jù)分析,將分析結(jié)果最終導(dǎo)入MySQL,最后構(gòu)建基于JavaEE 的Web 項(xiàng)目進(jìn)行酒店數(shù)據(jù)可視化展示。平臺(tái)的設(shè)計(jì)流程如圖1 所示。
圖1 酒店大數(shù)據(jù)平臺(tái)設(shè)計(jì)流程
對(duì)某個(gè)城市的酒店基本數(shù)據(jù)及用戶評(píng)論數(shù)據(jù)進(jìn)行大數(shù)據(jù)分析和處理,這里以青島市酒店數(shù)據(jù)為例,將平臺(tái)最后分析結(jié)果存儲(chǔ)到MySQL 中。總體設(shè)計(jì)主要從以下幾個(gè)步驟來(lái)實(shí)現(xiàn):
(1)設(shè)計(jì)爬蟲程序爬取的某個(gè)地級(jí)市的酒店基本信息數(shù)據(jù)和用戶評(píng)論數(shù)據(jù),形成數(shù)據(jù)源,文件以csv 格式存儲(chǔ)。
(2) 將數(shù)據(jù)源文件上傳到Hadoop 平臺(tái),采用Hadoop 平臺(tái)的HDFS 來(lái)存儲(chǔ)數(shù)據(jù),上傳技術(shù)采用Python 的HDFS 模塊實(shí)現(xiàn)。
(3)基于上傳的數(shù)據(jù)采用Spark 程序進(jìn)行清洗,使其符合大數(shù)據(jù)分析平臺(tái)對(duì)數(shù)據(jù)的基本要求。主要進(jìn)行以下工作:酒店基本數(shù)據(jù)集中的酒店星級(jí)類型這一列數(shù)據(jù)叫法不一致,比如有的酒店叫四星級(jí),有的則叫高檔型,這里統(tǒng)一處理,將所有的“國(guó)家旅游局評(píng)定為四星級(jí)”替換為“高檔型”,將“國(guó)家旅游局評(píng)定為三星級(jí)”替換為“舒適型”,將“國(guó)家旅游局評(píng)定為二星級(jí)”替換為“經(jīng)濟(jì)型”,將“國(guó)家旅游局評(píng)定為五星級(jí)”替換為“豪華型”。由于大數(shù)據(jù)服務(wù)平臺(tái)這個(gè)子模塊并不對(duì)用戶具體評(píng)論內(nèi)容進(jìn)行情感分析,情感分析交給情感分析子系統(tǒng)處理,所以這里將評(píng)論內(nèi)容數(shù)據(jù)列去掉。刪除所有空行。從酒店地址中提取區(qū)縣名稱替換掉地址那一列內(nèi)容,為區(qū)縣酒店分布統(tǒng)計(jì)提供標(biāo)準(zhǔn)數(shù)據(jù)。清洗后的數(shù)據(jù)分別存放到hdfs 的兩個(gè)不同目錄,比如名稱為hotelbasic 的目錄用于存放基本數(shù)據(jù),名稱為hoteldata 用于存放評(píng)論數(shù)據(jù)。
(4)數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建與分析。首先基于HDFS 中的兩個(gè)數(shù)據(jù)集的存儲(chǔ)路徑創(chuàng)建Hive 外部表,分別是用戶評(píng)論數(shù)據(jù)表和酒店基本信息表。基于兩張Hive 外部表,根據(jù)用戶關(guān)心的酒店及評(píng)論信息的維度,進(jìn)行數(shù)據(jù)分析處理,分為5 個(gè)關(guān)注的角度,并為每一個(gè)角度創(chuàng)建Hive 內(nèi)部表,具體如下:用戶印象統(tǒng)計(jì),也是用戶對(duì)該地區(qū)總體滿意度情況。用戶住過(guò)酒店發(fā)表評(píng)論同時(shí)也可以打分,以下是根據(jù)用戶對(duì)該地區(qū)或城市的酒店總體評(píng)分情況來(lái)統(tǒng)計(jì)用戶總體印象。評(píng)分4.5~5 分為優(yōu)良,3.5~4.5 為良好,3.5 以下為差,統(tǒng)計(jì)酒店用戶評(píng)分等級(jí)比例。統(tǒng)計(jì)在線評(píng)論數(shù)最多的十大酒店。一般情況下一家酒店的評(píng)論數(shù)量能代表這家酒店的人氣,本文統(tǒng)計(jì)的是酒店名稱和評(píng)論數(shù)目。不同旅游類型占比統(tǒng)計(jì)。根據(jù)用戶評(píng)論外部表和用戶評(píng)論數(shù)據(jù)表,進(jìn)行不同旅游類型的統(tǒng)計(jì),根據(jù)旅游類型結(jié)合用戶滿意度情況,為用戶出行旅游提供參考,了解該地區(qū)更適合哪種類型的旅游。酒店星級(jí)分布情況統(tǒng)計(jì),設(shè)計(jì)酒店星級(jí)和數(shù)量?jī)蓚€(gè)屬性,顯示不同星級(jí)的酒店數(shù)量占比,為不同層次的用戶提供星級(jí)酒店的數(shù)量分布。城市不同區(qū)的酒店數(shù)量分布情況,以熱力圖方式呈現(xiàn),同時(shí)需要顯示每個(gè)地區(qū)酒店數(shù)量和平均評(píng)論得分情況。將產(chǎn)生的用戶評(píng)論外部表的Hive 內(nèi)部表數(shù)據(jù),利用Sqoop 導(dǎo)出到MySQL 數(shù)據(jù)庫(kù)。
(5)數(shù)據(jù)可視化部分。基于Mysql 數(shù)據(jù)庫(kù)的分析結(jié)果,以圖表的方式呈現(xiàn)到Web 網(wǎng)頁(yè)上。利用SpringBoot+mybatis+MySQL 搭建項(xiàng)目,開(kāi)發(fā)工具用IDEA,圖表采用ECHARTS 來(lái)進(jìn)行頁(yè)面圖表渲染支持。為了提高頁(yè)面加載速度和用戶體驗(yàn),采用AJAX 異步加載的方式來(lái)進(jìn)行。其中基于酒店基本數(shù)據(jù)的統(tǒng)計(jì)分析部分包括:用戶旅游類型分析、各地區(qū)酒店數(shù)量統(tǒng)計(jì)、酒店星級(jí)情況統(tǒng)計(jì)。基于酒店用戶評(píng)論數(shù)據(jù)的統(tǒng)計(jì)分析部分包括:網(wǎng)絡(luò)人氣酒店和用戶滿意度統(tǒng)計(jì)。
由于爬蟲爬取數(shù)據(jù)時(shí)需要遍歷采集的酒店鏈接,然后自動(dòng)迭代下載信息,這就需要分析并設(shè)置好頁(yè)面URL 的格式,這樣才能讓爬蟲自動(dòng)的遍歷地址列表進(jìn)行下載。
需要對(duì)酒店評(píng)論的頁(yè)數(shù)進(jìn)行拼接,通過(guò)酒店 ID、評(píng)論頁(yè)碼就可以拼接完成所有酒店的評(píng)論 JavaScript 對(duì)象簡(jiǎn)譜(JavaScript Object Notation,JSON) 地址,在采集的時(shí)候只需要按照拼接的規(guī)律進(jìn)行迭代,就可以不間斷地采集到酒店的評(píng)論數(shù)據(jù)。這里針對(duì)攜程的酒店數(shù)據(jù)進(jìn)行爬取,針對(duì)攜程網(wǎng)站的結(jié)構(gòu)和數(shù)據(jù)傳輸?shù)奶攸c(diǎn)進(jìn)行了針對(duì)性的實(shí)現(xiàn),具體的爬蟲開(kāi)發(fā)主要由以下幾個(gè)部分組成。
(1)爬蟲集合模塊:分析從下載器模塊采集到的 JSON 數(shù)據(jù),然后提取出對(duì)應(yīng)的數(shù)據(jù)以及相關(guān)的鏈接資源。
(2)數(shù)據(jù)流水線模塊:主要是對(duì)目標(biāo)站點(diǎn)的數(shù)據(jù)格式的設(shè)置,比如目標(biāo)網(wǎng)站的地址,用戶評(píng)論等。
(3)數(shù)據(jù)存儲(chǔ)模塊:通過(guò)數(shù)據(jù)清理、數(shù)據(jù)持久化等操作來(lái)處理由爬蟲模塊提取和發(fā)送過(guò)來(lái)的 Item 列,然后將數(shù)據(jù)列存儲(chǔ)數(shù)據(jù)到指定的位置。
(4)IP 代理模塊:此模塊功能就是從專業(yè)提供免費(fèi) IP 代理的網(wǎng)站上采集 IP 到本地,為爬蟲提供可用的 IP 代理,以防止爬蟲被網(wǎng)站封鎖。
搭建Hadoop 平臺(tái)集群,并安裝Hive,MySQL 等相關(guān)軟件。將爬取到的山東省青島市酒店數(shù)據(jù)集以及用戶評(píng)論數(shù)據(jù)集對(duì)應(yīng)的逗號(hào)分隔值(Comma-Separated Values,CSV) 文件上傳到Hdfs 存儲(chǔ)。
數(shù)據(jù)預(yù)處理部分所做的工作參照1.2 小節(jié)的描述。數(shù)據(jù)清洗采用Spark 框架來(lái)實(shí)現(xiàn)。數(shù)據(jù)清洗的代碼用Scala 編程語(yǔ)言實(shí)現(xiàn),
部分核心代碼如下:
首先根據(jù)酒店基本數(shù)據(jù)和酒店評(píng)論數(shù)據(jù)創(chuàng)建外部表,構(gòu)建酒店數(shù)據(jù)倉(cāng)庫(kù),主要步驟如下:
(1)基于上傳的酒店用戶評(píng)論數(shù)據(jù)“hoteldata.csv”創(chuàng)建外部表,表名為“hotel_data”。
(2)基于上傳的酒店基本數(shù)據(jù)“hotelbasic.csv”創(chuàng)建hive 表,表名為“hotel_basic”。
(3)根據(jù)Hive 倉(cāng)庫(kù)數(shù)據(jù),進(jìn)行城市酒店數(shù)據(jù)評(píng)分、用戶印象、各區(qū)縣酒店數(shù)量和評(píng)分、網(wǎng)絡(luò)人氣、酒店星級(jí)、來(lái)此地游客的旅游目的類型統(tǒng)計(jì)等數(shù)據(jù)分析,每一項(xiàng)統(tǒng)計(jì)都構(gòu)建Hive 內(nèi)部表,并最終導(dǎo)入MySQL 表。
這里以酒店星級(jí)分布情況統(tǒng)計(jì)表為例,如表名為“star_stat”,統(tǒng)計(jì)城市的酒店星級(jí)類型及對(duì)應(yīng)的酒店數(shù)量,所以設(shè)計(jì)的Hive 內(nèi)部表腳本如下:
這里的stardetail 表示酒店星級(jí),num 表示數(shù)量。
設(shè)計(jì)MySQL 表腳本如下:
create table star_stat(stardetail varchar(33),nums int)
然后使用Sqoop 將Hive 內(nèi)部表數(shù)據(jù)導(dǎo)入到MySQL。
根據(jù)酒店基本數(shù)據(jù)及用戶評(píng)論數(shù)據(jù)的分析結(jié)果,為用戶提供可視化展現(xiàn)。基于Mysql 數(shù)據(jù)庫(kù)分析結(jié)果作為數(shù)據(jù)庫(kù),運(yùn)用Ajax 技術(shù)異步加載并在網(wǎng)頁(yè)上展示。可視化項(xiàng)目采用流行的JavaEE 框架SpringBoot 來(lái)快速搭建,圖表呈現(xiàn)部分使用Echarts 實(shí)現(xiàn)。
這里以青島市各地區(qū)酒店數(shù)量統(tǒng)計(jì)為例,前端異步請(qǐng)求數(shù)據(jù)采用Ajax 技術(shù),后臺(tái)查詢青島各區(qū)酒店數(shù)量并以Json 格式返回。通過(guò)Echarts 在頁(yè)面加載返回的Json 數(shù)據(jù)。其中基于酒店基本數(shù)據(jù)的統(tǒng)計(jì)分析部分包括:用戶旅游類型分析、各地區(qū)酒店數(shù)量統(tǒng)計(jì)、酒店星級(jí)情況統(tǒng)計(jì),其中旅游類型統(tǒng)計(jì)如圖2 所示。
圖2 用戶旅游類型統(tǒng)計(jì)
基于酒店用戶評(píng)論數(shù)據(jù)的統(tǒng)計(jì)分析部分包括:網(wǎng)絡(luò)人氣酒店和用戶滿意度統(tǒng)計(jì)。其中酒店星級(jí)分布統(tǒng)計(jì)可視化效果如圖3 所示。
圖3 酒店星級(jí)占比統(tǒng)計(jì)
文章提出了基于Hadoop 技術(shù)的旅游酒店大數(shù)據(jù)分析服務(wù)平臺(tái)的設(shè)計(jì)和實(shí)現(xiàn)方案,以青島市酒店數(shù)據(jù)為例,具體介紹了數(shù)據(jù)爬蟲模塊、數(shù)據(jù)上傳模塊、數(shù)據(jù)清洗模塊、數(shù)據(jù)分析模塊及數(shù)據(jù)可視化展示模塊的設(shè)計(jì)和實(shí)現(xiàn)。在大數(shù)據(jù)時(shí)代,采用海量數(shù)據(jù)存儲(chǔ)框架和并行處理框架稱為必然,所以文章在數(shù)據(jù)分析模塊采用了Hive 數(shù)據(jù)倉(cāng)庫(kù)技術(shù),其底層是使用Hadoop 的Mapreduce 框架進(jìn)行計(jì)算。存儲(chǔ)框架使用Hadoop 的HDFS 來(lái)實(shí)現(xiàn)分布式存儲(chǔ)。數(shù)據(jù)清洗模塊工作量較大,因此采用Spark 框架來(lái)進(jìn)行,Spark 基于內(nèi)存進(jìn)行數(shù)據(jù)處理的特點(diǎn)使得它比MapReduce 處理速度快很多??梢暬K基于echarts+ajax 實(shí)現(xiàn)圖表的異步展示,優(yōu)化了用戶體驗(yàn)。