Hive 常用指标分析

常用指标分析

  • 用户留存率
  • 路径分析
  • 7日品牌复购率
  • 7天内连续三天登录
  • 每分钟在线人数

1. 用户留存率

在使用 Hive 统计用户留存率时,我们通常会涉及到两个主要日期:用户注册日期和用户在后续某天的活跃日期。留存率通常是指用户在注册后的某一天仍然活跃的百分比。

假设我们有一个名为 user_activity 的表,这个表包含用户 ID、注册日期和活跃日期。表的结构如下:

CREATE TABLE user_activity (user_id STRING,registration_date DATE,active_date DATE
);

我们将分步骤计算用户留存率。假设我们要计算 D+1 留存率(即用户在注册后的第二天是否仍然活跃)。

步骤一:计算每个用户的注册日期

首先,我们获取每个用户的最早注册日期。

CREATE TABLE user_registration_date AS
SELECT user_id, MIN(registration_date) AS registration_date
FROM user_activity
GROUP BY user_id;

步骤二:计算指定日期的活跃用户数

接着,我们找出在注册后第二天活跃的用户。我们可以使用 Hive 的日期函数来进行日期加减。

CREATE TABLE d1_retained_users AS
SELECT u.user_id, u.registration_date, a.active_date
FROM user_registration_date u
JOIN user_activity a 
ON u.user_id = a.user_id
WHERE a.active_date = DATE_ADD(u.registration_date, 1);

步骤三:计算留存率

现在,我们可以计算 D+1 留存率,即在注册后第二天仍然活跃的用户占总注册用户的比例。

SELECT COUNT(DISTINCT d1.user_id) AS retained_users,COUNT(DISTINCT ur.user_id) AS total_users,(COUNT(DISTINCT d1.user_id) * 100.0 / COUNT(DISTINCT ur.user_id)) AS retention_rate
FROM user_registration_date ur
LEFT JOIN d1_retained_users d1 
ON ur.user_id = d1.user_id;

步骤四:计算其他天数的留存率

我们可以使用类似的方法计算其他天数(例如 D+7、D+30)的留存率,只需调整 DATE_ADD 的天数即可。例如,计算 D+7 留存率:

CREATE TABLE d7_retained_users AS
SELECT u.user_id, u.registration_date, a.active_date
FROM user_registration_date u
JOIN user_activity a 
ON u.user_id = a.user_id
WHERE a.active_date = DATE_ADD(u.registration_date, 7);

然后计算 D+7 留存率:

SELECT COUNT(DISTINCT d7.user_id) AS retained_users,COUNT(DISTINCT ur.user_id) AS total_users,(COUNT(DISTINCT d7.user_id) * 100.0 / COUNT(DISTINCT ur.user_id)) AS retention_rate
FROM user_registration_date ur
LEFT JOIN d7_retained_users d7 
ON ur.user_id = d7.user_id;

2. 路径分析

路径分析通常用于分析用户在网站或应用中的行为路径,以了解他们如何到达特定目标或退出。在 Hive 中,可以使用窗口函数和自联接来分析用户路径。假设我们有一个用户行为表 user_activity,包含以下字段:

CREATE TABLE user_activity (user_id STRING,activity_time TIMESTAMP,page STRING
);

步骤一:为每个用户的行为排序

首先,为每个用户的行为按照时间排序,以便我们能够按照用户访问的顺序来分析路径。

CREATE TABLE user_activity_sorted AS
SELECTuser_id,activity_time,page,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY activity_time) AS rn
FROMuser_activity;

步骤二:创建自联接表来获取用户的下一个页面

然后,我们通过自联接将每个行为与下一个行为进行配对,以便分析用户从一个页面到另一个页面的路径。

CREATE TABLE user_paths AS
SELECTa.user_id,a.page AS current_page,b.page AS next_page,a.activity_time AS current_time,b.activity_time AS next_time
FROMuser_activity_sorted a
LEFT JOINuser_activity_sorted b
ONa.user_id = b.user_idAND a.rn = b.rn - 1;

步骤三:统计各个路径的频次

接下来,我们统计每条路径出现的次数,以了解用户最常走的路径。

CREATE TABLE path_counts AS
SELECTcurrent_page,next_page,COUNT(*) AS path_count
FROMuser_paths
GROUP BYcurrent_page,next_page
ORDER BYpath_count DESC;

步骤四:分析特定路径

如果我们想分析特定页面路径的细节,比如从首页(home)到购买页面(purchase)的路径,我们可以筛选出相关数据。

SELECTuser_id,current_page,next_page,current_time,next_time
FROMuser_paths
WHEREcurrent_page = 'home'AND next_page = 'purchase';

进一步分析

我们还可以进一步细化路径分析,比如计算用户在每个页面的停留时间,或者分析特定用户群体的路径行为。

