项目实战:电子商务消费行为分析

该博客详细介绍了在Zeppelin环境中进行电子商务数据分析的过程,包括需求概述、数据结构检查、数据清洗、数据存储和Hive分析。主要内容涉及处理customer、transaction、store和review表中的错误,以及对数据进行清洗、加密、分区,并执行如客户消费统计、门店资源利用率、消费特征分析等Hive查询操作。
摘要由CSDN通过智能技术生成

运行zeppelin

需求概述

对某零售企业最近1年门店收集的数据进行数据分析
潜在客户画像
用户消费统计
门店的资源利用率
消费的特征人群定位
数据的可视化展现

环境设置-zeppelin

在这里插入图片描述

数据结构

customer表

language字段数据存在错误
在这里插入图片描述

transaction表

表中transaction_id有重复,但数据有效,需要修复数据
在这里插入图片描述

store表

在这里插入图片描述

review表

表中无效的score数据表中有将transaction_id映射到错误的store_id在这里插入图片描述
customer_details、transaction_details、store_details、store_review
在这里插入图片描述

检查行数和header行

上传数据到hdfs

在这里插入图片描述
在这里插入图片描述

创建适当的外部表来保存数据

在这里插入图片描述

数据获取

在这里插入图片描述

查看并了解数据

在这里插入图片描述

数据清洗

建新表

对transaction_details中的重复数据生成新ID
过滤掉store_review中没有评分的数据
可以把清洗好的数据放到另一个表或者用View表示
找出PII (personal information identification) 或PCI (personal confidential information) 数据进行加密或hash
重新组织transaction数据按照日期YYYY-MM做分区
在这里插入图片描述
md5单向加密,保证数据的有效性
where语句都是向左执行的

插入清洗后的数据

在这里插入图片描述
insert into 增量导入
insert overwrite 全量导入

基于hive的数据分析

customer_details表

6.1找出顾客最常用的信用卡
6.2找出客户资料中排名前五的职位名称
6.3在美国女性最常用的信用卡
6.4按性别和国家进行客户统计
在这里插入图片描述

transaction_details表

// 7.1 计算每个月总收入
select concat(year,'-',month) as ym,round(sum(price),2) as totalptice from transaction_details group by concat(year,'-',month);

7.2计算每个季度的总收入
1.首先,建立一个quickstart项目,写如下代码用于判断季度的规则,然后打包,再把打好的包拖入limux的/opt目录下。
在这里插入图片描述
2.把建好的jar包上传至hdfs里面

hdfs dfs -mkdir /func
hdfs dfs -put /opt/myfun.jar /func

3.在hive里面运行jar包

add jar       临时在数据库中加入jar包的命令
add jar /opt/myfun.jar
use shopping;
create function myquarter as "com.njbdqn.MyQuarter";
// 测试jar包
select myquarter(date) as quarter,round(sum(price),2) as salary from transaction_details group by myquarter(date);
永久建把jar包上传到hdfs  永久建函数
!hdfs dfs -put /opt/myfun.jar /func;
create function myp as "com.njbdqn.MyQuarter" using jar "hdfs:/func/myfun.jar"
use shopping;
select myp(date) from transaction_detials limit 1;
// 按季计算总收入
select myp(date) as quarter,round(sum(price),2) as salary from transaction_details group by myp(date)
// 7.3按年计算总收入
select year,round(sum(price),2) as salary from transaction_details group by year
// 7.4按周计算总收入
select concat(year,'-',weekofyear(date),'周'),round(sum(price),2) as salary from transaction_details group by concat(year,'-',weekofyear(date),'周')

// 7.5/7.6 按时间段计算收入(上午、中午等)
表里存在的数据不是标准的24小时计时法,且还有pm、am等不需要的数据
在这里插入图片描述
首先,把数据转换成24小时计数的标准格式,pm、am删掉,带pm的加上12个小时,参照以下的博客,可以找到
HIVE 在原始时间上加八小时的方法https://zhidao.baidu.com/question/1674477743252266627.html?qq-pf-to=pcqq.group

select from_unixtime(unix_timestamp('2017-10-31 16:00:00')+28800,'yyyy-MM-dd HH:mm:ss')
其中unix_timestamp是日期转时间戳bai,28800=8*60*60(小时换为秒)du
from_unixtime是转回日期格式,大概是这个意思
// 下午部分:后面含有PM的部分,43200=12*60*60,默认拼接1920-1-1和:00秒,然后转换成时间戳,加上12个小时之后,截取时分部分,根据时分部分方便计算时间段,然后再转换成标准的时间格式
// 上午部分:后面含有AM就截取不带AM的时间
select time,case when instr(time,'PM')!=0 then from_unixtime(unix_timestamp('1920-1-1',split(time,' ')[0],':00'))+43200,'HH:mm') when instr(time,'AM')!=0 then split(time,' ')[0] else time end from transaction_details limit 3

以下就是运行出来的结果,时间格式统一
在这里插入图片描述
时间转换的宏
在这里插入图片描述
用标准的时间格式去判断时间段
在这里插入图片描述

with
t as (select store_id,case when instr(time,'PM')!=</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值