劉磊,蔡欣樺,許銳強(qiáng)
(廣東開放大學(xué),廣州510000;廣東理工職業(yè)學(xué)院,廣州510000)
隨著云計(jì)算、大數(shù)據(jù)、人工智能等技術(shù)的飛速發(fā)展和應(yīng)用,各行各業(yè)產(chǎn)生的數(shù)據(jù)規(guī)模也呈爆炸性增長(zhǎng),通過(guò)使用大數(shù)據(jù)平臺(tái)對(duì)海量的行業(yè)數(shù)據(jù)信息進(jìn)行分析挖據(jù),提取出有價(jià)值的信息,對(duì)市場(chǎng)決策起到輔助作用。各行業(yè)通過(guò)各種不同方式產(chǎn)生的大量數(shù)據(jù),堆積起來(lái)達(dá)到一定規(guī)模,可以構(gòu)成大數(shù)據(jù),大數(shù)據(jù)分析就是利用特定平臺(tái)對(duì)規(guī)模巨大的數(shù)據(jù)進(jìn)行分析挖掘,找到相關(guān)因素之間的關(guān)系。例如大數(shù)據(jù)分析可以讓超市使用通過(guò)收集到的大數(shù)據(jù)來(lái)研究消費(fèi)者的習(xí)慣,根據(jù)分析結(jié)果更合理地?cái)[放商品的位置以增加銷售量,從而為公司帶來(lái)更高的利潤(rùn)。本文分析的是汽車銷售數(shù)據(jù),汽車銷售是消費(fèi)者支出的重要組成成分,也是了解一個(gè)國(guó)家經(jīng)濟(jì)循環(huán)強(qiáng)弱情況的第一手資料,早于其他個(gè)人消費(fèi)數(shù)據(jù)的公布,汽車銷售為隨后的零售額和個(gè)人消費(fèi)支出提供了很好的預(yù)示作用,汽車消費(fèi)額占零售額的25%和整個(gè)銷售總額的8%。本文使用華為大數(shù)據(jù)平臺(tái),從三個(gè)角度對(duì)汽車銷售數(shù)據(jù)進(jìn)行分析,并對(duì)分析結(jié)果進(jìn)行可視化展示,非常直觀地展現(xiàn)數(shù)據(jù)價(jià)值。
華為大數(shù)據(jù)平臺(tái)FusionInsight HD 是華為企業(yè)級(jí)大數(shù)據(jù)存儲(chǔ)、查詢、分析的統(tǒng)一平臺(tái),通過(guò)分布式部署,對(duì)外提供大容量的數(shù)據(jù)存儲(chǔ)、查詢和分析能力,能夠快速構(gòu)建海量數(shù)據(jù)信息處理系統(tǒng),對(duì)海量信息數(shù)據(jù)實(shí)時(shí)與非實(shí)時(shí)的分析挖掘,F(xiàn)usionInsight HD 兼容開源Hadoop 框架及眾多組件,是完全開放的大數(shù)據(jù)平臺(tái),可運(yùn)行在開放的x86 架構(gòu)服務(wù)器上。FusionInsight HD 系統(tǒng)的邏輯架構(gòu)如圖1 所示。
圖1 FusionInsight HD系統(tǒng)邏輯架構(gòu)圖
FusionInsight HD 對(duì)開源組件進(jìn)行封裝和增強(qiáng),包含了管理系統(tǒng)Manager 和眾多組件,常用功能如下:
(1)Manager:運(yùn)維管理系統(tǒng),為FusionInsight HD提供高可靠、安全、容錯(cuò)、易用的集群管理能力,支持大規(guī)模集群的安裝部署、監(jiān)控、告警、用戶管理、權(quán)限管理、審計(jì)、服務(wù)管理、健康檢查、問(wèn)題定位、升級(jí)和補(bǔ)丁等;
(2)Loader:實(shí)現(xiàn)FusionInsight HD 與關(guān)系型數(shù)據(jù)庫(kù)、文件系統(tǒng)之間交換數(shù)據(jù)和文件的加載工具;同時(shí)提供REST API 接口,供第三方調(diào)度平臺(tái)調(diào)用。Loader支持關(guān)系型數(shù)據(jù)庫(kù)和HDFS、HBase、Hive 表等之間的互相導(dǎo)入導(dǎo)出。本文采用Loader 對(duì)加載和導(dǎo)出數(shù)據(jù)。
(3)Hive:建立在Hadoop 基礎(chǔ)上的開源的數(shù)據(jù)倉(cāng)庫(kù),提供類似SQL 的Hive Query Language 語(yǔ)言(HQL)操作結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)服務(wù)和基本的數(shù)據(jù)分析服務(wù)。本文采用HQL 對(duì)數(shù)據(jù)進(jìn)行分析。
(4)MapReduce:提供快速并行處理大量數(shù)據(jù)的能力,是一種分布式數(shù)據(jù)處理模式和執(zhí)行環(huán)境。本文采用Python 編寫MapReduce 程序?qū)?shù)據(jù)進(jìn)行清洗。
(5)HDFS:Hadoop 分布式文件系統(tǒng)(Hadoop Distributed File System),提供高吞吐量的數(shù)據(jù)訪問(wèn),適合大規(guī)模數(shù)據(jù)集方面的應(yīng)用。
(6)HBase:提供海量數(shù)據(jù)存儲(chǔ)功能,是一種構(gòu)建在HDFS 之上的分布式、面向列的存儲(chǔ)系統(tǒng)。
基于大數(shù)據(jù)平臺(tái)對(duì)海量數(shù)據(jù)分析展示一般分步進(jìn)行,本文對(duì)汽車銷售數(shù)據(jù)分析設(shè)計(jì)的方案如下:
(1)獲取源數(shù)據(jù):本文汽車銷售數(shù)據(jù)來(lái)源于互聯(lián)網(wǎng),可以通過(guò)大數(shù)據(jù)交易、API 接口、網(wǎng)絡(luò)爬蟲、統(tǒng)計(jì)圖表等方式獲取源數(shù)據(jù)。
(2)分析源數(shù)據(jù):源數(shù)據(jù)拿到后,根據(jù)定下的分析角度,分析源數(shù)據(jù)字段是否全部滿足分析角度的需求,是否有臟數(shù)據(jù),是否需要數(shù)據(jù)清洗,本文從三個(gè)角度分析:行業(yè)市場(chǎng)分析、用戶市場(chǎng)分析、不同品牌市場(chǎng)分析。
(3)加載源數(shù)據(jù):使用ETL 工具將源數(shù)據(jù)導(dǎo)入HDFS,這里采用Loader 組件將數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫(kù)導(dǎo)入Hive 表。
(4)數(shù)據(jù)預(yù)處理:源數(shù)據(jù)通常包含臟數(shù)據(jù),不能直接用來(lái)分析,需要根據(jù)需求進(jìn)行預(yù)處理,包括數(shù)據(jù)清洗,缺省值填充,數(shù)據(jù)選擇,數(shù)據(jù)變換,數(shù)據(jù)集成等。
(5)HQL 分析:對(duì)預(yù)處理后的數(shù)據(jù),使用HQL 語(yǔ)言進(jìn)行分析,HQL 可以查詢和分析存儲(chǔ)在Hadoop 中的大規(guī)模數(shù)據(jù),使用HQL 可以快速方便地進(jìn)行MapReduce 統(tǒng)計(jì)。
(6)Python 分析:使用Python 編寫MapReduce 程序進(jìn)行數(shù)據(jù)清洗和可視化呈現(xiàn)分析結(jié)果。
(7)導(dǎo)出分析結(jié)果:使用Loader 工具將分析結(jié)果從HDFS 導(dǎo)出到關(guān)系型數(shù)據(jù)庫(kù),為Web 系統(tǒng)應(yīng)用提供大數(shù)據(jù)分析結(jié)果。
圖2 分析方案示意圖
本文收集到的汽車銷售數(shù)據(jù),包含銷售信息和具體參數(shù)信息,數(shù)據(jù)包括汽車生產(chǎn)地點(diǎn)、生產(chǎn)時(shí)間、車輛型號(hào)、品牌、車輛類型、排量、油耗、功率、發(fā)動(dòng)機(jī)型號(hào)、燃料種類、車外廓長(zhǎng)寬高、軸距、前后車輪、輪胎規(guī)格、輪胎數(shù)、載客數(shù)、購(gòu)買人相關(guān)信息等,共70 萬(wàn)條記錄,樣例數(shù)據(jù)如圖3。
圖3 源數(shù)據(jù)樣例
這些源數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)MySQL 中,定義表名為te_bd_sp,通過(guò)分析源數(shù)據(jù),使用Loader 工具加載轉(zhuǎn)換時(shí),做出處理:①第一行為字段,數(shù)據(jù)無(wú)效,去除第一行;②具體參數(shù)對(duì)于后面的分析角度無(wú)用,去除一些具體參數(shù)字段。處理后的源數(shù)據(jù)格式,如表1 所示。
高質(zhì)量的大數(shù)據(jù)分析要基于高質(zhì)量的數(shù)據(jù),但是源數(shù)據(jù)通常存在部分臟數(shù)據(jù),例如數(shù)據(jù)不完整、數(shù)據(jù)存在錯(cuò)誤或異常、數(shù)據(jù)內(nèi)容不一致等。這時(shí)要根據(jù)分析需求預(yù)先進(jìn)行數(shù)據(jù)清洗。數(shù)據(jù)清洗是清除錯(cuò)誤和不一致數(shù)據(jù)的過(guò)程,在數(shù)據(jù)挖掘過(guò)程中,數(shù)據(jù)清洗是第一步驟,即對(duì)數(shù)據(jù)進(jìn)行預(yù)處理的過(guò)程,數(shù)據(jù)是不完整、有噪聲和不一致的,數(shù)據(jù)清洗的任務(wù)是過(guò)濾或者修改那些不符合要求的數(shù)據(jù),數(shù)據(jù)清洗的目的是為分析提供準(zhǔn)確而有效地?cái)?shù)據(jù),提高分析效率。
表1 處理后的源數(shù)據(jù)格式
通過(guò)分析汽車銷售數(shù)據(jù),發(fā)現(xiàn)存在內(nèi)容缺失的數(shù)據(jù)行,部分省份信息缺失的數(shù)據(jù)行內(nèi)容殘缺,影響后面的數(shù)據(jù)分析,因此對(duì)省份缺失的數(shù)據(jù)也進(jìn)行過(guò)濾。編寫MapReduce 程序進(jìn)行數(shù)據(jù)清洗,清洗過(guò)程由Mapper負(fù)責(zé),Reducer 則負(fù)責(zé)把清洗后的數(shù)據(jù)輸出,使用Python 編寫代碼。
Mapper 部分代碼如下:
使用以下語(yǔ)句執(zhí)行MapReduce 程序:
yarn jar godlike/Yarn/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar-file data_analysis_map_version_3.py,data_analysis_reduce_version_3.py -mapper data_analysis_map_version_3.py-reducer data_analysis_reduce_version_3.py-input/tenant/user04/data/*-output/tenant/user04/opt
Hive 是基于Hadoop 的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,提供了一種存儲(chǔ)、查詢和分析Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive 定義了簡(jiǎn)單的類SQL 查詢語(yǔ)言,稱為HQL,它允許熟悉SQL 的用戶查詢數(shù)據(jù),可以將HQL 語(yǔ)句轉(zhuǎn)換為MapReduce 任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過(guò)類SQL 語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce 統(tǒng)計(jì),不必開發(fā)專門的MapReduce 應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。同時(shí),這個(gè)語(yǔ)言也允許熟悉MapReduce的開發(fā)者開發(fā)自定義的mapper 和reducer 來(lái)處理內(nèi)建的程序無(wú)法完成的復(fù)雜分析工作。
Hive 中所有的數(shù)據(jù)都存儲(chǔ)在HDFS 中,支持textfile、Sequencefile、Rcfile 等數(shù)據(jù)格式。使用Hive 創(chuàng)建表的時(shí)候,需要設(shè)定數(shù)據(jù)中的列分隔符和行分隔符,這樣才能將數(shù)據(jù)正確導(dǎo)入Hive 表。
車輛銷售數(shù)據(jù)創(chuàng)建Hive 表語(yǔ)句如下:
create table table_name(sp_id int,province string,month int,dc string,qx string,year int,car_type string,manufacturer string,pinpai string,leixing string,suoyouquan string,xingzhi string,nums int,fdj_type string,pailiang string gonglv int,ry_type string,fdjqy string,car_name string,1age int,sex string)row format delimited fields terminated by‘,’lines terminated by‘ ’;
使用load 將清洗完的數(shù)據(jù)導(dǎo)入Hive 表,語(yǔ)句為:
load data inpath‘/tenant/user04/opt5/part-00000’into table te_bd_sp;
下面使用HQL 從三個(gè)角度分析車輛銷售數(shù)據(jù):
(1)汽車行業(yè)市場(chǎng)分析
例如統(tǒng)計(jì)山西省2013 年每個(gè)月的汽車銷售數(shù)量的比例,需要的字段為省、年、月、銷量,先統(tǒng)計(jì)出總銷量,再統(tǒng)計(jì)出2013 年每個(gè)月的銷量,兩表進(jìn)行join 操作,計(jì)算出比例,分析語(yǔ)句如下:
select t2.m as`月`,CONCAT(ROUND(t2.n/t1.r1*100,2),'','%')as`比例`from(select sum(nums)r1 from te_bd_sp where province='山西省'and year='2013')t1 join(select month m,sum(nums)n from te_bd_sp where province='山西省'and year='2013'group by month)t2 on 1=1;
運(yùn)行結(jié)果如圖4 所示。
(2)用戶市場(chǎng)分析:
例如統(tǒng)計(jì)買車的人的性別比例,需要的字段為性別、主鍵,先統(tǒng)計(jì)出所有的銷售數(shù)量,再按性別分組統(tǒng)計(jì)出銷售數(shù)量,兩表進(jìn)行join 操作,計(jì)算出比例,分析語(yǔ)句如下:
select(case when t2.m='男性 'then'男性'when t2.m='女性 'then'女性'else'無(wú)性別'end)as`性別`,CONCAT(ROUND(t2.n/t1.r1*100,2),'','%')as`比例`from(select count(sp_id)r1 from te_bd_sp) t1 join (select sex m,count(sp_id) n from te_bd_sp group by sex)t2 on 1=1;
圖4 汽車行業(yè)市場(chǎng)分析
圖5 用戶市場(chǎng)分析
(3)不同品牌市場(chǎng)分析:
例如統(tǒng)計(jì)五菱在2013 年每個(gè)月的銷售量和增長(zhǎng)率,需要的字段為品牌、年、月、銷量,增長(zhǎng)率計(jì)算公式為:(本月銷量-上月銷量)/上月銷量*100%,先統(tǒng)計(jì)出每個(gè)月的銷量,再使用Hive 窗口函數(shù)LAG(col,n,DEFAULT)獲取上月銷量,計(jì)算出增長(zhǎng)率,分析語(yǔ)句如下:
select month as`月`,sum(nums)as`銷售量`,CONCAT(ROUND((sum(nums)-lag(sum(nums),1,0)over(order by month))/(lag(sum(nums),1,0)over(order by month))*100,2),'','%')as`增長(zhǎng)率`from te_bd_sp where pinpai='五菱'and year='2013'group by month;
運(yùn)行結(jié)果如圖6 所示。
將大數(shù)據(jù)分析結(jié)果導(dǎo)入關(guān)系型數(shù)據(jù)庫(kù),使用Python 代碼編寫程序,從數(shù)據(jù)庫(kù)讀取數(shù)據(jù),呈現(xiàn)可視化結(jié)果。
圖6 不同品牌市場(chǎng)分析
以統(tǒng)計(jì)山西省2013 年每個(gè)月的汽車銷售數(shù)量的比例結(jié)果為例,使用Python 編寫關(guān)鍵代碼如下:
(1)分析每個(gè)月的汽車銷售比例,按每月比例組成的餅圖如圖7 所示。
圖7 餅圖
(2)分析買車人的性別比例,有部分沒(méi)填性別,顯示時(shí)設(shè)置為無(wú)性別,所形成柱狀圖如圖8 所示:
圖8 柱狀圖
(3)分析五菱在2013 年每月增長(zhǎng)趨勢(shì),形成折線圖如圖9 所示。
圖9 折線圖
傳統(tǒng)行業(yè)產(chǎn)生的海量數(shù)據(jù)正呈指數(shù)性增長(zhǎng),如何從這么大規(guī)模的數(shù)據(jù)量中分析挖掘出有價(jià)值的信息,這給技術(shù)帶來(lái)了挑戰(zhàn)。隨著大數(shù)據(jù)平臺(tái)的日漸成熟和普及,能夠輕松實(shí)現(xiàn)TB 級(jí)數(shù)據(jù)的存儲(chǔ)、PB 級(jí)數(shù)據(jù)的查詢分析,為海量數(shù)據(jù)的分析預(yù)測(cè)提供了技術(shù)手段。本文基于業(yè)界流行的華為大數(shù)據(jù)平臺(tái),對(duì)車輛銷售數(shù)據(jù)進(jìn)行了三個(gè)角度的分析,先進(jìn)行數(shù)據(jù)清洗,再使用HQL語(yǔ)言做統(tǒng)計(jì)分析,最后使用Python 可視化分析結(jié)果,為基于大數(shù)據(jù)平臺(tái)的分析應(yīng)用提供了參考。