6、淘宝双11数据分析与预测

这篇博客详细介绍了在实验环境下,如何使用Hadoop、Hive、Spark、Sqoop和Echarts对淘宝2015年双11数据进行分析和预测。首先,数据经过预处理后导入Hive,进行数据查询分析。接着,使用Sqoop将数据导入MySQL。然后,利用Spark的SVM分类器预测回头客行为。最后,通过Echarts实现数据可视化分析。
摘要由CSDN通过智能技术生成

实验环境

Java1.8
Hadoop
Hive
Spark
Sqoop
Echarts
Intellij idea
VMware Workstation
Ubuntu 16.04

实验内容

  • 对文本文件形式的原始数据集进行预处理

  • 把文本文件的数据集导入到数据仓库Hive中

  • 对数据仓库Hive中的数据进行查询分析

  • 使用Sqoop将数据从Hive导入MySQL

  • 利用Eclipse搭建动态Web应用

  • 利用ECharts进行前端可视化分析

  • 利用Spark MLlib进行回头客行为预测

在这里插入图片描述

实验步骤

一、本地数据集上传到数据仓库Hive

1、数据集介绍

本案例采用的数据集压缩包为data_format.zip,该数据集压缩包是淘宝2015年双11前6个月(包含双11)的交易数据(5000万条记录),里面包含3个文件,分别是用户行为日志文件user_log.csv 、回头客训练集train.csv 、回头客测试集test.csv. 下面列出这3个文件的数据格式定义。

用户行为日志user_log.csv,日志中的字段定义如下:

(1)user_id | 买家id

(2)item_id | 商品id

(3)cat_id | 商品类别id

(4)merchant_id | 卖家id

(5)brand_id | 品牌id

(6)month | 交易时间:月

(7)day | 交易时间:日

(8)action | 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品

(9)age_range | 买家年龄分段:1表示年龄<18, 2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知

(10)gender | 性别:0表示女性,1表示男性,2和NULL表示未知

(11)province| 收获地址省份

回头客训练集train.csv和回头客测试集test.csv拥有相同的字段,字段定义如下:

(1)user_id | 买家id
(2)age_range | 买家年龄分段:1表示年龄<18, 2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知
(3)gender | 性别:0表示女性,1表示男性,2和NULL表示未知
(4)merchant_id | 商家id
(5)label | 是否是回头客,0值表示不是回头客,1值表示回头客,-1值表示该用户已经超出我们所需要考虑的预测范围。NULL值只存在测试集,在测试集中表示需要预测的值。

现在,下面需要把data_format.zip进行解压缩,我们需要首先建立一个用于运行本案例的目录dbtaobao,请执行以下命令:

cd /usr/local
ls
sudo mkdir dbtaobao
//这里会提示你输入当前用户(本教程是hadoop用户名)的密码
//下面给hadoop用户赋予针对dbtaobao目录的各种操作权限
sudo chown -R hadoop:hadoop ./dbtaobao
cd dbtaobao
//下面创建一个dataset目录,用于保存数据集
mkdir dataset
//下面就可以解压缩data_format.zip文件
unzip data_format.zip -d /usr/local/dbtaobao/dataset
cd /usr/local/dbtaobao/dataset
ls

现在你就可以看到在dataset目录下有三个文件:test.csv、train.csv、user_log.csv,我们执行下面命令取出user_log.csv前面5条记录看一下。

head -5 user_log.csv

可以看到,前5行记录如下:

user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province
328862,323294,833,2882,2661,08,29,0,0,1,内蒙古
328862,844400,1271,2882,2661,08,29,0,1,1,山西
328862,575153,1271,2882,2661,08,29,0,2,1,山西
328862,996875,1271,2882,2661,08,29,0,1,1,内蒙古

2、数据集的预处理

(1)删除文件第一行记录,即字段名称

user_log.csv的第一行都是字段名称,我们在文件中的数据导入到数据仓库Hive中时,不需要第一行字段名称,因此,这里在做数据预处理时,删除第一行。

cd /usr/local/dbtaobao/dataset
//下面删除user_log.csv中的第1行
sed -i '1d' user_log.csv //1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行
//下面再用head命令去查看文件的前5行记录,就看不到字段名称这一行了
head -5 user_log.csv

(2)获取数据集中双11的前10000条数据

由于数据集中交易数据太大,这里只截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv。下面我们建立一个脚本文件完成上面截取任务,请把这个脚本文件放在dataset目录下和数据集。

cd /usr/local/dbtaobao/dataset
vim predeal.sh

上面使用vim编辑器新建了一个predeal.sh脚本文件,请在这个脚本文件中加入下面代码:

#!/bin/bash
#下面设置输入文件,把用户执行predeal.sh命令时提供的第一个参数作为输入文件名称
infile=$1
#下面设置输出文件,把用户执行predeal.sh命令时提供的第二个参数作为输出文件名称
outfile=$2
#注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面
awk -F "," 'BEGIN{
      id=0;
    }
    {
        if($6==11 && $7==11){
            id=id+1;
            print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11
            if(id==10000){
                exit
            }
        }
    }' $infile > $outfile

