用户行为数据案例

news2024/11/23 12:26:19

一、环境要求

Hadoop+Hive+Spark+HBase 开发环境。

二、数据描述

本数据集包含了2017-09-11至2017-12-03之间有行为的约5458位随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下具体字段说明如下:

列名称

列中文名称

说明

user_id

用户 ID

整数类型,序列化后的用户

ID

item_id

商品 ID

整数类型,序列化后的商品

ID

category_id

商品类目 ID

整数类型,序列化后的商品所属类目 ID

behavior_type

行为类型

字符串,枚举类型,包括

('pv', 'buy', 'cart', 'fav')

time

时间戳

行为发生的时间戳

用户行为类型共有四种,它们分别是:

行为类型

说明

pv

商品详情页 pv,等价于点击

buy

商品购买

cart

将商品加入购物车

fav

收藏商品

三、功能要求

1.数据准备

(1)在 HDFS 中创建目录/data/userbehavior,并将 UserBehavior.csv 文件传到该目录。

[root@kb135 examdata]# hdfs dfs -mkdir -p /data/userbehavior
[root@kb135 examdata]# hdfs dfs -put ./UserBehavior.csv /data/userbehavior

(2)通过 HDFS 命令查询出文档有多少行数据。

[root@kb135 examdata]# hdfs dfs -cat /data/userbehavior/UserBehavior.csv | wc -l

2.数据清洗

(1)在 Hive 中创建数据库 exam

hive (default)> create database exam;
hive (default)> use exam;


(2)在 exam 数据库中创建外部表 userbehavior,并将 HDFS 数据映射到表中

create external table userbehavior(
    user_id int,
    item_id int,
    category_id int,
    behavior_type string,
    `time` bigint
)
row format delimited fields terminated by ","
stored as textfile location '/data/userbehavior';


(3)在 HBase 中创建命名空间 exam,并在命名空间 exam 创建 userbehavior 表,包
含一个列簇 info

hbase(main):002:0> create_namespace 'exam202010'
hbase(main):003:0> create 'exam202010:userbehavior','info'


(4)在 Hive 中创建外部表 userbehavior_hbase,并映射到 HBase 中,并将数
据加载到 HBase 中

create external table userbehavior_hbase(
    user_id int,
    item_id int,
    category_id int,
    behavior_type string,
    `time` bigint
)
stored by  'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with
    serdeproperties("hbase.columns.mapping"=":key,info:item_id,info:category_id,info:behavior_type,info:time")
tblproperties ("hbase.table.name"="exam202010:userbehavior");
insert into userbehavior_hbase select * from userbehavior;


(5)在 exam 数据库中创建内部分区表 userbehavior_partitioned(按照日期进行分区),
并通过查询 userbehavior 表将时间戳格式化为”年-月-日时:分:秒”格式,将数据插入至 userbehavior_partitioned 表中,例如下图:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert into table userbehavior_partition partition (dt)
select user_id,item_id,category_id,behavior_type,
       from_unixtime(`time`) as `time`,
       from_unixtime(`time`,'yyyy-MM-dd') dt
from userbehavior;

3.用户行为分析

使用 Spark,加载 HDFS 文件系统 UserBehavior.csv 文件,并分别使用 RDD 完成以下分析。

加载文件:

scala> val fileRdd = sc.textFile("hdfs://kb135:9000/data/userbehavior")

(1)统计 uv 值(一共有多少用户访问淘宝)

scala> fileRdd.map(x=>x.split(","))
        .filter(_.length==5)
        .map(x=>x(0))
        .distinct().count
res1: Long = 5458

scala> fileRdd.map(x=>x.split(","))
        .filter(_.length==5)
        .groupBy(x=>x(0)).count
res2: Long = 5458


(2)分别统计浏览行为为点击,收藏,加入购物车,购买的总数量

scala> fileRdd.map(x=>x.split(","))
        .filter(_.length==5)
        .map(x=>(x(3),1))
        .reduceByKey(_+_)
        .collect.foreach(println)
(cart,30888)
(buy,11508)
(pv,503881)
(fav,15017)

scala> fileRdd.map(x=>x.split(","))
        .filter(_.length==5)
        .map(x=>(x(3),1))
        .groupByKey()
        .map(x=>(x._1,x._2.toList.size))
        .collect.foreach(println)
(cart,30888)
(buy,11508)
(pv,503881)
(fav,15017)


4.找出有价值的用户

