淘寶大數(shù)據(jù)分析案例

淘寶 大數(shù)據(jù) 分析 案例| 2022-09-06 admin

項(xiàng)目介紹

本次結(jié)合的是一份淘寶大數(shù)據(jù)數(shù)據(jù),數(shù)據(jù)集的大小共177MB,數(shù)據(jù)一共有3182261份(三百多萬(wàn)份數(shù)據(jù)集),一般的軟件是無(wú)法計(jì)算和分析的,比如Excel,MySQL,Python這些都無(wú)法較好的完成相關(guān)數(shù)據(jù)分析。

1.Excel一般是一萬(wàn)多行的數(shù)據(jù)就不可以了。

2.Python與MySQL雖然可以,但是查詢的效率卻不敢保證,容易出現(xiàn)電腦死機(jī)或者卡死,這個(gè)與電腦本身的配置有關(guān),所以對(duì)于大數(shù)據(jù)的數(shù)據(jù)集,我們提供了Hadoop,偽分布式的儲(chǔ)存機(jī)制,這樣的結(jié)構(gòu)與特點(diǎn)讓我們的數(shù)據(jù)集,可以容納到TB級(jí)以上,較有規(guī)律的查詢和優(yōu)化的查詢,可以讓我們的數(shù)據(jù)分析事半功倍。

數(shù)據(jù)表里面的字段如下

user_id age gender item_id behavior_type item_category time Province

用戶ID,性別,商品ID,用戶行為,商品種類,發(fā)生日期,發(fā)生省份

項(xiàng)目準(zhǔn)備

前期準(zhǔn)備

如果你想要使用Hadoop集群來(lái)操作這次案例,就必須要已經(jīng)完全配置好了的才能完成下面的操作,必須要包含:hdfs,hbase,hive,flume,sqoop等插件,如果有需要的可以私信我,文件壓縮包7-8GB,只能用百度云盤(pán)分享給你,解壓之后直接可以使用,一步到位

注意:虛擬機(jī)首先是必須要有的,不然有我發(fā)的鏡像文件也不可以的

項(xiàng)目開(kāi)展

項(xiàng)目導(dǎo)入

如果你是第一次使用我推薦的系統(tǒng),需要進(jìn)行下面的一些簡(jiǎn)單操作:

1.啟動(dòng)和拷貝hive包到相應(yīng)的目錄下面,這個(gè)是為了利用flume導(dǎo)入而準(zhǔn)備的

start-all.sh
cd ${HIVE_HOME}/hcatalog/share/hcatalog/
cp * ${FLUME_HOME}/lib/
cd ${FLUME_HOME}/lib/
ll

本次我將講解兩種導(dǎo)入的方法,一種是hive直接加載本地文件,另一種是利用flume自動(dòng)導(dǎo)入數(shù)據(jù),作為商業(yè)大數(shù)據(jù)數(shù)據(jù),我們更傾向于后者,因?yàn)樵谄綍r(shí)采集日志或數(shù)據(jù)集,都是自動(dòng)化的,自動(dòng)化分布式爬蟲(chóng),自動(dòng)化導(dǎo)入,自動(dòng)化分析,這樣才是老板時(shí)刻想要的數(shù)據(jù)結(jié)果展示,所以作為數(shù)據(jù)分析師,在以后的工作之中如何把工作一鍵化是非常的重要的,但是平時(shí)自己練習(xí)的時(shí)候,基于一些少量的數(shù)據(jù)集,我們采用本地加載的方法還是比較的簡(jiǎn)單方便,各有各的優(yōu)勢(shì),我們自己去取舍。

把下面的配置參數(shù)加入hive-site.xml文件里面全選覆蓋即可

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://localhost:3306/hive?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property>
   <name>javax.jdo.option.ConnectionDriverName</name>
   <value>com.mysql.jdbc.Driver</value>
</property>

<property>
   <name>javax.jdo.option.ConnectionUserName</name>
   <value>root</value>
</property>

<property>
   <name>javax.jdo.option.ConnectionPassword</name>
   <value>root</value>
</property>

<property>
    <name>hive.support.concurrency</name>
    <value>true</value>
</property>
<property>
    <name>hive.exec.dynamic.partition.mode</name>
    <value>nonstrict</value>
</property>
<property>
    <name>hive.txn.manager</name>
    <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
    <name>hive.compactor.initiator.on</name>
    <value>true</value>
</property>
<property>
    <name>hive.compactor.worker.threads</name>
    <value>1</value>
    <!--這里的線程數(shù)必須大于0 :理想狀態(tài)和分桶數(shù)一致-->
</property>
<property>
    <name>hive.enforce.bucketing</name>
    <value>true</value>
</property>

</configuration>

創(chuàng)建文件夾,便于后續(xù)操作

mkdir -p /home/hadoop/taobao/data
mkdir -p /home/hadoop/taobao/tmp/point

