劉磊,黃嘉浩,許銳強,蔡欣樺
(廣東開放大學,廣東理工職業(yè)學院,廣州 510000)
電商網站是當今人們使用最多的Web應用,大量用戶每日訪問網頁瀏覽商品、搜索喜歡的商品、查看商品詳情、收藏添加購物車、登錄購買商品等操作,在電商網站留下了海量的使用數據,堆積起來達到一定規(guī)模,就構成大數據,大數據分析就是利用特定平臺對規(guī)模巨大的數據進行分析挖掘,找到相關因素之間的關系。本文以某電商網站的Web日志、用戶維表、商品維表、銷售事實表為源數據,通過源數據分析、數據清洗、HQL分析、數據可視化等步驟,從用戶瀏覽量、銷售量、點擊量、商品好評等角度,分析每個用戶對不同類型商品的喜好程度,從而為電商網站在相應頁面推薦合適商品給不同用戶,優(yōu)化網站建設,提升用戶體驗并促進用戶消費。
華為大數據平臺FusionInsight HD是華為企業(yè)級大數據存儲、查詢、分析的統一平臺,通過分布式部署,對外提供大容量的數據存儲、查詢和分析能力,能夠快速構建海量數據信息處理系統,對海量信息數據實時與非實時的分析挖掘,FusionInsight HD兼容開源Ha?doop框架及眾多組件,是完全開放的大數據平臺,可運行在開放的x86架構服務器上[1]。FusionInsight HD對開源組件進行封裝和增強,包含了管理系統Manager和眾多組件,常用功能包括:①Manager,運維管理系統;②Loader,實現FusionInsight HD與關系型數據庫、文件系統之間交換數據和文件的加載工具,Loader支持關系型數據庫和HDFS、HBase、Hive表等之間的互相導入導出;③Hive:建立在Hadoop基礎上的開源的數據倉庫,提供類似SQL的Hive Query Language語言(HQL)操作結構化數據存儲服務和基本的數據分析服務。④MapReduce:提供快速并行處理大量數據的能力,是一種分布式數據處理模式和執(zhí)行環(huán)境[2]。本文采用Java編寫MapReduce程序對數據進行清洗。
基于大數據平臺對海量數據分析展示一般分步進行,本文對電商網站數據分析設計的方案如圖1所示。步驟如下:
(1)獲取源數據:本文電商網站數據來源于互聯網,可以通過大數據交易、API接口、網絡爬蟲、統計圖表等方式獲取源數據。
(2)分析源數據:源數據拿到后,根據定下的分析角度,分析源數據字段是否全部滿足分析角度的需求,是否有臟數據,是否需要數據清洗,本文從三個角度分析:分析每個商品的好評度、分析用戶粘度、分析用戶最喜歡購買的商品。
(3)加載源數據:使用ETL工具將源數據導入HDFS,這里采用Loader組件將數據從關系型數據庫導入Hive表。
(4)數據預處理:源數據通常包含臟數據,不能直接用來分析,需要根據需求進行預處理,包括數據清洗,缺省值填充,數據選擇,數據變換,數據集成等。
(5)HQL分析:對預處理后的數據,使用HQL語言進行分析,HQL可以查詢和分析存儲在Hadoop中的大規(guī)模數據,使用HQL可以快速方便的進行MapReduce統計。
(6)Java分析:使用Java編寫MapReduce程序進行數據清洗和可視化呈現分析結果。
(7)導出分析結果:使用Loader工具將分析結果從HDFS導出到關系型數據庫,為Web系統應用提供大數據分析結果。

圖1 分析方案示意圖
本文收集到的電商網站數據,包含Web日志數據、用戶維表、商品維表和銷售事實表,Web日志數據存儲在HDFS文件系統,數據量為1949878條,記錄用戶瀏覽網站的痕跡,源數據包含了一些錯誤字段和臟數據,需要先進行數據清洗,再導入Hive進行分析。用戶維表、商品維表和銷售事實表都存儲在MySQL關系型數據庫中,用戶維表記錄用戶的基本信息,數據量為100000條,定義表名為user;商品維表記錄商品的標簽和價格,數據量為54條,定義表名為shop;銷售事實表存儲銷售記錄,數據量為1000001條,定義表名為sale。這三表存在主外鍵關系,銷售事實表里有兩個外鍵,用戶名字段來自用戶維表,商品ID字段來自商品維表。這三張表不需要數據清洗,直接使用Loader工具導入Hive數據倉庫。
高質量的大數據分析要基于高質量的數據,但是源數據通常存在部分臟數據,例如數據不完整、數據存在錯誤或異常、數據內容不一致等。這時要根據分析需求預先進行數據清洗。
電商網站Web日志源數據以文件形式存儲在HDFS文件系統中,使用命令查看,通過分析電商網站Web日志源數據,數據格式是每行為一條記錄,行之間通過換行符分開,每行數據用空格符分隔成9個不同字段數據,除這些正確數據格式外,發(fā)現源數據還存在字段錯誤、冗余數據,影響后面的數據分析,因此對臟數據進行過濾。編寫MapReduce程序進行數據清洗,清洗過程由Mapper負責,Reducer則負責把清洗后的數據輸出,使用Java編寫代碼。Mapper代碼獲取輸入流,按規(guī)則進行清洗,首先對每一行按空格拆分成數組,判斷若數組長度為9則符合要求,繼續(xù)清洗,使用Parselogs類將每行數據解析成9個字段,分別對應用戶IP地址、用戶名、時間、商品一級標簽、商品二級標簽、商品ID、用戶訪問來源url地址、響應碼、用戶訪問頁面所用的工具,將正確的數據交給Reducer[3-5]。
清洗完之后Web日志數據相對干凈和有規(guī)律,保留的結構如表1所示。

