分享

大数据数据挖掘之旅00:零售挖掘实例

问题导读:
1、Rapidminer是什么?
2、如何进行数据质量分析?
3、如何进行数据清洗及处理?
4、如何使用神经网络分类器?




PartI:工具准备

要模仿这个实验:你至少需要以下东西

Rapidminer(必用):一款不需要编程就可以进行数据分析和数据挖掘的软件,简单易学,人机界面也十分友好。要说有什么致命缺点就是启动起来很慢,很慢,很慢!至少我这台老人机常常感觉真是太烧CPU了!你可以自行百度找到它的下载地址。(这个软件有免费收费两个版本,不过免费版基本够用了)

Hadoop/Hive/Pig(选用):这些是大数据和分布式计算的构架工具。由于老师要求,这个项目的前面两部分会用到它,但并不是必要的部分。没有需求的同学可以忽视掉。(配置这些乱七八糟的环境真的扎心,扎心,很扎心!)


Online Retail Data Set数据集(必用):

一个国外免费的数据集,包含8个属性和五十四万条数据。你可以无需注册就免费下载这个表

OK,万事俱备,让我们开始旅程吧!

1、数据集信息
1.1数据集概述:

这是一个跨国数据集,其中包含某公司2010年12月1日至2011年12月9日期间发生的所有在英国和注册的非商店在线零售业务的交易。该公司主要销售独特的定制礼品。该公司的许多客户都是批发商。
1.2属性信息:
2019-03-26_133540.jpg
2019-03-26_133607.jpg

2、数据探索
2.1数据质量分析

我们随机抽样1000个样本(8c olumns* 125 rows)以其代表整体的数据质量

1) 缺失值分析

缺失值为1个,缺失率为0.1%。

2) 异常值分析

不存在异常值

3) 一致性分析

不存在与数据要求不一致的数据。

因此整体上。该表数据非常清洁。

2.2数据特征分析

我们对数据的一些特征进行简要观察和分析,以便为后续的一些步骤提供便利。
2019-03-26_133644.jpg

2019-03-26_133704.jpg
2019-03-26_133728.jpg
2019-03-26_133748.jpg
2019-03-26_133828.jpg

3、数据预处理

2019-03-26_133856.jpg
4、数据清洗
2019-03-26_133928.jpg
根据数据特性,我们使用“Peplace Missing Value “将缺失值修改为0。使用“Sample”和“Select Attributes”对数据进行采样约减和属性约减。这些工作我们将会在后面看到,这里暂不赘述

