Size: a a a

R (язык программирования)

2020 October 26

AS

Alexander Semenov in R (язык программирования)
А у нас архитектор клиентской аналитики (в Кликхаус) говорит: "Это же Кликхаус, кто знает, что там может происходить?".

Простите.
источник

PU

Philipp Upravitelev in R (язык программирования)
Alexander Semenov
А у нас архитектор клиентской аналитики (в Кликхаус) говорит: "Это же Кликхаус, кто знает, что там может происходить?".

Простите.
какая интересная личность
источник

АК

Артём Клевцов... in R (язык программирования)
Кстати, может кто в курсе, ClickHouse умеет в UPDATE/UPSERT? Что мне показалось, что не очень.
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Артём Клевцов
Кстати, может кто в курсе, ClickHouse умеет в UPDATE/UPSERT? Что мне показалось, что не очень.
судя по моему опыту плотной работы на боевой базе в целых дней 10 - не очень. Ну то есть апдейтнуть определённое значение в определённой колонке может и получится, но мне вокруг все разработчики говорят, что в этом кликхаус прямо не силён, очень не силён.
источник

A

Andrey in R (язык программирования)
Philipp Upravitelev
я думал над таким вариантом
но на большой таблице я хз как transpose себя поведет
Реально нужно проверять. В пайторче, например, транспонирование тензоров бесплатное
источник

A

Andrey in R (язык программирования)
Так что если в R транспонировать матрицу, то может быть тоже никаких вычислений не понадобится.
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
Кстати, может кто в курсе, ClickHouse умеет в UPDATE/UPSERT? Что мне показалось, что не очень.
не, это плохая идея
проще дропнуть и перезалить
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
> as.data.table(x)[, .(x = x, y = as.data.table(transpose(y)))]
  x y.V1 y.V2 y.V3
1: 1    a    b <NA>
2: 2    a <NA> <NA>
3: 3    u    x    z
4: 4    a    b <NA>
5: 5    a <NA> <NA>
что то у меня не завелся в синтетике способ

> tibble(
+   x=1:5,
+   y=list(c('a','b'),c('a'),c("u","x","z"),c('a','b'),c('a'))
+ )  ->jj
>   as.data.table(jj)[, .(x = x, y =  as.data.table(transpose(y)))]
  x y.V1 y.V2
1: 1    a    b
2: 2    a    
3: 3    u    x
4: 4    a    b
5: 5    a    
Warning messages:
1: Element 2 must be length 2, not 1
2: Element 3 must be length 2, not 3
3: Element 5 must be length 2, not 1
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
что то у меня не завелся в синтетике способ

> tibble(
+   x=1:5,
+   y=list(c('a','b'),c('a'),c("u","x","z"),c('a','b'),c('a'))
+ )  ->jj
>   as.data.table(jj)[, .(x = x, y =  as.data.table(transpose(y)))]
  x y.V1 y.V2
1: 1    a    b
2: 2    a    
3: 3    u    x
4: 4    a    b
5: 5    a    
Warning messages:
1: Element 2 must be length 2, not 1
2: Element 3 must be length 2, not 3
3: Element 5 must be length 2, not 1
> library(tibble)
> library(data.table)
data.table 1.13.2 using 8 threads (see ?getDTthreads).  Latest news: r-datatable.com
>
> xx <- tibble(
+   x=1:5,
+   y=list(c('a','b'),c('a'),c("u","x","z"),c('a','b'),c('a'))
+ )
>
>
> as.data.table(xx)[, .(x = x, y = as.data.table(transpose(y)))]
  x y.V1 y.V2 y.V3
1: 1    a    b <NA>
2: 2    a <NA> <NA>
3: 3    u    x    z
4: 4    a    b <NA>
5: 5    a <NA> <NA>
> packageVersion("data.table")
[1] '1.13.2'
источник

IS

Ivan Struzhkov in R (язык программирования)
обновил data table до 1.13.2 и полегчало. Было 1.13.0
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Буду признателен, если выложишь бенчмарки на реальных данных. Варианты с tidy, от @konhis и мой.
итак - mbpro15 i7 16gb

tidy
pmt  %>% unnest(check) %>% group_by(tr_id) %>% mutate(rank=row_number()) %>% pivot_wider(c(-rank,-check),names_from = rank,values_from = check))


 user  system elapsed 
 2.027   0.025   2.053

dcast

system.time({
 tmp_dt <- as.data.table(pmt);
 tmp_dt <- tmp_dt[, list(vals = unlist(check)),by=tr_id];
 tmp_dt[, index := 1:.N, by =tr_id];
 dcast(tmp_dt, tr_id ~ index, value.var = 'vals', fill = NA) })

 
user  system elapsed
 0.185   0.005   0.189

c transponse
system.time(
 as.data.table(pmt)[, .(x= tr_id, y = as.data.table(transpose(check)))])

 
 user  system elapsed 
 0.086   0.006   0.093

60к записей, максимальная длинна листа который разворачивали 10
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
итак - mbpro15 i7 16gb

tidy
pmt  %>% unnest(check) %>% group_by(tr_id) %>% mutate(rank=row_number()) %>% pivot_wider(c(-rank,-check),names_from = rank,values_from = check))


 user  system elapsed 
 2.027   0.025   2.053

dcast

system.time({
 tmp_dt <- as.data.table(pmt);
 tmp_dt <- tmp_dt[, list(vals = unlist(check)),by=tr_id];
 tmp_dt[, index := 1:.N, by =tr_id];
 dcast(tmp_dt, tr_id ~ index, value.var = 'vals', fill = NA) })

 
user  system elapsed
 0.185   0.005   0.189

c transponse
system.time(
 as.data.table(pmt)[, .(x= tr_id, y = as.data.table(transpose(check)))])

 
 user  system elapsed 
 0.086   0.006   0.093

60к записей, максимальная длинна листа который разворачивали 10
Спасибо.
При возможности делай через bench::mark, ибо там ещё память может показать (если R скомпилен с соответствующим флагом) и вызовы сборщика мусора.
источник

PU

Philipp Upravitelev in R (язык программирования)
хм. по системному времени у нас почти одинаковые решения
интересно, что там в user time такого могло быть
источник

O9

OBIDJON 92 in R (язык программирования)
Здравствуйте  всем
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Спасибо.
При возможности делай через bench::mark, ибо там ещё память может показать (если R скомпилен с соответствующим флагом) и вызовы сборщика мусора.
Спасибо за пакет, классный.
Вот для 10 итераций каждого из способов
источник

IS

Ivan Struzhkov in R (язык программирования)
Philipp Upravitelev
хм. по системному времени у нас почти одинаковые решения
интересно, что там в user time такого могло быть
В 2 раза разница получилась
источник

PU

Philipp Upravitelev in R (язык программирования)
ага, я вижу. у меня мусора больше, судя по всему
источник

PU

Philipp Upravitelev in R (язык программирования)
забавно, что тайди мало того, что в десять раз медленнее, так еще и места занимает больше
источник

IS

Ivan Struzhkov in R (язык программирования)
Есть еще нюанс. И tidy и dcast - они пустые листы - не выводят. А транспосн - выводит. Может на этих операциях еще идут потери
источник

PU

Philipp Upravitelev in R (язык программирования)
Ivan Struzhkov
Есть еще нюанс. И tidy и dcast - они пустые листы - не выводят. А транспосн - выводит. Может на этих операциях еще идут потери
слушай, а почему в третьем варианте в result 60333  * 11,а  в двух других - 51898 * 11?
источник