count 類特徵統計的R方法及耗時對比

2021-08-21 17:59:27 字數 1667 閱讀 8260

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(方便多特徵同時管道操作)。

Date類 Calendar類的常用方法及運用

需求 1.根據生日計算年齡 2.獲取輸入日期的星期幾 3.獲取輸入日期的當月第一天 4.獲取輸入日期的當月最後一天 5.判斷該年是否是閏年 6.根據整型數表示的年月日,生成日期型別格式 public class birthday nowtime 獲取輸入日期的當月第一天 int firstday c...

r型聚類典型指標 常用的聚類演算法及聚類演算法評價指標

1.典型聚類演算法 1.1 基於劃分的方法 代表 kmeans演算法 指定k個聚類中心 計算資料點與初始聚類中心的距離 對於資料點,找到最近的ci 聚類中心 將分配到ci中 更新聚類中心點,是新類別數值的均值點 計算每一類的偏差 返回返回第二步 1.2 基於層次的方法 代表 cure演算法 每個樣本...

python類的繼承及重寫父類方法

寫python有一年多了,平日使用python解決一些問題,調一些介面,用一些框架,雖然不影響都可以寫,但一直沒有好好的花時間去理解python概念性的東西。也許,這也是寫了這麼久一直不能有所進步的原因,從今天起,來重新好好的學習一下python的相關概念。class tree def init s...