[2.0.0]用户session分析模块之需求分析与数据设计

参考

电商用户行为分析大数据平台 - 中华石杉

场景

场景一

教师节快到了,你特别想知道18至25岁单身文艺女神的购物习惯:她喜欢什么样的礼物?最近想买什么礼物又暂时还没有购买(就是把商品放入了购物车,却没有下单)?你乐了,作为某知名电商大数据平台的资深架狗师,这种小问题简直就是一块蛋糕啊!

场景二

“用户画像”,“用户图像” 等高大上词语愕然并发出现在大数据开发工程师的招聘技能条列上。话说Snail 最近准备找工作,深厚的spark技术功底(瞎说的),苦于没有真实的大数据项目经验,想自我构造一下。于是乎,昨晚在IMF技术群里问了一个问题:
“standalone 部署模式、12台 8核16G的spark集群, 能轻松的处理业务复杂度类似 ‘用户访问sesion分析 模块类型的作业,’活跃用户量在10万级别,日均数据量在100万级别的电商网站吗?”
一哥们,立马回应了:“给你出个.你们公司的用户图像怎么做的“,”现在来我们公司面试一定问的问题” “能用大数据的角度,谈电商的用户图像,这个是我们公司对大数据架构师的基本要求”。

IT行业有个奇妙的现象?不少猿友喜欢搬出一些像“用户画像”之类的所谓的专业术语,,,越写越多,此处省略800字。用户画像无非就是从多个角度,不同层次来分析考察用户的行为(把用户看作一头大象,从不同的角度来分析描述了解ta,进而从ta身上挖宝)。对于电商平台来说,了解用户最好的手段莫过于分析ta的会话信息(session)了!
好的,废话不多说了,用户session分析模块的需求是什么呢?

需求分析

  • 0、按条件筛选session
    含义:比如统计:‘昨天’内 ‘18至25岁’ ‘单身’ ‘文艺’ ‘女神’ ,这里的每个词语都是筛选条件。我们计是针对特定人群,而不非泛泛地瞎统计。
    意义:获取特定人群的session数据,为后续各种分析做准备。

  • 1、统计筛选session的访问时长占比
    含义:统计出符合条件的session中,访问时长在1s~3s、4s~6s、7s~9s、10s~30s、30s~60s、1m~3m、3m~10m、10m~30m、30m以上各个范围内的session占比;访问步长在1~3、4~6、7~9、10~30、30~60、60以上各个范围内的session占比。
    访问时长:一个用户从登录网站到退出网站历时多长,也就是session的开始与结束时间。
    访问步长:用户在一个session执行期间内,依次点击过多少个页面(通过计算发生了多少搜索、点击、下单与支付行为来计算)。
    意义:让决策人员从全局的角度看到,符合条件的用户群体使用公司产品的一些习惯。比如大多数人,到底是会在产品中停留多长时间,会在一次使用产品的过程中访问多少个页面。

  • 2、按时间比例随机抽取1000个session
    含义:符合条件的session数据量一般很大,假设有100万条,你不可能对这100万条记录都进行分析吧。好,从其中抓取一小部分来分析即可,怎么抓取(采样)?为了保证取样的公平性,这里采用 按时间比例随机抽取,且以小时为基本统计单位 - 什么意思呢?看一个场景:
    总体session个数 :100万
    统计日期:1天内-昨天
    昨天20:00至21:00的session数量为20万
    按时间比例,在于保证样本公平的分布在每天的每个时间段,访问量多的时间段抽取的样本数量也多。上述场景中在 20:00至21:00之间应该随机抽取多少样本呢?
    samples(20-21) = (20万/100万)* 1000 = 200条
    意义:为后续详细分析样本session的点击流行为提供数据:用户依次点击了哪些商品,搜索了哪些关键字,把哪些商品加入了购物车等等。

  • 3、获取点击、下单和支付数量排名前10的品类
    含义:”知己“,分析出女神最想要的10类商品,知道公司目前最受她欢迎的产品是什么。所谓的最想要就是她最关注的商品:点击次数、下单次数与支付次数最多的商品。
    意义:Of great importance ! 让公司清晰地了解到不同层次、不同类型的用户的心理和喜好。

  • 4、对于排名前10的品类,分别获取其点击次数排名前10的session
    意义:”知彼”,获取最关注公司最受欢迎产品的10个session信息。
    含义:让公司清晰地了解到,最受欢迎的各个品类最感兴趣最典型的用户的session的行为。

数据设计

数据设计,往往包含两个环节。
第一、数据调研环节看到的项目基于的基础数据,是否要针对其开发一些Hive ETL,对数据进行进一步的处理和转换,从而让我们能够更加方便的和快速的去计算和执行spark作业;
第二个,就是要设计spark作业要保存结果数据的业务表的结构,从而让J2EE平台可以使用业务表中的数据,来为使用者展示任务执行结果。

