计算机毕设 大数据电商用户行为分析及可视化

文章目录

  • 1. 数据集说明
  • 2. 数据处理
    • 2.1 数据导入
    • 2.2 数据清洗
  • 3.数据分析可视化
    • 3.1 用户流量及购物情况
    • 3.2 用户行为转换率
    • 3.3 用户行为习惯
    • 3.4 基于 RFM 模型找出有价值的用户
    • 3.5 商品维度的分析
  • 4 最后


1. 数据集说明

这是一份来自淘宝的用户行为数据,时间区间为 2017-11-25 到 2017-12-03,总计 100,150,807 条记录,大小为 3.5 G,包含 5 个字段。

2. 数据处理

2.1 数据导入

将数据加载到 hive, 然后通过 hive 对数据进行数据处理。

-- 建表
drop table if exists user_behavior;
create table user_behavior (
`user_id` string comment '用户ID',
`item_id` string comment '商品ID',
`category_id` string comment '商品类目ID',
`behavior_type` string  comment '行为类型,枚举类型,包括(pv, buy, cart, fav)',
`timestamp` int comment '行为时间戳',
`datetime` string comment '行为时间')
row format delimited
fields terminated by ','
lines terminated by '\n';-- 加载数据
LOAD DATA LOCAL INPATH '/home/getway/UserBehavior.csv'
OVERWRITE INTO TABLE user_behavior ;

2.2 数据清洗

数据处理主要包括:删除重复值,时间戳格式化,删除异常值。

--数据清洗,去掉完全重复的数据
insert overwrite table user_behavior
select user_id, item_id, category_id, behavior_type, timestamp, datetime
from user_behavior
group by user_id, item_id, category_id, behavior_type, timestamp, datetime;--数据清洗,时间戳格式化成 datetime
insert overwrite table user_behavior
select user_id, item_id, category_id, behavior_type, timestamp, from_unixtime(timestamp, 'yyyy-MM-dd HH:mm:ss')
from user_behavior;--查看时间是否有异常值
select date(datetime) as day from user_behavior group by date(datetime) order by day;--数据清洗,去掉时间异常的数据
insert overwrite table user_behavior
select user_id, item_id, category_id, behavior_type, timestamp, datetime
from user_behavior
where cast(datetime as date) between '2017-11-25' and '2017-12-03';--查看 behavior_type 是否有异常值
select behavior_type from user_behavior group by behavior_type;

3.数据分析可视化

3.1 用户流量及购物情况

--总访问量PV,总用户量UV
select sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,count(distinct user_id) as uv
from user_behavior;

image-20201228145436838

--日均访问量,日均用户量
select cast(datetime as date) as day,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,count(distinct user_id) as uv
from user_behavior
group by cast(datetime as date)
order by day;

image-20201228151058279

image-20201228151535393

--每个用户的购物情况,加工到 user_behavior_count
create table user_behavior_count as
select user_id,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,   --点击数sum(case when behavior_type = 'fav' then 1 else 0 end) as fav,  --收藏数sum(case when behavior_type = 'cart' then 1 else 0 end) as cart,  --加购物车数sum(case when behavior_type = 'buy' then 1 else 0 end) as buy  --购买数
from user_behavior
group by user_id;--复购率:产生两次或两次以上购买的用户占购买用户的比例
select sum(case when buy > 1 then 1 else 0 end) / sum(case when buy > 0 then 1 else 0 end)
from user_behavior_count;

image-20201228152004432

  • 小结:2017-11-25 到 2017-12-03 这段时间,PV 总数为 89,660,671 ,UV 总数为 987,991。从日均访问量趋势来看,进入 12 月份之后有一个比较明显的增长,猜测可能是因为临近双 12 ,电商活动引流产生,另外,2017-12-02 和 2017-12-03 刚好是周末,也可能是周末的用户活跃度本来就比平常高。总体的复购率为 66.01%,说明用户的忠诚度比较高。

3.2 用户行为转换率

--点击/(加购物车+收藏)/购买 , 各环节转化率
select a.pv,a.fav,a.cart,a.fav + a.cart as `fav+cart`,a.buy,round((a.fav + a.cart) / a.pv, 4) as pv2favcart,round(a.buy / (a.fav + a.cart), 4) as favcart2buy,round(a.buy / a.pv, 4) as pv2buy
from(
select sum(pv) as pv,   --点击数sum(fav) as fav,  --收藏数sum(cart) as cart,  --加购物车数sum(buy) as buy  --购买数
from user_behavior_count
) as a;