表1 清洗后的Web日志數據(Web)結構
Hive是基于Hadoop的數據倉庫基礎構架,可以將結構化的數據文件映射為一張數據庫表,提供了一種存儲、查詢和分析Hadoop中的大規(guī)模數據的機制。Hive定義了簡單的類SQL查詢語言,稱為HQL,它允許熟悉SQL的用戶查詢數據,可以將HQL語句轉換為MapReduce任務進行運行[6]。
Hive中所有的數據都存儲在HDFS中,支持text?file、Sequencefile、Rcfile等數據格式。使用Hive創(chuàng)建表的時候,需要設定數據中的列分隔符和行分隔符,這樣才能將數據正確導入Hive表。
下面使用HQL從三個角度分析電商網站數據:
(1)分析每個商品的好評度
計算每個商品的好評度,對商品做出合理評價,給予用戶更好質量的推薦,提高用戶體驗度。設定好評度計算規(guī)則為:好評度=(5分次數+4分次數*0.8+3分次數*0.5)/評價總次數,如果評價字段空缺,則用5分填充。本條分析數據來自銷售事實表(sale),根據商品ID分組統計,計算每個商品的好評度,分析語句如下:
select goods_id as`商品 ID`,round(count(case when evalu?ates=4 then'4'end)+count(case when evaluates=3 then'3'end)+count(case when evaluates=5 and evaluates=''then'5'end)/count(evaluates),2)as`好評度`from sale group by goods_id order by`好評度`;
運行結果如圖2所示。

圖2 統計商品的好評度
對數據結果進行可視化展示,使用Java編寫代碼展示好評度排名前10的商品,效果如圖3所示。
(2)分析用戶粘度
從網頁URL被訪問的訪客數量和訪問總次數兩個角度分析網站的訪問粘性,分析訪問量最大的頁面,優(yōu)化其他頁面,衡量頁面更新前后受歡迎程度,從而優(yōu)化整體網站建設。本條分析數據來自用戶瀏覽網站的Web日志記錄(web),根據網頁URL分組統計,計算不重復的訪客數量,頁面訪問總次數,并按降序排列,分析語句如下:
select url as`網頁 URL`,count(distinct user_id)as`訪客數量`,count(url)as`訪問總次數`from web group by url;
運行結果如圖4所示。

圖3 統計商品的好評度可視化效果

圖4 統計用戶粘度
對數據結果進行可視化展示,使用Java編寫代碼展示訪問量前5的網頁,效果如圖5所示。

圖5 統計用戶粘度可視化效果
(3)分析用戶最喜歡購買的商品
對于已經登錄的用戶,根據用戶的基本信息如年齡段、性別、職業(yè)等,分析出用戶最喜歡購買的商品,從而將這些商品有目標的推送給不同用戶展示,提高交易成功率,優(yōu)化網站建設。本條分析統計不同年齡段不同性別消費金額最多的商品種類,年齡和性別來自用戶維表(user),消費金額來自銷售事實表(sale),商品種類來自商品維表(shop),用戶維表和銷售事實表根據用戶ID關聯,銷售事實表和商品維表根據商品ID關聯,根據年齡段和性別分組,統計出消費金額最多的商品種類,分析語句如下:
select t.sex as`性別`,t.age as`年齡段`,y.kid2 as`商品類別`from(select elect*,row_number()over(partition by c.sex,c.age order by c.money desc)as rank from(select a.sex,a.age,b.goods_id,b.money from(select s.age,s.sex,s.id from(select case when range_age<=30 then'<=30'when range_age>30 and range_age<=50 then'30-50'when range_age>=50 then'>=50'end as age,sex,userid as id from user)s group by s.age,s.sex,s.id)a join(select sum(money*num)as money,goods_id,us?er_id from sale group by goods_id,user_id)b on a.id=b.user_id group by a.sex,a.age,b.goods_id,b.money)c)z where z.rank<=1)t join shop y on t.goods_id=y.goods_id;
運行結果如圖6所示。
由結果可知,不同年齡段不同性別的用戶最喜歡購買的商品種類,基于大數據分析結果,再將同類目下的商品推薦給顧客,就可以達到優(yōu)化網站建設,提高用戶體驗度的效果。

圖6 不同年齡段不同性別用戶喜歡購買的商品
電商網站每日產生的用戶數據正呈指數性增長,如何從這么大規(guī)模的數據量中分析挖掘出有價值的信息,反饋網站建設優(yōu)化,給用戶帶來更好的使用體驗,這給技術帶來了挑戰(zhàn)。隨著大數據平臺的日漸成熟和普及,能夠輕松實現TB級數據的存儲、PB級數據的查詢分析,為海量數據的分析預測提供了技術手段。本文基于業(yè)界流行的華為大數據平臺,對電商網站數據進行了三個角度的分析,先進行數據清洗,再使用HQL語言做統計分析,最后使用Java呈現可視化分析結果,為Web網站建設優(yōu)化提供了數據支持,本文下一步將繼續(xù)研究更復雜的分析角度,采用編寫MapReduce程序實現復雜分析。