R 미러링 서버 로그 분석

예전에 한국 cran 미러링 서버를 구축하면서 미러링 서버의 웹 서버 로그를 기반으로 몇 가지 시각화를 해서 공개 세미나에서 분석 결과를 공유했던 적이 있었다. 사실 이런 로그 공개 작업에 대해서 개인적으로 고민한 적이 있었는데, 얼마전에 RStudio에서 관련 작업을 했던 결과를 공개하고 말았다. 그러면서 나도 로컬 cran 미러링에서 RStudio로 넘어오게 되었는데, 이 이유는 RStudio의 미러렁 서버가 AWS cloudfront를 사용하면서 미러링 서버의 속도가 한국에서 꽤 빠르게 나오기 때문이기도 하며, 무엇보다 중요한 이유는 내가 사용하는 미러링 서버 로그를 내가 확인해 볼 수 있기 때문이다.
이런 데이터 공개가 확산되게 되면서 최근 1주일 동안 아주 흥미로운 분석 결과들이 전 세계에서 쏱아져 나오고 있다.
가장 첫번째로는 데이터 공개에 대한 RStudio 블로그 글이 있으며, 이 데이터를 기반으로 시간에 따른 특정 패키지 다운로딩 횟수를 보여주는 코드를 공개한 사람도 있다.
물론 전체 패키지 다운로딩 횟수를 기반으로 랭킹을 보여줄 수도 있을 것이며, R사용자의 국가별 분포를 가늠해 볼 수도 있다.
이런 글들의 도움으로 개인적으로 만든 패키지인 KoNLP의 다운 로딩 횟수가 시간에 따라 어떻게 분포되는지 아래와 같이 간단하게 확인해 볼 수도 있다.

if (!require("devtools")) install.packages("devtools")
require("devtools")
# make sure you have Rtools installed first! if not, then run:
# install.packages('installr') install_Rtools()
install_github("installr", "talgalili")  # get the latest installr R package
# or run the code from here:
# https://github.com/talgalili/installr/blob/master/R/RStudio_CRAN_data.r

require(installr)

# The first two functions might take a good deal of time to run (depending
# on the date range)
RStudio_CRAN_data_folder <- download_RStudio_CRAN_data(START = "2013-05-20", 
    END = "2013-06-13")  # around the time R 3.0.0 was released

my_RStudio_CRAN_data <- read_RStudio_CRAN_data(RStudio_CRAN_data_folder)

# barplots: (more functions can easily be added in the future)
barplot_package_users_per_day("KoNLP", my_RStudio_CRAN_data)

## [1] "Reading /tmp/RtmpbPdy1B/2013-05-20.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-21.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-22.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-23.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-24.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-25.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-26.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-27.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-28.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-29.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-30.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-05-31.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-01.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-02.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-03.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-04.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-05.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-06.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-07.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-08.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-09.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-10.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-11.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-12.csv.gz ..."
## [1] "Reading /tmp/RtmpbPdy1B/2013-06-13.csv.gz ..."

plot of chunk unnamed-chunk-2

## $total_installations
## [1] 258
library(lubridate)
library(ggplot2)
library(plyr)

my_RStudio_CRAN_data$date <- ymd(my_RStudio_CRAN_data$date)

konlp_subset <- subset(my_RStudio_CRAN_data, package == "KoNLP")

konlp_aggr <- ddply(konlp_subset, .(date, country), summarise, cnt = length(package))
konlp_aggr <- ddply(konlp_aggr, .(date), mutate, total = sum(cnt))


konlp_dist <- ggplot(konlp_aggr, aes(date, cnt)) + geom_bar(stat = "identity", 
    aes(fill = country)) + scale_x_datetime(breaks = "2 days") + theme_bw() + 
    theme(axis.text.x = element_text(angle = 90))

# ggsave(konlp_dist, file='ratings.pdf', width=4, height=4)

konlp_dist

plot of chunk pic

위 그래프는 첫번째 그래프와 같지만 어느나라에서 많이 다운 받았는지 시각화 결과를 보여준다. 아무래도 한글 패키지 이므로 한국이 가장 많은 것을 알 수 있다. 게다가 6월 1일 즈음에 새로운 버전이 배포되고 이후로 다운로딩 횟수가 전반적으로 증가된 것을 알 수 있다.

개인적으로 국내에서 R을 사용하는 분들이 RStudio의 미러링 서버로 미러 서버를 바꿀 것을 추천하는데, 이는 나같은 패키지 개발자가 국내 사용자들이 어떤 사용 패턴을 보이는지 알 수 있다면 다른 패키지를 개발할 때 큰 참고가 될 수 있고 국내 발표를 하거나 컨퍼런스를 할 때 대상 청중을 가늠해 볼 수 있는 좋은 참고자료가 될 수 있기 때문이다.

RStudio의 미러링 서버가 공개하는 데이터는 개인의 IP레벨이 아닌 국가 코드 정보만 공개하며, 어떤 패키지를 다운받았는지만 공개함에 따라 개인을 추적할 근거가 없으니 염려할 이유는 없다.

CC BY-NC 4.0 R 미러링 서버 로그 분석 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.