image-20201228144958757

image-20201228144814773

  • 小结:2017-11-25 到 2017-12-03 这段时间,点击数为 89,660,671 ,收藏数为 2,888,258,加购物车数为5,530,446,购买数为 2,015,807。总体的转化率为 2.25%,这个值可能是比较低的,从加到购物车数来看,有可能部分用户是准备等到电商节日活动才进行购买。所以合理推断:一般电商节前一段时间的转化率会比平常低。

3.3 用户行为习惯

-- 一天的活跃时段分布
select hour(datetime) as hour,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,   --点击数sum(case when behavior_type = 'fav' then 1 else 0 end) as fav,  --收藏数sum(case when behavior_type = 'cart' then 1 else 0 end) as cart,  --加购物车数sum(case when behavior_type = 'buy' then 1 else 0 end) as buy  --购买数
from user_behavior
group by hour(datetime)
order by hour;

image-20201228153206947

--一周用户的活跃分布
select pmod(datediff(datetime, '1920-01-01') - 3, 7) as weekday,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,   --点击数sum(case when behavior_type = 'fav' then 1 else 0 end) as fav,  --收藏数sum(case when behavior_type = 'cart' then 1 else 0 end) as cart,  --加购物车数sum(case when behavior_type = 'buy' then 1 else 0 end) as buy  --购买数
from user_behavior
where date(datetime) between '2017-11-27' and '2017-12-03'
group by pmod(datediff(datetime, '1920-01-01') - 3, 7)
order by weekday;

image-20201228153751943

image-20201228154533968

  • 小结:晚上21点-22点之间是用户一天中最活跃的时候,凌晨 4 点,则是活跃度最低的时候。一周中,工作日活跃度都差不多,到了周末活跃度有明显提高。

3.4 基于 RFM 模型找出有价值的用户

RFM 模型是衡量客户价值和客户创利能力的重要工具和手段,其中由3个要素构成了数据分析最好的指标,分别是:

  • R-Recency(最近一次购买时间)
  • F-Frequency(消费频率)
  • M-Money(消费金额)
--R-Recency(最近一次购买时间), R值越高,一般说明用户比较活跃
select user_id,datediff('2017-12-04', max(datetime)) as R,dense_rank() over(order by datediff('2017-12-04', max(datetime))) as R_rank
from user_behavior
where behavior_type = 'buy'
group by user_id
limit 10;--F-Frequency(消费频率), F值越高,说明用户越忠诚
select user_id,count(1) as F,dense_rank() over(order by count(1) desc) as F_rank
from user_behavior
where behavior_type = 'buy'
group by user_id
limit 10;--M-Money(消费金额),数据集无金额,所以就不分析这一项 

对有购买行为的用户按照排名进行分组,共划分为5组,
前 - 1/5 的用户打5分
前 1/5 - 2/5 的用户打4分
前 2/5 - 3/5 的用户打3分
前 3/5 - 4/5 的用户打2分
前 4/5 - 的用户打1分
按照这个规则分别对用户时间间隔排名打分和购买频率排名打分,最后把两个分数合并在一起作为该名用户的最终评分

with cte as(
select user_id,datediff('2017-12-04', max(datetime)) as R,dense_rank() over(order by datediff('2017-12-04', max(datetime))) as R_rank,count(1) as F,dense_rank() over(order by count(1) desc) as F_rank
from user_behavior
where behavior_type = 'buy'
group by user_id)select user_id, R, R_rank, R_score, F, F_rank, F_score,  R_score + F_score AS score
from(
select *,case ntile(5) over(order by R_rank) when 1 then 5when 2 then 4when 3 then 3when 4 then 2when 5 then 1end as R_score,case ntile(5) over(order by F_rank) when 1 then 5when 2 then 4when 3 then 3when 4 then 2when 5 then 1end as F_score
from cte
) as a
order by score desc
limit 20;

image-20201228155700646

  • 小结:可以根据用户的价值得分,进行个性化的营销推荐。

3.5 商品维度的分析

