Nuances de operar soluções R em um ambiente empresarial

As soluções baseadas em R, tanto de relatórios clássicos quanto de análises operacionais, têm se mostrado muito bem em um ambiente corporativo. Sem dúvida, RStudio e sua equipe apaixonada desempenham um papel significativo nisso . Em produtos comerciais RStudio, você não precisa pensar em questões de infraestrutura, mas simplesmente trocar um pouco de dinheiro por uma solução pronta "fora da caixa" e contar com seus desenvolvedores e suporte. Em edições de código aberto, e a maioria das instalações em empresas russas são assim, você precisa pensar sobre os problemas de infraestrutura por conta própria.





As soluções R fecham bem o nicho de "dados médios", quando há "um pouco mais" de dados do que cabe no Excel ou um sistema relacional não configurado e algoritmos e processamento complexos são necessários, mas quando ainda é muito cedo para implantar o "lançamento complexo "de datas importantes, nossas tarefas ainda estão dentro da órbita da Terra. Estamos falando de dezenas a centenas de terabytes completos, que podem caber facilmente no back-end do Clikhouse . Um ponto importante: tudo está em um circuito interno, na grande maioria dos casos, TOTALMENTE desligado da Internet.





Dando continuidade a uma série de publicações anteriores , refina os blocos de construção para uma robusta Empresa R Aplicação .





Problemático

Para uma solução produtiva, você precisa garantir resultados e cálculos reproduzíveis. O problema da reprodutibilidade está dividido em várias direções diferentes. Grandes blocos podem ser distinguidos:





  • reprodutibilidade infraestrutural. Muitas questões são fechadas com uma combinação de tecnologias docker + renv + git.





  • reprodutibilidade do software. Muitas questões são fechadas pela tecnologia de pacotes e autotestes.





  • "similaridade" estatística dos resultados. É aqui que surge a especificidade de cada tarefa individual. Alguns pontos são sugeridos abaixo para garantir isso.





Qual é a dificuldade?





Algoritmos "lançados em produção"





  • pode ser multifásico com um tempo de cálculo cumulativo de várias horas;





  • «» ( , excel , ..);





  • , ;





  • ;





  • .





  • , ;





  • , . .





( ) , . , . , prod (), dev .





, . , , . , . . , (availability) X% $Y. .









  • . , .





  • , .





  • . .





  • .





  • data.frame



    , «» , .





, :





  • futile.logger





  • lgr





  • logger





warning



message



, . , .





, .Rds



(1-1000 Ram) . 3 :





  • fst





  • qs





  • arrow





-- . , , .. .





:





  • checkmate -- + ;





  • skimr -- ;





  • validate -- ;





  • testthat / tinytest -- ;





  • dplyr / data.table -- .





, . Win-Vector.





pipe (%>%



). . - ( «» « », ), . , , .



.





:





  • tidylog. , tidylog



    tidyverse



    , dpylr::mutate



    .





  • lumberjack.





, :





  • «Debugging with RStudio by Jonathan McPherson»





  • «Advanced R», . «Debugging»





(shiny )?





  • browser()



    . IDE. . -- . .





  • debug()



    /undebug()



    /debugonce()



    . , .., .





  • traceback()



    . .





  • options(datatable.verbose = TRUE)



    . data.table



    ( , , ).





  • utils::getFromNamespace



    . .





  • waldo diffobj. .





  • pryr::object_size()



    . «» .





  • reprex



    . .





  • gginnards



    . ggplot.





browser()



, data.table



.





library(data.table)
library(magrittr)

dt <- as.data.table(mtcars) %>%
  .[, {m <- head(.SD, 2); print(ls()); browser(); m}, by = gear]
#>  [1] "-.POSIXt"  "am"        "carb"      "Cfastmean" "cyl"       "disp"     
#>  [7] "drat"      "gear"      "hp"        "m"         "mpg"       "print"    
#> [13] "qsec"      "strptime"  "vs"        "wt"       
#> Called from: `[.data.table`(., , {
#>     m <- head(.SD, 2)
#>     print(ls())
#>     browser()
#>     m
#> }, by = gear)
      
      



. ( ) , .





  • bench





  • microbenchmark





  • system.time({…})







  • profvis





  • proffer





  1. .

    ? . , , .





  2. make



     . drake/targets





  3. Em problemas práticos, pode haver todo tipo de surpresas, a magia dos bigdata nem sempre ajuda, lemos o irônico detetive "Usando AWK e R para analisar 25 TB"





Publicação anterior - "Como domesticar a mineração de processos com R em uma empresa?" ...








All Articles