计算停留时间
CREATE TABLE user_stay_time AS
SELECTuser_id,current_page,next_page,next_time - current_time AS stay_duration
FROMuser_paths
WHEREnext_time IS NOT NULL;
分析特定用户群体

假设我们有一个用户表 user_info 包含用户的详细信息(如用户类别),我们可以结合 user_paths 进行分析。

CREATE TABLE user_info (user_id STRING,user_category STRING
);CREATE TABLE category_paths AS
SELECTu.user_category,p.current_page,p.next_page,COUNT(*) AS path_count
FROMuser_paths p
JOINuser_info u
ONp.user_id = u.user_id
GROUP BYu.user_category,p.current_page,p.next_page
ORDER BYpath_count DESC;

3. 7日品牌复购率

在 Hive 中计算最近7天的品牌复购率需要几个步骤,包括识别首次购买日期、检查复购行为,并计算复购率。假设我们有一个包含购买记录的表 purchase_log,结构如下:

CREATE TABLE purchase_log (user_id STRING,purchase_date DATE,brand STRING
);

步骤一:定义时间窗口

首先,我们定义一个时间窗口来选择最近7天的记录。假设当前日期为 2024-05-18

步骤二:识别首次购买

接下来,我们找到每个用户对每个品牌在最近7天的首次购买日期。

CREATE TABLE first_purchase_last_7_days AS
SELECTuser_id,brand,MIN(purchase_date) AS first_purchase_date
FROMpurchase_log
WHEREpurchase_date BETWEEN DATE_SUB('2024-05-18', 7) AND '2024-05-18'
GROUP BYuser_id, brand;

步骤三:识别复购行为

然后,我们找出这些用户在首次购买后7天内再次购买同一品牌的记录。

CREATE TABLE repurchase_last_7_days AS
SELECTfp.user_id,fp.brand
FROMfirst_purchase_last_7_days fp
JOINpurchase_log pl
ONfp.user_id = pl.user_idAND fp.brand = pl.brandAND pl.purchase_date > fp.first_purchase_dateAND pl.purchase_date <= DATE_ADD(fp.first_purchase_date, 7)
WHEREfp.first_purchase_date BETWEEN DATE_SUB('2024-05-18', 7) AND '2024-05-18'
GROUP BYfp.user_id, fp.brand;

步骤四:计算复购率

最后,我们计算每个品牌在最近7天内的复购率。

-- 计算最近7天首次购买用户数量
CREATE TABLE first_purchase_count_last_7_days AS
SELECTbrand,COUNT(DISTINCT user_id) AS first_purchase_users
FROMfirst_purchase_last_7_dayss
GROUP BYbrand;-- 计算最近7天复购用户数量
CREATE TABLE repurchase_count_last_7_days AS
SELECTbrand,COUNT(DISTINCT user_id) AS repurchase_users
FROMrepurchase_last_7_days
GROUP BYbrand;-- 计算最近7天的复购率
SELECTf.brand,f.first_purchase_users,COALESCE(r.repurchase_users, 0) AS repurchase_users,(COALESCE(r.repurchase_users, 0) * 100.0 / f.first_purchase_users) AS repurchase_rate
FROMfirst_purchase_count_last_7_days f
LEFT JOINrepurchase_count_last_7_days r
ONf.brand = r.brand;

4. 7天内连续3天登录

在 Hive 中统计用户在7天内连续3天登录的情况,需要分几步来完成。首先,我们需要有一个包含用户登录记录的表,假设该表名为 login_log,结构如下:

CREATE TABLE login_log (user_id STRING,login_date DATE
);

步骤一:定义时间窗口

假设当前日期为 2024-05-18,我们会限定分析时间窗口为 2024-05-122024-05-18 这7天内的登录情况。

步骤二:获取7天内的登录记录

首先,我们获取在最近7天内的用户登录记录。

CREATE TABLE recent_logins AS
SELECTuser_id,login_date
FROMlogin_log
WHERElogin_date BETWEEN DATE_SUB('2024-05-18', 6) AND '2024-05-18';

步骤三:按用户和日期排序并添加行号

为了识别连续登录的天数,我们按用户和登录日期排序,并使用窗口函数为每个用户的每次登录添加一个行号。

CREATE TABLE user_logins_with_rn AS
SELECTuser_id,login_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn
FROMrecent_logins;

步骤四:自连接查找连续登录天数

接下来,我们将用户的登录记录与自身连接,通过行号差异来识别连续登录天数。

CREATE TABLE consecutive_logins AS
SELECTa.user_id,a.login_date AS start_date,b.login_date AS end_date,DATEDIFF(b.login_date, a.login_date) AS days_diff
FROMuser_logins_with_rn a
JOINuser_logins_with_rn b
ONa.user_id = b.user_idAND b.rn = a.rn + 2
WHEREDATEDIFF(b.login_date, a.login_date) = 2;

