knitr를 이용한 워드프래스 포스팅하기

이제 블로깅도 R + knitr + Markdown으로…

개요

지난 금요일 오후 늦게부터 토요일까지 이 블로그를 서비스하는 호스팅 서버에 문제가 생겼다. 다른때였으면 큰 문제가 되지 않았을텐데, 반드시 블로그를 통해서 디버깅을 해야될 상황이 겹친것이었다.

knitr 개발자가 새로 인코딩 옵션이 들어간 함수의 버그 패치를 빨리 해달라는 메일을 받고 그나마 정신이 없는 상황에 호스팅 서비스에 대한 증오는 정말 시간이 갈수록 올라만 갔다. 게다가 호스팅을 옮겨버리려는 시도를 토요일 오후부터 했는데, 호스팅 DB에 문제가 생겨서 DB덤프도 안되고 참 이래저래 원망만 쌓이다가, 토요일 오후 아주 잠깐 DB덤프가 가능한 상황이 되어 덤프를 받고 바로 좀 비싸지만 안정적이고 서비스 좋은 호스팅 업체로 옮기게 되었다.
나이가 들면서 저렴(?)에 의미를 두기 보다는 쓸데없는 곳에 시간 뺏기지 않게 끔 귀찮게 하지 않는 서비스들을 찾는 경향이 있는데, 이번 호스팅 서비스 선택도 그랬다.
여튼 잘 옮겼고, 게다가 블로그도 좀더 심플하게 확 리뉴얼 해버렸다.

이번 포스팅에서 하고 싶은 이야기는 바로 knitr를 이용한 블로그 포스팅이다.
이 기능은 R과 워드프래스를 사랑하는 사용자들이 그동안 많이 기다려온 기능이며 R기반의 혹은 데이터 기반의 주제를 다루는 나와 같은 블로거들의 요구가 결합되어 탄생한 기능이며, 필자도 기능을 만드는데 일조를 했다.
필자는 리눅스 윈도우 모두에서 R을 사용하고 항상 기능 테스트를 두 머신에서 모두 수행하고 있으며 특히 R에서 텍스트 처리에 관심이 많아 CJK 문자셋의 지원 가능 여부를 많이 테스트해보고 피드백을 줘 왔는데, 어쩌다 보니 knitr코드까지 만지게 되었다.

knitr는 자세하게 블로그를 통해서 소개해본적이 없지만 이미 R쪽에서는 가장 촉망받는 문학적 프로그래밍(literate programming)을 지원하는 패키지이며, 필자도 이 패키지를 이용해서 R관련 문서나 책을 쓰곤 하며 분석 메뉴얼이나 레포트를 작성할때 없어서는 안될 패키지이다. 게다가 이렇게 RStudio에서 블로깅까지 하고 있으니 거의 생필품이 되어 가는거 같다.

일반적으로 블로깅을 할때 데이터에 대한 요약을 기술하고 시각화를 수행하는데, 동시에 코드도 제공하게 되는데 코드 하이라이팅도 따로 문법으로 정의해야 되며, 결과물 그림 파일도 편집기에서 넣어야 된다. 만일 그 양이 많다면, 글쓰는것 이외에 단순 반복적인 일들이 훨씬 늘어날 것이다.

모든글을 knitr + R + markdown + RStudio로 쓸수는 없겠지만, 정말 좋은 도구임에는 틀림없다.

설치 방법은 이 링크에 제공되고 있으니 참고 하길 바란다. 참고로 knit2wp()의 인코딩 옵션에 작성하는 Markdown문서의 정확한 인코딩을 인자로 넘겨야 된다. 만일 그렇게 하지 않으면 함수 나름대로 인코딩을 설정해서 에러가 날 수 있다. 일반적으로 모든 문서는 UTF-8로 작성하고 인코딩 옵션에도 이를 명시하면 된다.

아래는 최근 보고 있는 R Graphics Cookbook에서 본 코드를 넣어본 것이다.
자동으로 그래프와 출력물들이 블로그 포스팅에 포함이 되게 되어 데이터 기반 블로그를 작성할때 매우 편하게 작업할 수 있다.

코드 예시

# from R Graphics Cookbook
library(gcookbook)
library(ggplot2)
library(plyr)

# 데이터 헤드
head(uspopage)
##   Year AgeGroup Thousands
## 1 1900       <5      9181
## 2 1900     5-14     16966
## 3 1900    15-24     14951
## 4 1900    25-34     12161
## 5 1900    35-44      9273
## 6 1900    45-54      6437
# 요약 통계량
summary(uspopage)
##       Year         AgeGroup     Thousands    
##  Min.   :1900   <5     :103   Min.   : 3099  
##  1st Qu.:1925   5-14   :103   1st Qu.:13557  
##  Median :1951   15-24  :103   Median :19759  
##  Mean   :1951   25-34  :103   Mean   :20900  
##  3rd Qu.:1977   35-44  :103   3rd Qu.:24410  
##  Max.   :2002   45-54  :103   Max.   :45154  
##                 (Other):206

ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup, order = desc(AgeGroup))) + 
    geom_area(colour = NA, alpha = 0.4) + scale_fill_brewer(palette = "Blues") + 
    geom_line(position = "stack", size = 0.2)

plot of chunk unnamed-chunk-1

블로그 포스팅 명령어

library(RWordPress)
library(knitr)
options(WordPressLogin = c(id = "passwd"), WordPressURL = "http://freesearch.pe.kr/xmlrpc.php")

# 작성한 Rmd 파일명을 입력하고 인코딩 명시
knit2wp("blog_20130217.Rmd", title = "knitr를 이용한 워드프래스 포스팅하기", 
    encoding = "UTF-8")

마크다운 소스

CC BY-NC 4.0 knitr를 이용한 워드프래스 포스팅하기 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.