我在R中有一个数据框,我使用as.h2o()传递给H2O。
dataset.h2o <- as.h2o(dataset,destination_frame = "dataset.h2o")
对数据框执行str(),我们可以看到week_of_date类的数据类型为Date
$ primary_account_id:int 31 31 31 31 31 31 31 31 31 31 ...
$ week_of_date:日期,格式:“2015-08-31”“2015-09-07”“2015-09-14”“2015-09-21”......
然而,当在H2O Flow中查看时,它似乎被转换为名为time的数据类型 - 格式为
week_of_date time 0 0 0 0 1440943200000.0 1447592400000.0 1444480409625.8884 2013362534.5706
当我使用as.data.frame
将数据恢复到R时returned.dataset <- as.data.frame(dataset.h2o)
它以我无法理解的格式存储,因此解析
$ primary_account_id:int 31 31 698 1060 1060 1060 1060 1060 1060 1133 ...
$ week_of_date:Class'POSIXct'num [1:194] 1442757600000 1446382800000 1446382800000 1442152800000 1442757600000 ...
请您指点我如何在R和H2O之间实现更好的互操作性?
谢谢!
答案 0 :(得分:1)
这是h2o中的一个错误。 H2o以毫秒为单位返回日期时间,而R则为秒。见jira issue 3434。
在此期间你可以做的是重新编码日期列:
as.Date(structure(returned.dataset$week_of_date/1000, class = c("POSIXct", "POSIXt")))
答案 1 :(得分:0)
请参阅phiver的回复以获得更详细的答案,但另一个简单的解决方法是在传递给H2O之前将日期列转换为字符(如果您不需要H2O中日期格式的列)。这是一个简单的例子。
# construct a sample df with a date format column
df <- data.frame(week_of_date = as.Date(c('2015-09-29','2015-10-05')))
str(df$week_of_date)
Date[1:2], format: "2015-09-29" "2015-10-05"
# convert the column to H2O
df$week_of_date <- as.character(df$week_of_date)
str(df$week_of_date)
chr [1:2] "2015-09-29" "2015-10-05"
# convert to H2OFRAME and pass back to R data.frame and re-convert to date
df.hex <- as.h2o(df)
df2 <- as.data.frame(df.hex)
df2$week_of_date <- as.Date(df2$week_of_date)
str(df2$week_of_date)
Date[1:2], format: "2015-09-29" "2015-10-05"
答案 2 :(得分:0)
以上两个答案都很棒。但是,我认为更有效的解决方法是将数据集传递给h2o(不包括日期列)。然后,当您训练模型并进行预测时,这些字段/行的数量将与原始数据集的字段/行数量相同,您只需将“日期”列附加到预测矢量或矩阵即可。
当然,此解决方案中的预测与回测期间有关。
答案 3 :(得分:0)
如果日期时间列的格式正确,则转换为H2o
并返回很容易。 (以毫秒为单位的时间精度会丢失)。如H20 FAQ
H2O设置为自动检测两种主要的日期/时间格式。首先 格式适用于格式为yyyy-MM-dd的日期。 ...第二次约会 格式用于格式为dd-MMM-yy的日期。
时间指定为HH:mm:ss。 HH是两位数的小时,必须是 值介于0-23(24小时制)或1-12(十二小时)之间 时钟)。 mm是两位数的分钟值,并且必须是0-59之间的值。 ss是两位数的第二个值,并且必须是0-59之间的值。
示例
示例数据
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")
x <- paste(dates, times)
df <- data.frame(datetime = strptime(x, "%m/%d/%y %H:%M:%S"))
# > df
# datetime
# 1 1992-02-27 23:03:20
# 2 1992-02-27 22:29:56
# 3 1992-01-14 01:03:30
# 4 1992-02-28 18:21:03
# 5 1992-02-01 16:56:26
将格式更改为H2o首选的格式
# Change format
df$datetime <- format(df$datetime, format = "%Y-%m-%d %H:%M:%S")
#H2o format
h2o_df <- as.h2o(df)
# Convert back
back_df <- as.data.frame(h2o_df)
back_df
# datetime
# 1 1992-02-27 23:03:20
# 2 1992-02-27 22:29:56
# 3 1992-01-14 01:03:30
# 4 1992-02-28 18:21:03
# 5 1992-02-01 16:56:26