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