R에서 일반적인 분석 방법은 아래와 같다.
1. DB에서 분석할 데이터를 가져와 csv, txt와 같은 파일 형태로 생성한다.
2. R에서는 각종 read 함수를 이용하여 생성한 파일을 메모리에 올려 분석 작업을 진행한다.
이 방법의 단점은 R에서 분석하기 위해서는 DB에서 데이터를 가공해서 파일로 전달할때 까지 기다려야 한다는 것이다.
분석가와 DBA간의 커뮤니케이션에 문제가 있을 경우 위 1,2번의 작업을 몇 차례나 더 해야 할 수도 있다.
그래서 이번에는 R에서 직접 RDBMS를 Conncetion하는 방법을 알아보고자 한다.
이 방법의 장점은 SQL을 조금만 알면 분석가는 DBA에게 데이터를 요청할 필요도 없으며 SQL로 쉽게 데이터를 선 정제 후 R에서 분석가능하다.
여기서 부터 아래 작업은 Ubuntu 64bit 기준으로 작성되었으며 R이 이미 설치되어 있다고 가정한다.
단 R Version은 >= 2.15 이상이어야 한다.
RJDBC 패키지를 사용하기 위해서는 우선 java를 설치해야 한다.
$ sudo apt-get install openjdk-7-jdk |
그리고 아래와 같이 실행하기 바란다.(Root 계정으로 실행)
$ R CMD javareconf |
이제 R에서 DB Connection하기 위한 Package를 설치해야 한다.
install.packages(rJava)
install.packages(DBI)
install.packages(RJDBC)
환경변수 세팅
LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/:/home/user/R/x86_64-pc-linux-gnu-library/3.0/rJava/jri:$LD_LIBRARY_PATH |
설치 후 해당 Package가 제대로 load되는지 확인이 필요하다.
library(DBI)
library(rJava)
library(RJDBC)
RJDBC는 rJava에 의존적으로 rJava를 먼저 load 후 loading해야 한다.
혹 rJava load 시 아래와 같은 에러가 발생할 경우 이 링크를 참조하기 바란다.
(만약 이도저도 다 해봤는데 안되면 재부팅 해보길 바란다... ^^;)
Error in dyn.load(x, as.logical(local), as.logical(now)) : unable to load shared library '/usr/local/lib/R/site-library/rJava/libs/rJava.so': libjvm.so: cannot open shared object file: No such file or directory
여기서는 mysql를 접속하기 위해서 mysql connector를 설치해야 한다.(oracle이라면 이글 참고)
$ sudo apt-get install libmysql-java |
설치를 하게 되면 /usr/share/java/ 폴더에 jar파일이 있을 것이다.
이제 다 끝났다. 이제 직접 R에서 DB Connection을 해보자.
library(DBI)
library(rJava)
library(RJDBC)
drv <- JDBC("com.mysql.jdbc.Driver", "/usr/share/java/mysql-connector-java.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://<db_ip>:<db_port>/<dbname>", "<id>", "<passwd>")
df.table <- dbGetQuery(conn, "select * from DBTABLE")
class(df.table)
실제 소스 실행화면
위 실행화면을 보면 dbGetQuery로 SQL문을 작성하여 해당 테이블을 가져와 df.table R 객체에 할당하였고 테이블 데이터를 확인할 수 있다. 또한 class 함수로 df.table형을 확인해보면 data.frame을 알 수 있다. ^^
'R' 카테고리의 다른 글
R 상위버전 설치 (1) | 2014.01.28 |
---|---|
R 상관분석(Correlation) 시각화 (2) | 2014.01.24 |
R 데이터프레임(DF) grep & gsub (0) | 2014.01.17 |