hive相关表

user_visit_action表 存放网站或app每天的点击流的数据。用户对网站/app每点击一下,就会代表在这个表里面的一条数据。

date:日期,代表这个用户点击行为是在哪一天发生的
user_id:代表这个点击行为是哪一个用户执行的
session_id :唯一标识了某个用户的一个访问session
page_id :页面的id
action_time :这个点击行为发生的时间点
search_keyword :用户执行的某个搜索行为所搜索的关键词
click_category_id :用户点击的商品品类id:吉他、钢琴等
click_product_id :用户点击的具体商品id
order_category_ids :用户下单的商品品类-对应购物车中的商品种类
order_product_ids :某次下单,具体对哪些商品下的订单
pay_category_ids :对某个订单,或者某几个订单,进行了一次支付的行为,对应了哪些品类
pay_product_ids:支付行为下,对应的哪些具体的商品
city:用户所在的城市

user_info表 存储用户的基础信息

user_id:其实就是每一个用户的唯一标识,通常是自增长的Long类型,BigInt类型
username:是每个用户的登录名
name:每个用户自己的昵称、或者是真实姓名
age:用户的年龄
professional:用户的职业
city:用户所在的城市
mysql相关表

task表 用来存储J2EE平台插入的任务信息。公司业务人员通过J2EE前台输入请求参数后,提交了一个spark查询作业。J2EE后台接受请求参数并将其保存到数据库,然后通过Runtime等Java API调用包含spark-submit的shell脚本执行相关spark应用程序。

CREATE TABLE `task` (
  `task_id` int(11) NOT NULL AUTO_INCREMENT,
  `task_name` varchar(255) DEFAULT NULL,
  `create_time` varchar(255) DEFAULT NULL,
  `start_time` varchar(255) DEFAULT NULL,
  `finish_time` varchar(255) DEFAULT NULL,
  `task_type` varchar(255) DEFAULT NULL,
  `task_status` varchar(255) DEFAULT NULL,
  `task_param` text,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

session_agg_statistic表 存储第一个功能点session聚合统计的结果
存储各个长度的session访问时间段占总session数的比例。

CREATE TABLE `session_aggr_stat` (
  `task_id` int(11) NOT NULL,
  `session_count` int(11) DEFAULT NULL,
  `1s_3s` double DEFAULT NULL,
  `4s_6s` double DEFAULT NULL,
  `7s_9s` double DEFAULT NULL,
  `10s_30s` double DEFAULT NULL,
  `30s_60s` double DEFAULT NULL,
  `1m_3m` double DEFAULT NULL,
  `3m_10m` double DEFAULT NULL,
  `10m_30m` double DEFAULT NULL,
  `30m` double DEFAULT NULL,
  `1_3` double DEFAULT NULL,
  `4_6` double DEFAULT NULL,
  `7_9` double DEFAULT NULL,
  `10_30` double DEFAULT NULL,
  `30_60` double DEFAULT NULL,
  `60` double DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

session_random_extract表 存储第二个功能点:按时间比例随机抽取功能抽取出来的1000个session

CREATE TABLE `session_random_extract` (
  `task_id` int(11) NOT NULL,
  `session_id` varchar(255) DEFAULT NULL,
  `start_time` varchar(50) DEFAULT NULL,
  `end_time` varchar(50) DEFAULT NULL,
  `search_keywords` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

top10_category表 存储按点击、下单和支付排序出来的top10品类数据

CREATE TABLE `top10_category` (
  `task_id` int(11) NOT NULL,
  `category_id` int(11) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL,
  `order_count` int(11) DEFAULT NULL,
  `pay_count` int(11) DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

top10_category_session表 存储top10每个品类的点击top10的session

CREATE TABLE `top10_category_session` (
  `task_id` int(11) NO NULL,
  `category_id` int(11) DEFAULT NULL,
  `session_id` varchar(255) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

session_detail表 存储随机抽取出来的1000个session的明细数据、top10品类的session的明细数据

CREATE TABLE `session_detail` (
  `task_id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `session_id` varchar(255) DEFAULT NULL,
  `page_id` int(11) DEFAULT NULL,
  `action_time` varchar(255) DEFAULT NULL,
  `search_keyword` varchar(255) DEFAULT NULL,
  `click_category_id` int(11) DEFAULT NULL,
  `click_product_id` int(11) DEFAULT NULL,
  `order_category_ids` varchar(255) DEFAULT NULL,
  `order_product_ids` varchar(255) DEFAULT NULL,
  `pay_category_ids` varchar(255) DEFAULT NULL,
  `pay_product_ids` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

总结

666,碎觉的节奏

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值