【问题标题】:Get percentage of remaining users after a specified date in R在R中的指定日期之后获取剩余用户的百分比
【发布时间】:2021-05-31 23:40:30
【问题描述】:

我正在使用用户生成的数据集(比如应用用户数据或服务),并根据用户行为特征(即使用频率)对其进行聚类。我想看看有多少或有多少百分比的用户在特定日期之后停止使用该应用/服务,以及他们来自哪个集群。

这是一个可重复的例子,我希望它是合适的:-

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,结果显示这些用户中有多少百分比在指定日期之后仍留在数据中(按集群级别分组)。

【问题讨论】:

    标签: r dplyr data.table grouping cluster-analysis


    【解决方案1】:
    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
    

    【讨论】:

    • 这是一个很好的答案。非常感谢!
    猜你喜欢
    • 2015-03-22
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2021-07-06
    • 2022-01-08
    相关资源
    最近更新 更多