創(chuàng)建配置文件,幫助我們導(dǎo)入到hive里面(flume組件配置)

vi taobao.properties
#定義agent名, source、channel、sink的名稱
agent3.sources = source3
agent3.channels = channel3
agent3.sinks = sink3
#具體定義source
agent3.sources.source3.type = spooldir
agent3.sources.source3.spoolDir = /home/hadoop/taobao/data
agent3.sources.source3.fileHeader=false


#設(shè)置channel類型為磁盤(pán)
agent3.channels.channel3.type = file
#file channle checkpoint文件的路徑
agent3.channels.channel3.checkpointDir=/home/hadoop/taobao/tmp/point
# file channel data文件的路徑
agent3.channels.channel3.dataDirs=/home/hadoop/taobao/tmp

#具體定義sink
agent3.sinks.sink3.type = hive
agent3.sinks.sink3.hive.metastore = thrift://hadoop:9083
agent3.sinks.sink3.hive.database = taobao_data
agent3.sinks.sink3.hive.table = data
agent3.sinks.sink3.serializer = DELIMITED
agent3.sinks.sink3.serializer.delimiter = ","
agent3.sinks.sink3.serializer.serdeSeparator = ','
agent3.sinks.sink3.serializer.fieldnames = id,user_id,age,gender,item_id,behavior_type,item_category,time,Province
agent3.sinks.sink3.batchSize = 90

#組裝source、channel、sink
agent3.sources.source3.channels = channel3
agent3.sinks.sink3.channel =

在hive里面創(chuàng)建相應(yīng)的表(利用flume導(dǎo)入的時(shí)候)

create database taobao_data;
use taobao_data;
create table `taobao_data`.`data`  (
  `id` varchar(255) ,
  `user_id` varchar(255) ,
  `age` varchar(255) ,
  `gender` varchar(255),
  `item_id` varchar(255),
  `behavior_type` varchar(255),
  `item_category` varchar(255),
  `time` varchar(255),
  `Province` varchar(255)
) 
clustered by(id) into 3 buckets
row format delimited fields terminated by ','
stored as orc tblproperties('transactional'='true');
首先運(yùn)行該代碼啟動(dòng)(終端命令行)

hive --service metastore -p 9083


運(yùn)行下面的代碼(終端命令行)

flume-ng agent --conf conf --conf-file taobao.properties -name agent3 -Dflume.hadoop.logger=INFO,console

在hive里面創(chuàng)建相應(yīng)的表(利用本地加載方法)

create database taobao_data;
use taobao_data;

create table `taobao_data`.`data`  (
  `id` varchar(255) ,
  `user_id` varchar(255) ,
  `age` varchar(255) ,
  `gender` varchar(255),
  `item_id` varchar(255),
  `behavior_type` varchar(255),
  `item_category` varchar(255),
  `time` varchar(255),
  `Province` varchar(255)
) 
row format delimited fields terminated by ','
stored as textfile;


LOAD DATA LOCAL INPATH '/home/hadoop/data.txt' INTO TABLE data;

全部都在hive里面運(yùn)行

結(jié)果表和接收表的創(chuàng)建:

5.hive里面創(chuàng)建結(jié)果表

create table `xsxk`.`whw_2019443818_xsxk_result`  (
  `key` varchar(255) ,
  `value` varchar(255)) ;

6.MySQL里面創(chuàng)建接收表