步骤五:筛选连续3天登录的用户

通过前面的步骤,我们找到了在7天内连续3天登录的用户。

SELECTuser_id,start_date,end_date
FROMconsecutive_logins
WHEREdays_diff = 2;

5. 每分钟在线人数

统计每分钟同时在线人数可以通过在登录日志表中记录每个用户的登录和退出时间,并计算每分钟的同时在线人数来实现。假设我们有一个登录日志表 login_log,包含用户ID(user_id)和登录时间(login_time)字段。

首先,我们需要对登录日志进行预处理,将每个用户的登录和退出时间按分钟进行划分。然后,根据每个时间段内的登录和退出情况,计算同时在线人数。

以下是一种可能的方法:

步骤一:划分登录和退出时间段

使用 Hive 的时间函数将登录和退出时间按分钟划分。

CREATE TABLE login_minutes AS
SELECTuser_id,from_unixtime(unix_timestamp(login_time, 'yyyy-MM-dd HH:mm'), 'yyyy-MM-dd HH:mm') AS login_minute,1 AS login_count
FROMlogin_log;CREATE TABLE logout_minutes AS
SELECTuser_id,from_unixtime(unix_timestamp(logout_time, 'yyyy-MM-dd HH:mm'), 'yyyy-MM-dd HH:mm') AS logout_minute,1 AS logout_count
FROMlogout_log;

假设 logout_log 是一个包含用户ID(user_id)和退出时间(logout_time)的表,包含了用户的退出记录。

步骤二:计算每分钟的在线人数

然后,我们将登录和退出时间段合并,并根据每分钟的登录和退出情况计算同时在线人数。

CREATE TABLE online_users AS
SELECTlogin_minute AS time_minute,SUM(login_count) - SUM(logout_count) AS online_users_count
FROM(SELECT * FROM login_minutes UNION ALL SELECT * FROM logout_minutes) t
GROUP BYtime_minute;

这个查询将返回每分钟的同时在线人数,其中 time_minute 是时间戳,online_users_count 是该时间段内的同时在线人数。

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

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

相关文章

重学java 45.多线程 下 总结 定时器_Timer

人开始反向思考 —— 24.5.26 定时器_Timer 1.概述:定时器 2.构造: Timer() 3.方法: void schedule(TimerTask task, Date firstTime, long period) task:抽象类,是Runnable的实现类 firstTime:从什么时间开始执行 period:每隔多长时间执行一次…

内蒙古包头师范学院体育学院车志宏教授

女&#xff0c;汉族&#xff0c;体育学院院长&#xff0c;承担学校体育学、篮球等课程教学工作&#xff0c;曾住持自治区3项科研项目&#xff0c;发表论文5篇&#xff0c;获奖2篇。 1992年天津体育学院体育教育专业&#xff0c;获学士学位&#xff1b; 1998年天津外国语大学体…

fpga问题整理

1、quartus联合modelsim仿真 无波形 问题&#xff1a; modelsim仿真无波形&#xff0c;打开transcript可以看到警告。 警告&#xff1a; # ** Warning: (vlog-2083) f:/program files/altera/ 13.1/quartus/ eda/sim_lib/ altera_lnsim.sv(22728): Carriage return (0x0D) is…

MySQL之Schema与数据类型优化(五)

Schema与数据类型优化 特殊类型数据 某些类型的数据并不直接与内置类型一致。低于秒级精度的时间戳就是一个例子。另外一个例子是一个IPv4地址。人们经常使用VARCHAR(15)列存储IP地址。然而&#xff0c;它们实际上是32位无符号整数。不是字符串。用小数点将地址分成四段的表示…

用AI比赛助手降维打击数学建模,比赛过程详细介绍,这保研不就稳了吗

数学建模是个小众的赛道&#xff0c;可能很多大学生不知道&#xff0c;简单来说&#xff1a;他能薅学分、保研加分、毕业好找工作(简历上写一辈子)&#xff0c;尤其是基于GPT-4o模型&#xff0c;简直对他们是降维打击。 数学建模每年的比赛非常多&#xff0c;像国赛、美赛、深…

asrpro softspi SD卡读写

采样 50M 1M&#xff1b;采样时间足够长&#xff0c;采样频率1M 避免信息遗漏 引脚 cs pa2 mosi pa3 sck pa5 miso pa6 vcc ->5v gnd ->gnd ARDUINO SD库与移植&#xff08;原本是打算移值tw ch32v103的sd库的&#xff0c;但没有对比&#xff0c;只能选择arduino ; …

Keras深度学习框架第二十六讲:使用KerasNLP上传模型