--销量最高的商品
select item_id ,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,   --点击数sum(case when behavior_type = 'fav' then 1 else 0 end) as fav,  --收藏数sum(case when behavior_type = 'cart' then 1 else 0 end) as cart,  --加购物车数sum(case when behavior_type = 'buy' then 1 else 0 end) as buy  --购买数
from user_behavior
group by item_id
order by buy desc
limit 10;--销量最高的商品大类
select category_id ,sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,   --点击数sum(case when behavior_type = 'fav' then 1 else 0 end) as fav,  --收藏数sum(case when behavior_type = 'cart' then 1 else 0 end) as cart,  --加购物车数sum(case when behavior_type = 'buy' then 1 else 0 end) as buy  --购买数
from user_behavior
group by category_id
order by buy desc
limit 10;
  • 小结:缺失商品维表,所以没有太多分析价值。假如有商品维表,可以再展开,以商品纬度进行分析,比如不同行业、不同产品的转化率,还有竞品分析等等。

4 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22975.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏如何应对虚拟定位问题

在游戏系统设计中,排行榜这一设计可谓是十分巧妙。它可以充分调动玩家的“胜负欲”,给予玩家前进的目标及动力,满足玩家的心理需求。 排行榜的设计使用范围广,对游戏留存、付费等指标提升效果出众,在不少游戏中都可以…

Vue-CodeMirror 使用

vue2 安装 npm install vue-codemirror -S # or yarn add vue-codemirror -S 全局配置&#xff0c;main.js文件引入 import VueCodemirror from vue-codemirror // import base style import codemirror/lib/codemirror.css Vue.use(VueCodemirror)Vue 文件内使用 <templ…

【运维】第03讲(上):Nginx 负载均衡常见架构及问题解析

实际上 Nginx 除了承担代理网关角色外还会应用于 7 层应用上的负载均衡&#xff0c;本课时重点讲解 Nginx 的负载均衡应用架构&#xff0c;及最常见的问题。 学前提示 Nginx 作为负载均衡是基于代理模式的基础之上&#xff0c;所以在学习本课时前&#xff0c;你需要对 Nginx …

LangChain大型语言模型(LLM)应用开发(四):QA over Documents

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

一个HTTP的流程

1&#xff0c;键入一个URL后浏览器将URL进行解析 2,浏览器解析URL后&#xff0c;需要查询服务器域名对应的IP地址。 流程如下&#xff1a;查询缓存&#xff0d; >客户端发送DNS请求-> 根DNS&#xff0c;根DNS根据 .COM-> 顶级域名服务器&#xff0c;根据baidu->权…

C# Linq 详解四

目录 概述 二十、SelectMany 二十一、Aggregate 二十二、DistinctBy 二十三、Reverse 二十四、SequenceEqual 二十五、Zip 二十六、SkipWhile 二十七、TakeWhile C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Li…

xxl-job的简单使用

xxl-job是一个分布式任务调度框架&#xff0c;在Spring中&#xff0c;提供有任务调度的注解功能&#xff0c;在之前的项目中&#xff0c;非分布式任务都可以直接使用Spring框架提供的Scheduled注解和EnableScheduling注解来实现定时任务。 EnableScheduling注解加载项目启动类上…

MySQL数据库基础 18

第18章_MySQL8其它新特性 1. MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性 2. 新特性1&#xff1a;窗口函数2.1 使用窗口函数前后对比2.2 窗口函数分类2.3 语法结构2.4 分类讲解1. 序号函数2. 分布函数3. 前后函数4. 首尾函数5. 其他函数 2.5 小 结 3. 新特…

录音怎么转换成mp3格式?

录音怎么转换成mp3格式&#xff1f;将录音转换成MP3格式可以节省存储空间。通常&#xff0c;录音保存的文件格式是WAV等无损音频格式&#xff0c;这种音频格式相对于MP3格式占用的存储空间更大。将录音转换成MP3格式后&#xff0c;可以减小文件的大小&#xff0c;方便储存和传输…

cpuset.cpus.effective: no such file or directory (修改 docker cgroup 版本的方法)

要切换使用 v1 版 cgroup&#xff0c;需要做如下配置&#xff1a; vim /etc/default/grubGRUB_CMDLINE_LINUX"systemd.unified_cgroup_hierarchy0"update-grubreboot完美解决

119、仿真-51单片机温湿度光照强度LCD 1602显示报警设计(Proteus仿真+程序+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

HTML input text 常用事件

前言 用于记录开发中常用到的&#xff0c;快捷开发 简单实例 <input type"text" name"noSecretKeyJson" maxlength"200" />常用事件 oninput &#xff08;在用户输入时触发&#xff09;及案例 案例一&#xff1a;限制只允许输入数字…