CREATE DATABASE xsxk;
create table `taobao`.`data_result`  (
  `key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

經(jīng)過(guò)上述的操作,導(dǎo)入數(shù)據(jù)就已經(jīng)成功了

我們可以來(lái)看看:

淘寶大數(shù)據(jù)分析案例_可視化

項(xiàng)目分析

本次我給出了8個(gè)案例分析,如果你做到了這一步,下面的分析就是看你自己的才華了

你可以按照我的語(yǔ)句來(lái)分析,也可以按照你自己想法來(lái)實(shí)現(xiàn)本次的數(shù)據(jù)分析,正所謂“萬(wàn)事俱備只欠東風(fēng)”

為了數(shù)據(jù)的準(zhǔn)確性,下面的用戶ID,商品ID,商品種類都是去重之后的,這樣才有意義

– 1.統(tǒng)計(jì)每個(gè)省份的商品種類

SELECT count( DISTINCT d.item_category)as `商品種類`,d.Province `所屬地` from `data` as d GROUP BY d.Province ORDER BY `商品種類` DESC;

淘寶大數(shù)據(jù)分析案例

 

– 2.統(tǒng)計(jì)每個(gè)省份的男女用戶人數(shù)

SELECT DISTINCT d.user_id as `男性用戶`,d.Province from `data` as d where d.gender=0 GROUP BY d.Province ;
SELECT DISTINCT d.user_id as `女性用戶`,d.Province from `data` as d where d.gender=1 GROUP BY d.Province ;

– 3.統(tǒng)計(jì)各省總訪問(wèn)量

select 'PV', u.`總訪問(wèn)量`,u.`Province` as `省份` FROM 
(select count(*) AS `總訪問(wèn)量`,`Province` FROM `data` GROUP BY `Province`) u;

淘寶大數(shù)據(jù)分析案例

 

– 4.統(tǒng)計(jì)各省用戶人數(shù)

SELECT 'UV', u. `用戶數(shù)量`,u.`Province` FROM
(SELECT COUNT(DISTINCT user_id) AS `用戶數(shù)量`,`Province` FROM `data` GROUP BY `Province`) u;

淘寶大數(shù)據(jù)分析案例

– 5.跳失率

什么是跳失率:

淘寶大數(shù)據(jù)分析案例

 

先要輸入這一行代碼。這個(gè)和我們hive里面用varchar類型有關(guān),想知道具體原因請(qǐng)移步到淘寶案例文章

set hive.mapred.mode=nonstrict;
SELECT "跳失率", u.`總訪問(wèn)量` FROM
(
SELECT b.`僅pv用戶` / a.`總用戶` AS `總訪問(wèn)量`  FROM
(SELECT count( DISTINCT user_id ) AS `總用戶` FROM `data`) a,
(SELECT count( DISTINCT user_id ) AS `僅pv用戶` from (select * from `data`) as c LEFT JOIN (SELECT  DISTINCT user_id as `id`  FROM `data` WHERE behavior_type = '2' or behavior_type='3' or behavior_type='4') as d on c.user_id=d.id WHERE d.id is NULL ) as b
) as u;

淘寶大數(shù)據(jù)分析案例

– 6.有購(gòu)買(mǎi)行為的用戶數(shù)量

SELECT COUNT(*) FROM (SELECT u.user_id, SUM( CASE u.behavior_type WHEN '4 ' THEN 1 ELSE 0 END ) AS buy FROM `data` u GROUP BY u.user_id HAVING buy > 0 ) t;

淘寶大數(shù)據(jù)分析案例

–7. 用戶的購(gòu)物情況

SELECT COUNT(*) AS `總數(shù)`, SUM(CASE u.`behavior_type` WHEN '1 ' THEN 1 ELSE 0 END ) AS `點(diǎn)擊行為`,SUM(CASE u.`behavior_type` WHEN '2 ' THEN 1 ELSE 0 END ) AS `收藏行為`,SUM(CASE u.`behavior_type` WHEN '3 ' THEN 1 ELSE 0 END ) AS `加購(gòu)物車行為`,SUM(CASE u.`behavior_type` WHEN '4 ' THEN 1 ELSE 0 END ) AS `購(gòu)買(mǎi)行為` FROM `data` as u;

淘寶大數(shù)據(jù)分析案例

– 8.復(fù)購(gòu)率

SELECT t2.repeat_buy/t1.total AS `復(fù)購(gòu)率` FROM  
(SELECT COUNT(DISTINCT u1.user_id) AS total FROM `data` u1) t1 , 
(SELECT COUNT(1) AS repeat_buy FROM
(SELECT u.user_id, SUM(CASE u.behavior_type WHEN '4 ' THEN 1 ELSE 0 END ) AS buy FROM `data` u  GROUP BY u.user_id HAVING buy>1) t) t2;

淘寶大數(shù)據(jù)分析案例_

項(xiàng)目分析

本次數(shù)據(jù)分析項(xiàng)目采用Python的第三方庫(kù)的pyecharts這個(gè)強(qiáng)大的庫(kù),它的特點(diǎn)相信有許多的可視化的小伙伴一定很熟悉,高渲染的可視化效果讓我們可以快速的展示!

下面我們就把剛剛的八個(gè)項(xiàng)目可視化出來(lái)

由于文章篇幅過(guò)于長(zhǎng),我就不完全可視化了

用戶行為分析

淘寶大數(shù)據(jù)分析案例

淘寶大數(shù)據(jù)分析案例

淘寶大數(shù)據(jù)分析案例

通過(guò)這個(gè)我們可以發(fā)現(xiàn),大家還是都比較喜歡瀏覽商品頁(yè)面,對(duì)于加購(gòu)物車和收藏以及購(gòu)買(mǎi),不太多,這也說(shuō)明了,淘寶里面的特點(diǎn),豐富的商品讓我們有點(diǎn)選擇猶豫了。

from pyecharts import options as opts
from pyecharts.charts import Pie
a=["點(diǎn)擊行為","收藏行為","加購(gòu)物車行為","購(gòu)買(mǎi)行為"]
b=[2998564,60921,91654,31122]
c = (
    Pie()
    .add(
        "",
         [list(z) for z in zip(a, b)]
    )
    .set_colors(["orange", "purple", "yellow", "red", "pink", "purple", "blue"])#顏色設(shè)置
    .set_global_opts(title_opts=opts.TitleOpts(title="用戶行為分析"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}"),
    toolbox_opts=opts.ToolboxOpts()
    )
    .render("餅圖.html")
)

參考這個(gè)代碼,我們可以直接連接數(shù)據(jù)庫(kù),通過(guò)數(shù)據(jù)的處理分別展示不同的類型數(shù)據(jù)集

淘寶大數(shù)據(jù)分析案例

 

這個(gè)跳失率,看起來(lái)還是有點(diǎn)不樂(lè)觀,說(shuō)明只看不買(mǎi)不收藏的用戶有點(diǎn)多,可能是本次的數(shù)據(jù)集非常的大,所以綜合下來(lái)大家的平均行為還是瀏覽頁(yè)面,以及看商品較多,這在電商大數(shù)據(jù)集下也是屬于正常的結(jié)論。

||數(shù)據(jù)留給你們可視化了,自己去發(fā)揮自己的藝術(shù)細(xì)胞||

PV 93444 四川
PV 94105 福建
PV 93341 重慶市
PV 93796 吉林
PV 93979 湖北
PV 93503 新疆
PV 93671 臺(tái)灣
PV 93343 河南
PV 93276 廣東
PV 94260 寧夏
PV 93881 北京市
PV 93778 上海市
PV 93782 陜西
PV 93666 浙江
PV 93955 內(nèi)蒙古
PV 93551 貴州
PV 93378 湖南
PV 93724 青海
PV 93336 黑龍江
PV 93544 澳門(mén)
PV 93460 甘肅
PV 93556 山西
PV 93178 海南
PV 93688 遼寧
PV 93369 天津市
PV 93899 西藏
PV 93406 河北
PV 93726 安徽
PV 93379 山東
PV 93443 香港
PV 93372 廣西
PV 93678 江西
PV 93575 云南
PV 93219 江蘇


UV 93756 上海市
UV 93552 云南
UV 93933 內(nèi)蒙古
UV 93855 北京市
UV 93655 臺(tái)灣
UV 93773 吉林
UV 93419 四川
UV 93346 天津市
UV 94234 寧夏
UV 93708 安徽
UV 93355 山東
UV 93528 山西
UV 93255 廣東
UV 93349 廣西
UV 93490 新疆
UV 93200 江蘇
UV 93650 江西
UV 93383 河北
UV 93324 河南
UV 93635 浙江
UV 93152 海南
UV 93949 湖北
UV 93355 湖南
UV 93522 澳門(mén)
UV 93433 甘肅
UV 94073 福建
UV 93869 西藏
UV 93528 貴州
UV 93666 遼寧
UV 93314 重慶市
UV 93765 陜西
UV 93703 青海
UV 93420 香港
UV 93315 黑龍江


男性用戶 省份
64772406 新疆
154141792 湖北
133773960 河南
125204052 廣東
157079107 吉林
162728279 寧夏
20331578 上海市
28145118 四川
91298044 陜西
6357845 北京市
114749619 福建
162925618 貴州
169151099 湖南
151203745 甘肅
124588307 山西
161838654 海南
138211350 遼寧
182697679 天津市
177735754 浙江
190273854 河北
65841694 安徽
192816511 山東
100761551 廣西
137215222 云南
94156421 重慶市
169364076 江西
121102112 香港
82398872 澳門(mén)
72957630 內(nèi)蒙古
2405729 江蘇
28518572 西藏
52342755 青海
16147613 臺(tái)灣
131552233 黑龍江


女性用戶 省份
68786611 四川
167664275 福建
125611298 重慶市
80542247 吉林
125574663 湖北
15818895 臺(tái)灣
197168702 北京市
33734922 浙江
19618892 內(nèi)蒙古
121152092 青海
157095955 黑龍江
86441455 澳門(mén)
98225813 貴州
133159769 河南
59135936 上海市
83870742 廣東
167098473 西藏
112385169 新疆
17938248 陜西
115047781 海南
194635526 寧夏
161987546 遼寧
122802547 香港
197657745 江西
6002942 廣西
97904095 云南
28987253 山東
71715466 山西
84458523 安徽
159809593 江蘇
91157689 湖南
183075750 天津市
51040613 河北
185767669 甘肅


淘寶大數(shù)據(jù)案例到這里就結(jié)束了,從數(shù)據(jù)導(dǎo)入,到數(shù)據(jù)處理,最后到數(shù)據(jù)可視化,都是滿滿的回憶,雖然過(guò)程比較的艱辛,但是我覺(jué)得還是較為值得的,本次的課設(shè)的小伙伴,希望你們可以順利取得好成績(jī),加油!

每文一語(yǔ)

胸懷千秋偉業(yè),恰是百年風(fēng)華