Big data plots
빅데이터 플롯
어디에 그릴 것인가?
윈도우에서 X11()
또는 x11()
은 windows()
와 동일한 역할을 한다. plot을 위한 새로운 창을 연다.
R Studio Plots
R studio를 사용한다면 플롯은 기본적으로 R studio의 Plots에 표시된다.
이전의 플롯을 손쉽게 찾아 볼 수 있어서 편리하게 사용할 수 있다. 하지만 대용량의 데이터를 시각화하려면 더디다!
R Studio plots vs x11
다음의 R Studio plots과 x11
의 속도를 비교하고 있다.
library(microbenchmark) #install.packages('microbenchmark')
mbm <- microbenchmark(
"x11_n=1000" = {
N=1000
x = rnorm(N)
y = x + rnorm(N)
x11()
plot(y~x)
dev.off()
},
"RStudio_n=1000" = {
N=1000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x)
},
"x11_n=10000" = {
N=10000
x = rnorm(N)
y = x + rnorm(N)
x11()
plot(y~x)
dev.off()
},
"RStudio_n=10000" = {
N=10000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x)
},
"x11_n=100000" = {
N=100000
x = rnorm(N)
y = x + rnorm(N)
x11()
plot(y~x)
dev.off()
},
"RStudio_n=100000" = {
N=100000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x)
},
"x11_n=1000000" = {
N=1000000
x = rnorm(N)
y = x + rnorm(N)
x11()
plot(y~x)
dev.off()
},
"RStudio_n=1000000" = {
N=1000000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x)
},
times=10)
library(dplyr)
library(tidyr)
library(ggplot2)
mbm %>% mutate(expr=as.character(expr)) %>%
separate(expr, sep="_", into=c('cond', 'N')) %>%
mutate(N=gsub("n=", "", N)) %>%
#filter(N %in% c('1000','10000','100000')) %>%
ggplot(aes(x=N, col=cond, y=time/1000)) +
geom_boxplot() +
coord_trans(y='log10') +
labs(y='time (sec)') -> ggp
print(ggp)
#autoplot(mbm)
이유는 모르겠지만 데이터가 커질 수록 RStudio의 Plots는 x11
을 통해 새로운 창에 그래프를 그리는 것 보다 느리다. (100만개의 점을 그리는데 x11
의 평균은 약 30초, R Studio의 경우는 평균 약 40초가 걸렸다.)
사실 십만개를 넘어가 백만개의 점을 그래프로 그리는 것은 조금 오버라고 생각한다. 얼마나 큰 종이에 그리느냐에 따라 다르겠지만, 대부분의 점들은 서로 겹쳐서 구분이 불가하기 때문이다.
require(scales)
N=100000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=1))
N=100000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=0.1))
N=100000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=0.01))
N=1000000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=1))
N=1000000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=0.1))
N=1000000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=0.01))
N=1000000
x = rnorm(N)
y = x + rnorm(N)
plot(y~x, col=alpha('black', alpha=0.001))
alpha=0.001
은 작동하지 않는 듯 하다.
결론
적어도 다음의 세팅에서 플롯해야 할 데이터가 증가함에 따라 R Studio의 Viewer로 플롯하는 것은 새로운 윈도우를 열어서 플롯하는 것보다 느리다.
# install.packges('rstudioapi')
ver <- rstudioapi::versionInfo()
ver
sessionInfo()
## $citation ## ## To cite RStudio in publications use: ## ## RStudio Team (2018). RStudio: Integrated Development for R. ## RStudio, Inc., Boston, MA URL http://www.rstudio.com/. ## ## A BibTeX entry for LaTeX users is ## ## @Manual{, ## title = {RStudio: Integrated Development Environment for R}, ## author = {{RStudio Team}}, ## organization = {RStudio, Inc.}, ## address = {Boston, MA}, ## year = {2018}, ## url = {http://www.rstudio.com/}, ## } ## ## ## $mode ## [1] "desktop" ## ## $version ## [1] '1.2.1335'
## R version 3.6.1 (2019-07-05) ## Platform: x86_64-w64-mingw32/x64 (64-bit) ## Running under: Windows 10 x64 (build 18362) ## ## Matrix products: default ## ## locale: ## [1] LC_COLLATE=Korean_Korea.949 LC_CTYPE=Korean_Korea.949 ## [3] LC_MONETARY=Korean_Korea.949 LC_NUMERIC=C ## [5] LC_TIME=Korean_Korea.949 ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] XMLRPC_0.3-1 knitr_1.25 RWordPress_0.2-3 ## [4] data.table_1.12.6 stringr_1.4.0 tidyr_1.0.0 ## [7] microbenchmark_1.4-7 ggplot2_3.2.1 dplyr_0.8.3 ## [10] mclust_5.4.5 mvtnorm_1.0-11 flexmix_2.3-15 ## [13] lattice_0.20-38 ## ## loaded via a namespace (and not attached): ## [1] Rcpp_1.0.2 highr_0.8 pillar_1.4.2 ## [4] compiler_3.6.1 bitops_1.0-6 tools_3.6.1 ## [7] zeallot_0.1.0 digest_0.6.22 lifecycle_0.1.0 ## [10] evaluate_0.14 tibble_2.1.3 gtable_0.3.0 ## [13] pkgconfig_2.0.3 rlang_0.4.1 rstudioapi_0.10 ## [16] yaml_2.2.0 xfun_0.10 withr_2.1.2 ## [19] vctrs_0.2.0 stats4_3.6.1 grid_3.6.1 ## [22] nnet_7.3-12 tidyselect_0.2.5 glue_1.3.1 ## [25] R6_2.4.0 XML_3.98-1.20 rmarkdown_1.16 ## [28] purrr_0.3.3 magrittr_1.5 ellipsis_0.3.0 ## [31] backports_1.1.5 scales_1.0.0 modeltools_0.2-22 ## [34] htmltools_0.4.0 assertthat_0.2.1 mime_0.7 ## [37] colorspace_1.4-1 labeling_0.3 stringi_1.4.3 ## [40] RCurl_1.95-4.12 lazyeval_0.2.2 munsell_0.5.0 ## [43] markdown_1.1 crayon_1.3.4
- PS: 경험 상 Python은 R보다 빨랐다. 아마도 플롯에 개개의 데이터 정보가 저장되는 방식이 아니라 그림으로 출력되고 끝나기 때문인 듯하다.
Leave a comment