1、上传模型的概念 在机器学习和深度学习领域&#xff0c;"上传模型"通常指的是将训练好的模型保存到某个位置&#xff0c;以便后续使用或分享&#xff0c;而不是直接通过KerasNLP库进行上传操作。但在这里&#xff0c;我们可以理解为保存和分享模型。 当程序员使用…

Java进阶学习笔记22——泛型方法、通配符和上下限

泛型方法&#xff1a; package cn.ensource.d11_generics_method;public class Test {public static void main(String[] args) {// 泛型方法String res test("Java");System.out.println(res);Dog dog1 test(new Dog());System.out.println(dog1);}// 泛型方法pub…

手机上制作证件照

最近由于需要给老姐弄一组证件照&#xff0c;找了一通手机上的软件&#xff0c;找到一款性价比较高的&#xff0c;详细流程记录下来。vx小程序上搜索"泰世茂证件照"&#xff0c;打开首页如下图所示∶ 单击"开始制作" &#xff0c;选择一个证件照类别&#…

Paddle 傅里叶变换基础及领域应用

Paddle 傅里叶变换基础及领域应用 1. 傅里叶变换基础 1.1 傅里叶变换简介 傅里叶变换是一种重要的信号处理技术&#xff0c;它可以将一个信号从时域转换到频域。在频域中&#xff0c;信号的频率特性更加明显&#xff0c;有利于分析和处理。傅里叶变换的基本思想是将一个信号…

基于Rsoft的Fullwave仿真模块进行双芯波导能量耦合与波分复用

Rsoft中的Fullwave仿真模块可以更精确的仿真微小结构&#xff0c;按照建立模型&#xff0c;设置参数&#xff0c;监测能量&#xff0c;优化结构的思路对其进行仿真。图1是在Fullwave模块中建立的双芯波导仿真模型。在模型中设置好折射率、光源、光路、监测器等便可以进行仿真。…

Ubtuntu下安装配置SSH详解

在Ubuntu下安装SSH并配置远程连接&#xff0c;你可以遵循以下步骤&#xff1a; 安装OpenSSH Serve sudo apt update 安装OpenSSH Server&#xff1a; 使用以下命令安装OpenSSH服务器软件包&#xff1a; sudo apt install openssh-server 安装过程可能会要求你确认操作&#x…

Spring STOMP-STOMP客户端

Spring提供了一个基于WebSocket的STOMP客户端和一个基于TCP的STOMP客户端。 首先&#xff0c;你可以创建并配置WebSocketStompClient&#xff0c;如下所示&#xff1a; WebSocketClient webSocketClient new StandardWebSocketClient(); WebSocketStompClient stompClient …

【竞技宝】英超:滕哈格命真硬!足总杯夺冠获欧联资格

足总杯决赛结束,曼联爆冷2比1击败联赛冠军曼城夺冠,滕哈格再一次用顶级理解带队拿到杯赛冠军。赛前曼彻斯特当地有媒体爆料,曼联管理层已经决定要在足总杯决赛之后解雇滕哈格,这个消息让不少球迷都很担心滕哈格的状态。但是荷兰主帅凭借强大的内心,带领球队击败了不可一世的曼城…

如何在Java中创建不可变对象?

在Java中创建不可变对象是一个常见的编程实践&#xff0c;它有助于提高代码的可读性、可维护性和安全性。以下我将从技术难点、面试官关注点、回答吸引力和代码举例四个方面来详细阐述如何在Java中创建不可变对象。 一、技术难点 在Java中创建不可变对象时&#xff0c;主要的…

买房送户口!多城加入“抢人大战”

业内人士认为&#xff0c;近期&#xff0c;多地推出的购房落户政策已区别于此前的人才落户政策&#xff0c;更聚焦于住房消费&#xff0c;降低了落户门槛&#xff0c;体现了各地对导入人口的重视&#xff0c;有利于人才流动&#xff0c;推动新型城镇化建设。 千万人口城市“后…

民宿推荐系统-手把手调试搭建

民宿推荐系统-手把手调试搭建 民宿推荐系统-手把手调试搭建

echarts配置记录,一些已经废弃的写法

1、normal&#xff0c;4.0以后无需将样式写在normal中了 改前&#xff1a; 改后&#xff1a; DEPRECATED: normal hierarchy in labelLine has been removed since 4.0. All style properties are configured in labelLine directly now. 2、axisLabel中的文字样式无需使用te…

文本处理工具grep及sed

文章目录 一、grep文本处理工具二、sed文本处理工具基本用法sed脚本格式搜索替代 一、grep文本处理工具 选项含义-color对匹配到的文本着色显示-m 次数匹配到规定的次数后停止-v显示不被命令匹配到的行,即取反-i忽略字符大小写-n显示匹配的行号-c统计匹配的行数-o仅显示匹配到…