(1)使用 SparkSQL 统计用户最近购买时间。以 2017-12-03 为当前日期,计算时间范围为一个月,计算用户最近购买时间,时间的区间为 0-30 天,将其分为 5 档,0-6 天,7-12 天,13-18 天,19-24 天,25-30 天分别对应评分 4 到 0

with 
tb as 
(select user_id,
        datediff('2017-12-03',max(dt)) as diff,
        max(dt) 
from userbehavior_partition 
where dt>'2017-11-03' and behavior_type='buy' 
group by user_id),
tb2 as 
(select user_id,
    (case when diff between 0 and 6 then 4 
          when diff between 7 and 12 then 3 
          when diff between 13 and 18 then 2 
          when diff between 19 and 24 then 1 
          when diff between 25 and 30 then 0  
          else null end ) tag 
from tb) 
select * from tb2 where tag=3;


(2)使用 SparkSQL 统计用户的消费频率。以 2017-12-03 为当前日期,计算时间范围为一个月,计算用户的消费次数,用户中消费次数从低到高为 1-161 次,将其分为 5 档,1-32,33-64,65-96,97-128,129-161 分别对应评分 0 到 4

with 
tb as 
(select user_id,
        count(user_id) as num from userbehavior_partition 
where dt between '2017-11-03' and '2017-12-03' and behavior_type='buy' 
group by user_id) 
select 
    user_id,
    (case when num between 129 and 161 then 4 
          when num between 97 and 128 then 3 
          when num between 65 and 96 then 2 
          when num between 33 and 64 then 1 
          when num between 1 and 32 then 0 
          else null end) tag 
from tb;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[MQ]Win平台RocketMQ安装启动

1、下载 官网下载地址:https://rocketmq.apache.org/zh/download 2、解压ZIP包 解压rocketmq-all-x.x.x-bin-release.zip到目录。 比如我解压到了E:\Env\MQ_rocket\rocketmq-all-5.1.4-bin-release 3、配置环境变量 ROCKETMQ_HOME 4、RocketMQ JVM内存配置 这个需要…

k8s 暴露pod

kubenretes中暴露Pod及Service的6种方式 ,分别为port_forward、hostNetwork、hostPort、nodePort、loadBalancer、Ingress。 下面讲下nodeport nodePort Kubernetes中的service默认情况下都是使用的ClusterIP这种类型,这样的service会产生一个Cluster…

2023年全球及中国小分子化药CDMO市场发展概况分析:CDMO市场有望进一步扩大[图]

小分子药物指具有单一明确有效成分、分子量在1000道尔顿以下的有机化合物分子。广义上来说,小分子化药通常是化学合成的。小分子成分可制成易于被机体吸收的片剂或胶囊,活性物质相对较易溶解,被机体吸收经肠壁进入血液。此外,与生…

用对配音软件,轻松制作专业配音~

听说很多做短视频的小伙伴都在找简单好用的配音软件!摆在应用商店里的配音软件成百上千,但却屡试不爽,有的配音员选择少,有的配音效果不自然,不知道大家是否也会有这样的烦恼?今天在这里为大家推荐一个简单…

使用Pytorch实现频谱归一化生成对抗网络(SN-GAN)

自从扩散模型发布以来,GAN的关注度和论文是越来越少了,但是它们里面的一些思路还是值得我们了解和学习。所以本文我们来使用Pytorch 来实现SN-GAN 谱归一化生成对抗网络是一种生成对抗网络,它使用谱归一化技术来稳定鉴别器的训练。谱归一化是…

2023年中国少儿在线英语教育分类、市场规模及发展趋势分析[图]

中国的少儿在线英语教育行业,主要是指面向3-16岁的学前阶段、幼儿园阶段、小学阶段、初中阶段的学生群体,由私立教育培训机构推出英语培训课程产品的一个英语教育培训市场的细分行业。 少儿在线英语教育分类 资料来源:共研产业咨询&#xff…

TDengine 资深研发整理:基于 SpringBoot 多语言实现 API 返回消息国际化

作为一款在 Java 开发社区中广受欢迎的技术框架,SpringBoot 在开发者和企业的具体实践中应用广泛。具体来说,它是一个用于构建基于 Java 的 Web 应用程序和微服务的框架,通过简化开发流程、提供约定大于配置的原则以及集成大量常用库和组件&a…

5.自定义地形及影像

愿你出走半生,归来仍是少年! 通过Cesium For Unity的引导案例我们在前面几张搭建尝试了通过其自带的资源搭建三维场景。这篇文章,讲述如何通过我们自己的底图(Dom)和地形(Terrain)进行场景构建。 若是无高程和影像数据&#xff0c…