下面就可以执行predeal.sh脚本文件,截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv,命令如下:

chmod +x ./predeal.sh
./predeal.sh ./user_log.csv ./small_user_log.csv

(3)导入数据库

下面要把small_user_log.csv中的数据最终导入到数据仓库Hive中。为了完成这个操作,我们会首先把这个文件传到分布式文件系统HDFS中,然后,在Hive中创建两个个外部表,完成数据的导入。

执行下面命令启动Hadoop:

cd /usr/local/hadoop
./sbin/start-dfs.sh

然后,执行jps命令看一下当前运行的进程:

jps

如果出现下面这些进程,说明Hadoop启动成功了。

3765 NodeManager
3639 ResourceManager
3800 Jps
3261 DataNode
3134 NameNode
3471 SecondaryNameNode

现在,我们要把Linux本地文件系统中的user_log.csv上传到分布式文件系统HDFS中,存放在HDFS中的“/dbtaobao/dataset”目录下。

首先,请执行下面命令,在HDFS的根目录下面创建一个新的目录dbtaobao,并在这个目录下创建一个子目录dataset,如下:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /dbtaobao/dataset/user_log

然后,把Linux本地文件系统中的small_user_log.csv上传到分布式文件系统HDFS的“/dbtaobao/dataset”目录下,命令如下:

./bin/hdfs dfs -put /usr/local/dbtaobao/dataset/small_user_log.csv /dbtaobao/dataset/user_log

下面可以查看一下HDFS中的small_user_log.csv的前10条记录,命令如下:

./bin/hdfs dfs -cat /dbtaobao/dataset/user_log/small_user_log.csv | head -10

接着在Linux系统中,再新建一个终端。因为需要借助于MySQL保存Hive的元数据,所以,请首先启动MySQL数据库:

service mysql start  #可以在Linux的任何目录下执行该命令

由于Hive是基于Hadoop的数据仓库,使用HiveQL语言撰写的查询语句,最终都会被Hive自动解析成MapReduce任务由Hadoop去具体执行,因此,需要启动Hadoop,然后再启动Hive。由于前面我们已经启动了Hadoop,所以,这里不需要再次启动Hadoop。下面,在这个新的终端中执行下面命令进入Hive:

cd /usr/local/hive
./bin/hive   # 启动Hive

启动成功以后,就进入了“hive>”命令提示符状态,可以输入类似SQL语句的HiveQL语句。
下面,我们要在Hive中创建一个数据库dbtaobao,命令如下:

hive>  create database dbtaobao;
hive>  use dbtaobao;

接下来我们要分别在数据库dbtaobao中创建一个外部表user_log,它包含字段(user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province),请在hive命令提示符下输入如下命令:

hive>  CREATE EXTERNAL TABLE dbtaobao.user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to xmu dblab,Now create dbtaobao.user_log!' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/dbtaobao/dataset/user_log';

上面已经成功把HDFS中的“/dbtaobao/dataset/user_log”目录下的small_user_log.csv数据加载到了数据仓库Hive中,我们现在可以使用下面命令查询一下:

hive>  select * from user_log limit 10;

查询的结果如下:

OK
328862  406349  1280    2700    5476    11  11  0   0   1   四川
328862  406349  1280    2700    5476    11  11  0   7   1   重庆市
328862  807126  1181    1963    6109    11  11  0   1   0   上海市
328862  406349  1280    2700    5476    11  11  2   6   0   台湾
328862  406349  1280    2700    5476    11  11  0   6   2   甘肃
328862  406349  1280    2700    5476    11  11  0   4   1   甘肃
328862  406349  1280    2700    5476    11  11  0   5   0   浙江
328862  406349  1280    2700    5476    11  11  0   3   2   澳门
328862  406349  1280    2700    5476    11  11  0   7   1   台湾
234512  399860  962 305 6300    11  11  0   4   1   安徽
Time taken: 1.775 seconds, Fetched: 10 row(s)
二、Hive数据分析

在“hive>”命令提示符状态下执行下面命令:

hive> use dbtaobao; -- 使用dbtaobao数据库
hive> show tables; -- 显示数据库中所有表。
hive> show create table user_log; -- 查看user_log表的各种属性;

执行结果如下:

OK
CREATE EXTERNAL TABLE `user_log`(
  `user_id` int,
  `item_id` int,
  `cat_id` int,
  `merchant_id` int,
  `brand_id` int,
  `month` string,
  `day` string,
  `action` int,
  `age_range` int,
  `gender` int,
  `province` string)
COMMENT 'Welcome to xmu dblab,Now create dbtaobao.user_log!'
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'field.delim'=',',
  'serialization.format'=',')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://localhost:9000/dbtaobao/dataset/user_log'
TBLPROPERTIES (
  'numFiles'='1',
  'totalSize'='4729522',
  'transient_lastDdlTime'='1487902650')
Time taken: 0.084 seconds, Fetched: 28 row(s)

1、查询条数统计分析

(1) 用聚合函数count()计算出表内有多少条

