r - 在R中的指定日期之后获取剩余用户的百分比
问题描述
我正在使用用户生成的数据集(比如应用程序用户数据或服务),并根据用户行为特征(即使用频率)对其进行聚类。我想看看有多少或多少百分比的用户在特定日期之后停止使用该应用程序/服务,以及他们来自哪个集群。
这是一个可重复的示例,我希望它是合适的:-
library(Pareto)
library(uuid)
library(ggplot2)
library(tidyverse)
library(data.table)
set.seed(1)
n_users <- 100
n_rows <- 3650
relative_probs <- rPareto(n = n_users, t = 1, alpha = 0.3, truncation = 500)
unique_ids <- UUIDgenerate(n = n_users)
id_sample <- sample(unique_ids, size = n_rows, prob = relative_probs, replace = TRUE)
Date<-seq(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "1 day")
Date<-sample(Date,size = n_rows,replace = T)
df<-data.frame(id_sample,Date)
df
df<-df%>%arrange(Date)
userData<-df%>%
group_by(id_sample)%>%
summarise(Count=n())
scaledData<-scale(userData[,2])
scaledData
set.seed(15)
clust<-kmeans(scaledData, centers=5, nstart = 15)
userData$Cluster<-clust$cluster
setDT(userData)[Cluster==1, ClusterName:="Cluster 1"]
userData[Cluster==2, ClusterName:="Cluster 2"]
userData[Cluster==3, ClusterName:="Cluster 3"]
userData[Cluster==4, ClusterName:="Cluster 4"]
userData[Cluster==5, ClusterName:="Cluster 5"]
user_vars<-userData%>%select(id_sample,ClusterName)
df<-merge(df,user_vars,by="id_sample")
df$Month<-lubridate::month(df$Date)
df%>%
group_by(Month)%>%
summarise(N_Users=n_distinct(id_sample))
我想知道是否有dplyr
解决方案或类似的东西,我可以将日期设置为阈值,以查看在指定日期之前的数据中有多少用户(作为百分比或计数),出现在指定日期之后和集群中等级。例如,在指定日期之前捕获所有唯一用户 ID 的解决方案,结果显示在指定日期之后这些用户中有多少百分比仍留在数据中(按集群级别分组)。
解决方案
library(lubridate)
how_many=function(df, cluster, my_date) {
df1=df%>%filter(ClusterName==cluster)
before=filter(df1, Date<my_date)
after=filter(df1,Date>my_date)
count=0
for (i in unique(before$id_sample)) {
if (i %in% after$id_sample) {
count=count+1
}
}
return(c(count, count/n_distinct(before$id_sample)))
}
此函数获取数据框 (df)、集群名称以及您希望查看该日期之前的唯一用户的比例/数量的日期,该日期之后至少出现一次。
how_many(df, "Cluster 4", make_date(2015, 05, 19))
39.0000000 0.9069767
推荐阅读
- python-3.x - 使用 cnn pytorch 可变长度的文本
- excel - 用于检查重复的 Excel VBA 循环不起作用...有时
- ios - 如何隐藏 .numberPad 键盘上的字母?
- arrays - 快速比较两个数组的内容
- laravel - 强制路由到 HTTPS
- javascript - 如何自定义 angular-6-datatable 组件的 mfBootstrapPaginator
- php - 使用 AJAX 从数据库中获取值以根据另一个标签选择的选定选项选择输入
- php - 将数组插入 SQL 数据库
- jquery - jQuery事件在Windows10下的Firefox中不起作用
- php - 如何允许访问laravel中的子文件夹?