2023年全球及中国抗体/蛋白/非核酸疫苗CDMO市场分析:生物药CDMO规模同步增长[图]

对于生物大分子药物研发生产一体化的CDMO服务包括:临床前阶段,对备选药物进行体外研究,评估安全性和目标疾病的生物活性,提供细胞系工程及开发、检测配方及工艺开发、产品分析表达、cGMP 细胞库及细胞系表达等服务;临床…

Elasticsearch:什么是余弦相似度?

余弦相似度是数据科学、文本分析和机器学习领域的基本概念。 如果你想知道什么是余弦相似度或者它如何在现实世界的应用程序中使用,那么你来对地方了。 本指南旨在让你深入了解相似性是什么、其数学基础、优点及其在不同领域的各种应用。读完本指南后,你…

ESP32外部中断原理详解及代码示例

一、为什么要使用中断 ESP32是一个集成了Wi-Fi、蓝牙并支持低功耗的微控制器。它有许多GPIO(通用输入/输出)引脚,可以用于连接各种外部设备,如传感器、按钮、开关等。 在使用这些外部设备时,我们经常需要知道它们何时…

服务器数据恢复-RAID5常见故障的数据恢复方案

raid5阵列常见故障: 1、服务器硬件故障或者RAID阵列卡故障; 2、服务器意外断电导致的磁盘阵列故障; 3、服务器RAID阵列阵列磁盘出现物理故障,如:电路板坏、磁头损坏、盘面划伤、坏扇区、固件坏等; 4、误操作…

第二证券:10家央企集体行动!9月至今逾百家公司回购增持

10月16日,10家央企连续公告,掀起了新一轮回购增持潮。其间,5家上市公司发布新增增持方案,约5亿~16.3亿元;2家上市公司发布增持打开,估计约23.43亿元;1家上市公司新增回购方案&#x…

3dmax中的 (Corona 9)cr渲染器怎么渲染?cr渲染器使用教程

Corona 9渲染器在3ds Max和Cinema 4D中应用广泛,是一款高效且功能强大的渲染器,得到了许多用户的好评。 Corona 9有以下几个主要的特点: 出色的渲染速度:Corona 9被证明是一个快速且高效的渲染引擎,它能够在保证高质…

ps制作透明公章 公章变透明 ps自动化批量抠图制作透明公章

ps制作透明公章 公章变透明 1、抠图制作透明公章2、ps自动化批量抠图制作透明公章 1、抠图制作透明公章 2、ps自动化批量抠图制作透明公章 点击窗口-动作 命名完成后 点击记录 点击记录后 动作处于录制状态 我们下面把需要的图片处理操作在ps界面点击一遍即可 就会被动作自动…

16 个 Linux 最佳 Markdown 编辑器(2)

对于初学者来说,Markdown 是一个用 Perl 编写的简单且轻量级的工具,它使用户能够编写纯文本格式并将其转换为有效的 HTML(或 XHTML)。它是一种易于阅读、易于编写的纯文本语言,也是一种用于文本到 HTML 转换的软件工具…

诚迈科技董事长王继平出席中国(太原)人工智能大会并发表演讲

10月14日—15日,2023中国(太原)人工智能大会在山西省太原市举办。诚迈科技在大会上全面展示了其在人工智能领域的一系列创新技术与解决方案,诚迈科技董事长、统信软件董事长王继平受邀出席产业数字化转型论坛并发表主题演讲&#…

传输机房的基本结构

文章目录 传输机房主要结构 传输机房主要结构 ODF (Optical Distribution Frame),光纤配线架,是专为光纤通信机房设计的光纤配线设备,具有光缆固定和保护功能、光缆终接功能、调线功能,完成从设备间纤缆连…

CISP与NISP网络安全证书中渗透测试都需要了解什么?

网络信息安全领域中的渗透测试专家是未来薪水增长潜力较好的岗位之一。那渗透测试都需要了解那些知识领域呢? 第一阶段(渗透测试初级):kali linux 安全配置和优化、安全测试基本工具、burpsuite、Burp 进行 Web 漏洞扫描与分析、…

如果后端返回了十万条数据要你插入到页面中,你会怎么处理?

当面临需要插入大量数据到页面的情况时,下面是一些建议的处理方法: 分页加载:考虑将数据分成多个页面,每次只加载当前页面所需的数据。这样可以减少一次性加载大量数据对页面性能的影响,并提供更好的用户体验。 虚拟滚…