淘宝数据分析报告模板   导语:主要分析本月毛利率、毛利额情况,与去年同期比照情况,以下为大家介绍淘 宝数据分析模板文章,欢送大家阅读参考!   淘宝数据分析,实际是电商数据分析,归结到底还是零售数据分析,给你一些分析 的思路,权当做抛砖引玉。   总体来说可以分为商品分析、客户分析、地区分析、时间分析四大维度(参考数据 雷达的分析思路)。在这里我重点说商品分析。   1、销售状况分析:主要分析本月销售情况、本月销售指标完成情况、与去年(或上 月)同期比照情况。通过这组数据的分析可以知道同比销售趋势、实际销售与方案的差 距。   2、销售毛利分析:主要分析本月毛利率、毛利额情况,与去年同期比照情况。通过 这组数据的分析可以知道同比毛利状况,以及是否在商品毛利方面存在缺乏。   3、营运可控费用分析:主要是本月各项费用明细分析、与去年同期比照情况,有无 节约控制本钱费用。这里的各项费用是指:员工本钱、能耗、物料及办公用品费用、维 修费用、存货损耗、日常营运费用(包括费、交通费、垃圾费等),通过这组数据的分 析可以清楚的知道门店营运可控费用的列支,是否有同比异常的费用发生、有无可以节 约的费用空间。   4、橱窗效率:主要是本月橱窗效率情况、与去年同期比照。"日均橱窗效率"是指" 日均每个橱窗平均销售额",即:日均橱窗商品销售金额/橱窗个数。   5、人均劳效(人效):主要是本月人均劳效情况、与去年同期比照。"本月人均劳 效"计算方法:本月销售金额/本月总营业人数。   6、盘点损耗率分析:主要是门店盘点结果简要分析,通过分析及时发现商品进、销 、存各个环节存在的问题。该指标指标仅对大店或销量日均100以上店铺适用。   7、库存分析:主要是本月平均商品库存、库存构造、库龄情况、周转天数,与去年 同期比照分析。通过该组数据的分析可以看出库存是否出现异常,特别是否存在库存积 压现象。该指标指标仅对大店或销量日均100以上店铺适用。   8、促销商品业绩评估:主要是促销商品品种数执行情况,促销商品销售情况、占比 情况及与前期销售比照情况分析。"促销商品与前期销售比照分析"即将本档期特价商品 的销售情况与特价执行前相同天数的销售情况进展比照分析,通过以上这组数据的分析 可以看出促销产生的效果以及促销活动存在的问题。   9、流量、客单价分析:主要指本月平均每天流量、客单价情况,与去年同期比照情 况。这组数据在分析客流量、客单价时特别要注重促销活动期间及促销活动前的比照分 析,促销活动的开展是否对于提高客流量、客单价起到了一定的作用。   10、售罄率:指货品上市后特定时间段销售数量占进货数量的百分比。它是衡量货 品销售状况的重要指标。在通常情况下,售罄率越高表示该类别货品销售情况越好,但 它跟进货数量有着很大的关系。通过此数据可以针对货品销售的好坏进展及时的调整。   11、库销比:指库存金额同销售牌价额之比例。通常情况下,销售牌价额为1个月的 时间,也可以说库销比是以月为单位的。简单的来说就是某一时间点的库存能够维持多 长时间的销售。它是衡量库存是否合理的重要指标,合理的标准在3- 5左右。在销售数据正常的情况下,存销比过高或过低都是库存情况不正常的表达。通过 该组数据的分析可以看出库存是否出现异常,特别是否存在库存积压现象。该指标指标 仅对大店或销量日均100以上店铺适用。   (超级数据)   一、超级数据——行业分析   实时了解行业整体销售概况和开展趋势,深入分解行业下品类、品牌和店铺的详细 数据,为商家提供必不可少的市场数据。   1、统筹掌握行业市场销售概况   帮助淘宝卖家/品牌商了解行业整体销售概况,行业下热销类目、品牌、店铺与单品 销售概览。   2、分解热销店铺数据,洞察爆款与趋势   分析热销店铺下的类目、品牌与单品销售数据与飙窜情况,提供一手数据情报。   3、监控类目变化数据,了解市场需求走向   统计哪些类目卖的好、哪些上升的快,并分析对应热销店铺、品牌和单品详情,帮 助了解市场走向,学习前沿店铺。   4、定位品牌数据情报,寻找竞争/典范店铺   帮助淘宝掌柜与品牌商搜索自身品牌销售情况,了解该品牌下热销店铺、类目和   单品详情。   5、知己知彼知天下,百战不殆   支持搜索定位,帮助用户做到知己(自身店铺、类目、品牌),知彼(对应竞争对 手),知天下(行业数据,可查看多行业)。   6、不同品类属性分析,满足个性化需求   支持详细品类下的属性分析,更加深入详细的分析品类的详细数据,挖掘潜在信息 。   二、超级数据——店铺运营   定向监控竞争对手,及时跟踪店铺、产品及运营活动情况,了解对手是如何实现销 售增长,知己知彼方能百战百胜。   1、定向监控竞争/典范店铺与单品详情   帮助淘宝卖家监控
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值