Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建合成用户数据;生成用户标识符变量时出现的问题_R_String_Dataframe_Events_Random - Fatal编程技术网

在R中创建合成用户数据;生成用户标识符变量时出现的问题

在R中创建合成用户数据;生成用户标识符变量时出现的问题,r,string,dataframe,events,random,R,String,Dataframe,Events,Random,我正在尝试生成综合用户事件日志数据以供演示。这将是非常基本的功能(总共大约4个变量)。以下是我到目前为止的情况:- require(wakefield)#for generating the Status variable require(dplyr) require(stringi) set.seed(1) #data<-data.frame() eventDate<-seq(as.Date("2015-01-01"), as.Date("2015

我正在尝试生成综合用户事件日志数据以供演示。这将是非常基本的功能(总共大约4个变量)。以下是我到目前为止的情况:-

require(wakefield)#for generating the Status variable
require(dplyr)
require(stringi)


set.seed(1)
#data<-data.frame()
eventDate<-seq(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "1 day")
eventDate<-sample(rep(eventDate,each=1000),replace = T)

u <- runif(length(eventDate), 0, 60*60*12) # "noise" to add or subtract from some timepoint
eventDateTime<-as.POSIXlt(u, origin = paste0(eventDate,"00:00:00"))
eventDateTime

eventOutcome<-r_sample_factor(x = c("Passed", "Failed", "Ongoing","Unknown"), n=length(eventDate))
eventOutcome

data<-data.frame(eventDate,eventDateTime,eventOutcome)
head(data)

# eventDate       eventDateTime eventOutcome
#1 2015-01-25 2015-01-25 04:48:47      Unknown
#2 2015-05-05 2015-05-05 09:35:22      Unknown
#3 2015-11-28 2015-11-28 08:56:16       Failed
#4 2015-05-23 2015-05-23 02:24:52      Ongoing
#5 2015-01-26 2015-01-26 07:43:52       Failed
#6 2015-10-22 2015-10-22 03:07:14       Passed

require(wakefield)#用于生成状态变量
需要(dplyr)
要求(stringi)
种子(1)

#数据一个选项可能是为每个用户生成UUID。UUID如下所示:

c7f2dde5-dfeb-45cb-9720-87b23effd45d
如果您使用一个好的UUID生成器,那么几乎不可能多次生成相同的UUID。R有一个
uuid
包,可用于:

库(uuid)

用户uuid一个选项可能是为每个用户生成一个uuid。UUID如下所示:

c7f2dde5-dfeb-45cb-9720-87b23effd45d
如果您使用一个好的UUID生成器,那么几乎不可能多次生成相同的UUID。R有一个
uuid
包,可用于:

库(uuid)

user_uuid您正在生成1300个字符串,但
数据中的行数为365000。因此,您可以使用
sample
随机重复这些字符串

library(stringi)
data$UserId <- sample(stri_rand_strings(1300,6), nrow(data), replace = TRUE)
库(stringi)

data$UserId您正在生成1300个字符串,但
数据中的行数为365000。因此,您可以使用
sample
随机重复这些字符串

library(stringi)
data$UserId <- sample(stri_rand_strings(1300,6), nrow(data), replace = TRUE)
库(stringi)

data$UserId听起来您正在寻找的用户id的分布类似于幂律或幂律。这是一种生成对遵循幂律的每个用户ID进行采样的相对概率向量的方法,然后根据这些相对概率对用户ID进行采样

这里我使用函数
Pareto::rPareto
来生成相对概率。您可以改变参数,尤其是
alpha
,以获得不同的分布。随着
alpha
的增加,分布将变得更加均匀。我还提供了一个
truncation
参数,这样您就不会有太多用户购买数量过高(在本例中,最常见的ID大约有3700个案例)

注意,您不能保证使用这种特殊的方法对1300个用户ID中的每个ID至少采样一次

接下来,我使用函数
uuid::UUIDgenerate
生成1300个唯一字符串。最后,我使用
sample
对唯一ID进行采样,并替换数据框中的行。我在样本中绘制了不同ID的频率。同样,如果您不需要此分布,请修改参数

library(Pareto)
library(uuid)
library(ggplot2)

set.seed(1)

n_users <- 1300
n_rows <- 365000

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)

# Check the distribution of IDs
ggplot(as.data.frame(table(id_sample)), aes(x = Freq)) +
  geom_histogram() +
  scale_x_log10()
库(帕累托)
图书馆(uuid)
图书馆(GG2)
种子(1)

n_users听起来您正在寻找的用户ID的分布类似于幂律或幂律。这是一种生成对遵循幂律的每个用户ID进行采样的相对概率向量的方法,然后根据这些相对概率对用户ID进行采样

这里我使用函数
Pareto::rPareto
来生成相对概率。您可以改变参数,尤其是
alpha
,以获得不同的分布。随着
alpha
的增加,分布将变得更加均匀。我还提供了一个
truncation
参数,这样您就不会有太多用户购买数量过高(在本例中,最常见的ID大约有3700个案例)

注意,您不能保证使用这种特殊的方法对1300个用户ID中的每个ID至少采样一次

接下来,我使用函数
uuid::UUIDgenerate
生成1300个唯一字符串。最后,我使用
sample
对唯一ID进行采样,并替换数据框中的行。我在样本中绘制了不同ID的频率。同样,如果您不需要此分布,请修改参数

library(Pareto)
library(uuid)
library(ggplot2)

set.seed(1)

n_users <- 1300
n_rows <- 365000

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)

# Check the distribution of IDs
ggplot(as.data.frame(table(id_sample)), aes(x = Freq)) +
  geom_histogram() +
  scale_x_log10()
库(帕累托)
图书馆(uuid)
图书馆(GG2)
种子(1)

n_用户你好Ronak,感谢您的快速回复。这可以很好地生成ID变量。我想知道是否有一种方法可以使分布在每个ID上的行数更加可变。例如,一组用户只有几行归属于他们,而另一组用户的行数超过几行?我希望这是有意义的
sample
has
prob
参数,您可以定义每个值发生的概率。尽管为1300个值定义概率并不简单。除此之外,没有简单的方法可以控制每个ID的随机性。您需要制定规则来检查和丢弃不符合这些标准的值,并再次为它们生成ID。嗨,Ronak,感谢您的快速响应。这可以很好地生成ID变量。我想知道是否有一种方法可以使分布在每个ID上的行数更加可变。例如,一组用户只有几行归属于他们,而另一组用户的行数超过几行?我希望这是有意义的
sample
has
prob
参数,您可以定义每个值发生的概率。尽管为1300个值定义概率并不简单。除此之外,没有简单的方法可以控制每个ID的随机性。你需要制定规则来检查并丢弃不符合这些标准的值,然后再次为它们生成ID。嗨,Tim,谢谢你的回答。它用于创建用户标识符变量。我想知道是否有一种方法可以使它在每个用户id之间的行分布方式上更加可变?例如,一组用户只有很少的交互,而其他用户则有更多的交互,即几十次/数百次?@Robin,但这听起来好像标识符不是真正随机的。是的,我明白你的意思。我希望这种方式类似于零售网站上的购买事件日志,