数据集成、数据变换和数据规约(由于数据集足够清洁,所以我们跳过这一步。一些工作我们将放在下一个部分里进行

5、关联规则分析(with 500000 samples)

假设你是该公司的经理,看到这些数据你会迫切的想知道销量高低更可能与哪些因素有关?例如,前面的数据探索中,我们发现绝对多数交易都在英国本土发生,那么在扎根英国本土市场或者拓展海外市场的不同选择能否带来额外收益?公司的总体商品的定价策略是否对于总销售额有较强的弹性呢?你想要根据这些信息对公司进行业务单位层面的战略制定。

我们将用关联规则解决以下问题。
2019-03-26_134002.jpg

5.1数据筛选

首先,我们对数据筛选后,将条件设定为现金流为正的销售交易。(将销售额、单价和数量限定为正数,从而避免了购买交易带来的噪声)
2019-03-26_134033.jpg
5.2设立属性

其次,我们设立三个新的属性。分别是“是否在英国本土销售”,“单价是否高于平均价格”“总销售额是否高于平均价格”。(在数据探索阶段所得到的方差图可以看出这里使用平均数是比中位数或者众数更加合理的)
2019-03-26_134059.jpg
2019-03-26_134137.jpg
5.3提取规则

按照下图进行规则提取
2019-03-26_134211.jpg
2019-03-26_134232.jpg
5.4结果显示

始终无法成功总结出规则。直到我们把置信度降低到0.5时。才得到一条规则,但并不显著。
2019-03-26_134303.jpg
因此我们发现,诸多信息都显示公司所在的很有可能是一个高度成熟和接近完全竞争的行业市场环境。

一方面,公司在的产品在国内或者海外并没有显著性差异。不管公司是扎根本土还是拓展海外都所得销售额几乎是没有差别的。

另一方面,可能是由公司商品档次分布和市场分布比较均衡导致的,总体上公司的定价策略对销售额的影响并不敏感。

这些信息是有价值的,它有助于我们从定量角度看清公司所在的外部环境。并结合其他信息“如税收,公司战略方针,行业周期”等,有助于我们更好的做出一些战略决策。

6、 新产品开发:神经网络分类器(100000 samples)

现在公司决定从已有产品中选取少部分进行投资,开发有潜力的商品。

作为经理,你需要根据已有的信息,识别出那些有潜力的商品,使得该投资所带来的销售额更可能那些高于公司销售额平均值从而拉动总体销售额的产品。我们将建立一个神经网络来完成这项工作。

6.1数据理解

我们筛选出一些可以控制,并且对新产品可能有帮助的特征。

·StockCode: 商品的姓名。 在数据准备阶段,我们将其角色设置为“id”,因为它不具有任何预测作用。但将其保留在数据集中非常重要,以便经理 稍后无需将数据与产品名称重新匹配,即可快速提出所建议投资的产品。

·ProductValue:判断投资该产品价值高低的,如果其销售额高于平均值则为高,否则为低。

·Quantity: 每笔交易的每件产品(项目)的数量。和UnitPrice一起判断销售额的高低,销售额越高,则该投资价值可能越高。

·UnitPrice: 单价。英镑单位产品价格。和Quantitiy一起判断销售额的高低,销售额越高,则该投资价值可能越高。

·Country: 每个客户所在国家/地区的名称。用来帮助判断投资投放在哪个市场更加有利。


6.2数据导入和设置角色
2019-03-26_134342.jpg
2019-03-26_134403.jpg

6.3加入神经网络模型
2019-03-26_134436.jpg

6.4模型预测
2019-03-26_134606.jpg
2019-03-26_134639.jpg
模型的准确度达到78.16%还是比较可靠的,现在我们可以根据上表来决定该投资哪些有价值的商品了。

7. 方法比较

哪种方法更加高效呢?我们使用了上个问题的操作进行观察。
v2-418b667f2a3ff75d19fcceb7533c2061_hd.jpg
执行全部样本太过耗时和消耗计算资源,故分别提取1000,10000和100000三个级别的样本,以精准度和执行耗时进行模型检验。(跌倒,笔者第一次运行54W个样本的默认设置神经网络进行分类的时候,运行了3个小时还没动静,最终丧失耐心选择放弃)

从上表我们可以看出,综合来看决策树或许是最优的模型。

*用Hadoop进行数据查询与存储(不想看这部分可以跳过)
这一部分本来在第二部分,不过料想很多同学会没有耐心看下去,所以放到最后来。


1、使用Hive

1.1在Hive建立一个新表,并将数据从Hdfs导入新建立的表中
[mw_shl_code=shell,true][root@hadoop01 ~]# export  HADOOP_USER_NAME=hdfs
//上面这句代码很关键,不然你会各种权限报错
[root@hadoop01 ~]# hive
hive> CREATE TABLE retail (InvoiceNo STRING,StockCode STRING,Description STRING,Quantity STRING,InvoiceDate STRING,UnitPrice STRING,CustomerID STRING,Country STRING)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY ','
    > STORED AS TEXTFILE;
//OK,Time taken: 0.222 seconds
hive> LOAD DATA LOCAL INPATH 'OnlineRetail.txt'
    > OVERWRITE INTO TABLE retail;
//Loading data to table default.retail
//Table default.retail stats: [numFiles=1, numRows=0, totalSize=47644178, rawDataSize=0]
//OK,Time taken: 1.151 seconds[/mw_shl_code]
2019-03-26_134752.jpg

1.2
现在,让我们调用HiveSQL来查询一下这个表到底有多少条数据。(HiveSQL迷人之处在于我们只需要执行几个类似SQL语言,就可以在底层调用MapReduce计算。)

[mw_shl_code=shell,true]hive> select count(1) FROM retail;[/mw_shl_code]
2019-03-26_134818.jpg
1.3
    如果我们想知道法国客人有哪些,并想把它引入一个新表FranchList呢。
[mw_shl_code=shell,true] hive> create table FranceList(guestId string);
hive> INSERT OVERWRITE TABLE FranceList
> SELECT CustomerID
> From retail
> where Country = "France";[/mw_shl_code]
2019-03-26_134847.jpg

1.4

如果我们想知道每个国家占订单总数的数量呢?(在接下来的“数据探索部分我们将会需要导出查询的结果到Excel对其进行分析”)

[mw_shl_code=shell,true] hive> CREATE TABLE CountryCount (Country STRING,count INT)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','
> STORED AS TEXTFILE;
Hive > insert overwrite directory '/home/ hdfs'
>select Country,COUNT(Country)
> From retail
> group by Country;[/mw_shl_code]

2019-03-26_134919.jpg
2019-03-26_134942.jpg
2、数据流语言Pig的应用

如果现在我们想用数据流语言pig查询法国客人的名单呢。

[mw_shl_code=shell,true][root@hadoop01 ~]# pig -x local;
grunt> A = LOAD 'OnlineRetail.txt' using PigStorage(',') AS (InvoiceNo:chararray,StockCode:chararray,Description:chararray,Quantity:chararray,InvoiceDate:chararray,UnitPrice:chararray,CustomerID:chararray,Country:chararray);
grunt> B = FILTER A BY Country == 'France'
grunt> DUMP B;[/mw_shl_code]

作者:叫我问天大人
来源:https://zhuanlan.zhihu.com/p/54719965

最新经典文章,欢迎关注公众号

已有(3)人评论

跳转到指定楼层
张萧 发表于 2019-3-27 08:19:22
很好,真的很实用
回复

使用道具 举报

Nick_fZ1qq 发表于 2019-3-27 08:34:21
干货,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条