count*类特征统计的R方法及耗时对比

count*特征在kaggle比赛的特征工程中使用特别常见,其统计主要有如下几种方法:
1. 使用add_count + rename组合——train1 <- mtcars %>% add_count(cyl,carb,vs,am,gear) %>% rename("count1"=n)
2. 使用group_by + mutate组合——train2 <- mtcars %>% group_by(cyl,carb,vs,am,gear) %>% mutate(count1 = n())
3. 针对data.table类型使用——train3[, count1:=.N, by=list(cyl,carb,vs,am,gear)]

当数据量很大时候,效率方法3 > 方法2 > 方法1

验证:

df <- data.frame(a = rpois(40,100),
       b = rpois(80,50),
       c = rnorm(1000000),
       d = rnorm(1000000))
df %>% head(10)

方法1

## method 1
invisible(gc())
df1 <- df
tic()
df1 <- df1 %>% add_count(a,b) %>% rename("no_a_b" = n) %>%
    add_count(a) %>% rename("no_a" = n)
toc()
head(df1)

结果:

0.307 sec elapsed

方法2

## method 2
invisible(gc())
df2 <- df
tic()
df2 <- df2 %>% group_by(a,b) %>% mutate(no_a_b = n()) %>%
    group_by(a) %>% mutate(no_a = n())
toc()
head(df2)

耗时

0.201 sec elapsed

方法3

invisible(gc())
df3 <- as.data.table(df)
tic()
df3[, no_a_b:=.N, by = list(a,b)]
df3[, no_a:=.N, by = list(a)]
toc()
head(df3)

耗时

0.079 sec elapsed

总结:当数据量较大时候,读入数据一般会使用data.table的fread函数,这时候特征工程建议使用方法3(速度快)和方法2(方便多特征同时管道操作)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值