R의 주요 데이터포맷인 데이터프레임(data.frame)을 사용하다보면 필터링을 해야 되는 경우가 많다.

필터링하는게 어렵지는 않지만 데이터프레임의 데이터가 많을 수록 성능이슈가 발생한다.


데이터가 클수록 필터링 속도는 현저하기 느려진다.

물론 이러한 성능이슈를 도와주는 R의 여러 패키지가 존재하며 대표적으로 data.table 패키지가 있다.

해당 패키지는 RDBMS와 유사하게 데이터를 인덱싱하여 보다 빠른 필터링 및 그외 여러기능을 제공한다.

(더 자세히 알고 싶다면 여기를 참고)


여기서는 data.table과 같은 패키지를 사용하지 않고 보다 빠르게 필터링 하는 방법을 알아보고자 한다.

우선 기본적인 R에서 데이터프레임을 필터링하는 방법으로는 아래 2가지가 대표적(?)이다.


df1 <- data[data$col1=='filter조건',]
df2 <- subset(data, col1=='filter조건') 


위와 같은 방법 data 데이터 사이즈가 500만건 정도의 데이터를 필터링 했을 경우 하드웨어 사양에 따라 조금씩 차이는 있겠지만 대략 두 방법 모두 10초 가량 소요가 되었다.


꽤 오랜시간이 소요되어 고민하던 차에 R에서 grep을 지원하는게 생각나서 아래와 같이 테스트를 해보았다.


df3 <- data[grep('filter조건', data$col1, ignore.case=T),]


테스트 결과 위 두가지 필터보다 50%이상 성능이 빠르게 나왔다.


내부적으로 어떤 차이가 있는지 좀 더 알아보고 싶지만 머 grep이니까 빠르겠지... 하고 쓴다...@.@;


끝.

저작자 표시
신고

'R' 카테고리의 다른 글

R grep을 이용한 데이터프레임 필터링  (0) 2014.10.22
R을 이용한 이상치 분석  (0) 2014.10.01
R on Hadoop and Amazon EMR  (0) 2014.08.19
R Oracle Connection  (4) 2014.02.24

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글이 없습니다.
secret


이상치(Outlier)라고 하면 특정 데이터 변수의 분포에서 비정상적으로 벗어난 값을 뜻한다.

예를 들면 어떤 학생이 신체검사를 했다고 치자 A학생은 몸무게와 키가 각각 100kg, 150cm나왔다.

이 A학생은 일반적으로 생각했을때 키에 비해 몸무게가 많은 것으로 보인다. 

(여기서는 몸무게와 키는 상관관계가 높은 것으로 간주한다.)

그럼 이 A학생은 속한 학년 반 또는 또래 아이들에 비해 비정상(여기서 이상치)이 맞을까?


위 질문에 대한 이상치 분석을 한번 해보자.

이상치 분석을 위한 모델 데이터는  A학생이 포함된 반의 학생들의 몸무게, 키 데이터이며 변수는 몸무게, 키로만 한정지어 분석해보고자 한다. 모델에 대한 종속변수는 몸무게이며 설명변수는 키가 된다.


우선 데이터를 한번 만들어보자.(실제 데이터가 없으니 ^^;)



name,weight,tall

A,100,150

B,55,156

C,50,153

D,54,165

E,70,164

F,56,155

....생략....

Y,49,153

Z,43,151


 


 std.data <- read.csv("outlier.csv", header=T)
summary(std.data)
boxplot(std.data$weight)

우선샘플 데이터를 R에서 가져와 데이터 분포와 몸무게에 대한 boxplot을 확인해보자.


boxplot을 통해보면 상단 whisker의 몸무게 70kg이상은 이상치라고 판단하고 있으며 해당 데이터에서는 위 boxplot에서 100kg은 이상치라고 판단했다. boxplot에서의 이상치는 몸무게 데이터간의 이상치라고 볼 수 있다.

몸무게와 키와의 상관관계가 있다고 가정하며 키가 클수록 몸무게도 커지기 때문에 몸무게 변수하나로 이상치를 판단하기는 좀 무리가 있을 수 있겠다. (저 몸무게 100kg의 학생이 키가 2m일 수도 있지 않나?? ㅡㅡ;)


그렇다면 설명변수 키와 종속변수 몸무게를 이용하여 회귀분석 모델을 생성하여 이상치를 팓단해보자.

회귀분석 lm함수를 이용하여 lm(종속변수 ~ 설명변수, 모델데이터)로 회귀분석 모델을 생성한다.

library(car)
std.lm <- lm( weight ~ tall , data = std.data)
summary(std.lm)
outlierTest(std.lm)
std.data[1,]

생성한 회귀분석 모델에 의한 이상치 판단을 하기 위해 outlierTest 함수를 사용한다.

해당함수는 모델에 대한 이상치 데이터를 각종 수치와 함께 쉽게 나타내 준다. 단 해당 함수는 car 패키지를 설치 후 사용가능하다. 실행 결과를 보면 아래와 같다.


> outlierTest(std.lm)
  rstudent unadjusted p-value Bonferonni p
1  7.62756         9.6225e-08   2.5018e-06
> std.data[1,]
  name weight tall
1    A    100  150

std.data에서 1번째 데이터가 이상치라고 판단했으며 해당 데이터를 확인해보니 A학생으로 나오는 것을 확인할 수 있다.


전체 실행코드



지금까지 정말 정말 간단한 말도 안되는 데이터를 가지고 이상치 분석을 해보았다... ^^;

그렇다면 이상치 분석은 어떻게 활용할 수 있을까? 

데이터만 가지고 있다면 어디든 활용할 수 있을 것이다. 예를 들면 상품에 대한 가격 이상치라던지 서버 모니터 정보를 이용한 이상치 등등...


물론 실제 많은 설명변수들이 존재하는 데이터를 가지고 이상치 분석을 하기는 쉽지 않다.

데이터 전처리도 쉽지 않고 위에서 설명하지 않은 회귀분석 모델, outlierTest함수를 통해 나온 수치해석 등 통계적 지식이 꽤 많이 필요한 건 사실이지만... 재미로 내가 몸담고 있는 회사의 데이터를 가지고 테스트 해보는 것도 나쁘지 않겠다.

끝.

저작자 표시
신고

'R' 카테고리의 다른 글

R grep을 이용한 데이터프레임 필터링  (0) 2014.10.22
R을 이용한 이상치 분석  (0) 2014.10.01
R on Hadoop and Amazon EMR  (0) 2014.08.19
R Oracle Connection  (4) 2014.02.24

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글이 없습니다.
secret

R on Hadoop and Amazon EMR

R 2014.08.19 15:44

Amazon EMR은 R을 지원한다. 

AMI Versions 3.0.0 이상부터는 Hadoop과 함께 R 3.0.2버전이 함께 Includes되어 설치된다.

현재 R최신버전은 3.1.1이지만 R 3.0.2버전이면 거의 최신버전이라고 할 수 있다.


Amazon 서비스에서 R을 지원하기 때문에 EMR을 이용하여 R Script를 실행하는 방법을 알아보고자 한다.


우선 고려해야 될 사항을 나열해보면 아래와 같다.

첫째 AMI를 통해 설치되는 R버전이 내가 사용하고자 하는 R package에서 지원하는 버전대인지?

둘째 EMR Hadoop Cluster 세팅 시 R은 설치 되지만 R Package는 설치되지 않기 때문에 설치가 가는한지?


우선 첫번째 문제부터 살펴보면 R 3.0.2버전이면 거의 왠만한 R package는 사용가능하다. 

rdocumentation.org 에서 제공하는 R package rank내의 ggplot2, plyr등 모두 사용가능하며 이슈는 없다.

둘째로는 사용하고자 하는 R package가 설치가 가능한지인데 이 부분도 EMR에서는 Bootstrap Actions라는 기능이 있다. 해당 기능을 통해서 R package뿐만 아니라 기타 여러 패키지가 설치 가능하다.


그럼 이제 EMR에서 R Script를 실행하는 방법을 알아보자.


AMI version

위에서 언급한 바와 같이 3.0.0이상 가장 최신버전을 선택하도록 하자.


Bootstrap Actions

Bootstrap Custom Actions을 통해 R Script에서 사용할 package와 기타 필요한 패키지들을 설치할 수 있도록 해야 한다.

여기서는 R package 하나와 mysql을 설치하도록 지정했다.

아래와 같이 shell script파일을 생성한다.

 
#!/bin/bash
sudo yum -y install mysql mysql-server mysql-connector-odbc mysql-devel
wget http://cran.r-project.org/src/contrib/DBI_0.2-7.tar.gz
sudo R CMD INSTALL DBI_0.2-7.tar.gz

만약 설치되어야 하는 R package가 많다면  아래와 같이 RScript Install.package구문으로도 가능하다.

 
 sudo Rscript -e "install.packages(c('DBI', 'rJava', 'etc'),repos='http://ftp.heanet.ie/mirrors/cran.r-project.org/')"

mysql설치는 apt-get 명령어가 아닌 yum을 사용했다. AMI 3.x대 버전 이후 부터는 apt-get이 아닌 yum을 이용하여

필요한 패키지들을 설치할 수 있다. 해당 shell script를 S3내의 내 버킷공간에 저장해 둔다.


S3에 저장한 shell script를 S3 location에 Path를 지정한 후 Add해주면 Bootstrap Action설정은 모두 끝난다.


Steps

R Script 작성 시 맨 상단에 "#! /usr/bin/env Rscript" 해당 구문을 추가해주어야 한다.

추가하지 않으면 EMR에서 R Script를 해석하지 못한다.

#! /usr/bin/env Rscript
library(DBI, quietly=TRUE)
.....

실행할 R Script를 Bootstrap의 Shell script와 마찬가지로 S3내의 내 버컷공간에 저장해 둔다.

그리고 Streaming program을 선택 후 Step을 추가해주면 된다.



Mapper, Reduce에서 싫행될 R Script를 각각 지정 후 Input, Output 장소도 지정한다.

Output의 경우 Reduce에서 실행되는 R Script의 실행 결과물이 파일로 저장된다.



위와 같이 최종 설정 후 Create cluster를 생성하면 EMR내에서 R Script가 실행가능하다.



참고
http://www.joyofdata.de/blog/mapreduce-r-hadoop-amazon-emr/
https://forums.cascading.io/index.php?/topic/9-unable-to-run-emr-bootstrapscript/
http://mrjob.readthedocs.org/en/latest/guides/emr-bootstrap-cookbook.html#ami-2-x-and-ami-3-x-version-differences


저작자 표시
신고

'R' 카테고리의 다른 글

R을 이용한 이상치 분석  (0) 2014.10.01
R on Hadoop and Amazon EMR  (0) 2014.08.19
R Oracle Connection  (4) 2014.02.24
R svn commit history 시각화  (0) 2014.02.21

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글이 없습니다.
secret

ggplot2로 차트를 생성 후 PDF를 저장하니 차트내 한글폰트가 깨지는 현상이 발생하였다.

(png나 svg등 타 파일형식은 문제 없이 동작했다.)


물론 한글폰트 문제라 생각하고 접근하였지만 당최 폰트도 설치하고 폰트설정도 해봤지만 문제는 해결되지 않았다.




> chart <- ggplot(week.store, ~ 생략 ~)

> ggsave(file="/home/y2kpooh/save/test.pdf", plot=chart)


위와 같이 실행하여 pdf를 생성하게 되면 한글폰트에 대하여 warning가 뜨게 된다.

warning()을 실행하여 메세지를 확인하면 한글폰트 생성 시 에러가 발생하여 위 그림 처럼 한글폰트가 깨지게 된다.


위 증상을 해결하기 위하여 device에서 pdf생성을 담당(?)하는 pdf(grDevices)를 확인해보니 폰트지정이 가능하더라.

그래서 이미 설치된 폰트로 아래와 같이 옵션을 지정하였다.


> pdf.options(family = "gulim")


그리고 다시 생성해보니 또다시 아래와 같은 에러가 발생했다... 젠장...


다음에 오류grDevices::pdf(..., version = version) : Invalid font type

추가정보:경고 메시지가 손실되었습니다
1: In grDevices::pdf(..., version = version) :
  font family 'gulim' not found in PostScript font database
2: In grDevices::pdf(..., version = version) :
  font family 'gulim' not found in PostScript font database


위 에러는 postscript에서 지원하는 폰트목록에 gulim폰트를 찾을 수 없다는 에레 메세지였다.

그래서 postscript에서 지원하는 폰트 목록을 확인해봤다.

> postscriptFonts()

 

$Korea1deb
$family
[1] "Batang-Regular"
$Korea1
$family
[1] "Baekmuk-Batang"

 

옳지 이제 될 것 같다!!! 자 다시 폰트설정 후 시도!!

> pdf.options(family = "Batang-Regular")


그러나.. 안된다... 폰트명 대소문자 이것저것 요것조것 다 해봤다... 역시나 안된다...
왜 안되는거냐..로... 3시간쯤 삽질했을때... 

> pdf.options(family = "Korea1deb")


젠장... $Korea1deb Attribute(속성)을 지정해줘야 된다는 걸 알았다... 하... ㅠ.ㅠ



요즘 빅데이터 이슈로 조금씩 R을 사용하는 개발자 분들이 많이 보이더라... 나같은 삽질을 하지 않기를 바라면 ~




저작자 표시
신고

'R' 카테고리의 다른 글

R 데이터프레임(DF) 조건 검색  (1) 2013.12.02
R PDF생성 시 한글폰트 깨짐 문제  (3) 2013.10.21
R을 이용한 중심극한정리  (3) 2013.08.02
rChart  (0) 2013.06.13

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글  3개가 달렸습니다.
  1. 제가 찾던 팁입니다. 덕분에 골치덩어리 하나가 해결됐네요. 감사합니다!
  2. 좋은 팁입니다. 제 문제를 쉽게 해결했습니다.
  3. 3시간 고생했다는 말에... 감사의 글 남겨요... 덕분에 쉽게 해결
secret

1. 중심극한정리?


중심극한정리(Central Limit Theorem, CLT)는 동일한 확률분포를 가진 독립 확률 변수 n개의 평균값은 n이 적당히 크다면 정규분포에 가까워진다는 정리이다. 수학자 피에르시몽 라플라스는 1774년에서 1786년 사이의 일련의 논문에서 이러한 정리의 발견과 증명을 시도하였다. 확률과 통계학에서 큰 의미가 있으며 실용적인 면에서도 품질관리, 식스 시그마에서 많이 이용된다.(위키 발췌)


2. R로 증명하기


데이터 샘플을 만들어보면...

1~6의 수를 가진 주사위를 5번씩 던지며 그 작업을 500번 반복하는 데이터를 R에서 제공하는 sample 함수를 통해서 만들어보면 아래와 같다.


sample <- matrix(sample(1:6, 5 * 500, replace = T), ncol = 5, byrow = T)

총 2500번을 던지고 주사위라는 가정이기 때문에 중복된 수가 나올 수 있으므로 replace 속성을 T(true)로 설정했다. 그리고 그 데이터를 matrix 함수로 matrix type으로 변환 후 sample이라는 변수에 저장했다.


head(sample)

head함수를 통해 sample데이터를 확인해보면 아래와 같다.


##      [,1] [,2] [,3] [,4] [,5]
## [1,]    6    5    4    2    6
## [2,]    6    6    1    1    6
## [3,]    6    6    1    4    4
## [4,]    6    2    4    2    2
## [5,]    1    5    3    1    4
## [6,]    1    6    1    2    6

이제 sample 데이터를 통해 각 열(row)별로 평균값을 구해보자.


각 열(row)별로 평균값을 구하는 방법은 여러가지가 있다.


rowMeans함수를 사용한 방법

rowMeans(sample)

apply함수를 사용한 방법

apply(sample, 1, mean)

위 두가지 방법은 동일한 결과값을 보이며 R은 col, row별 빈번하게 사용되는 sum, mean에 대한 함수를 제공하고 있다. (ex colMeans, colSums, rowSums 등)


head함수를 통해 확인해보면 아래와 같다.


head(rowMeans(sample))
## [1] 4.6 4.0 4.2 3.2 2.8 3.2


지금까지 작업했던 소스를 함수로 만들어 사용해보면 아래와 같다.


CLT <- function(no.throw = 5, no.rep = 500) {
    exp.res <- matrix(sample(1:6, no.throw * no.rep, replace = T), ncol = no.throw, byrow = T)

# return(apply(exp.res, 1, mean)) return(rowMeans(exp.res)) }

CLT함수를 실행(CLT())하게 되면 sample데이터의 rowMeans결과값을 얻을 수 있다.

그 결과값으로 히스토그램 차트를 그려보면 아래와 같다.


hist(CLT(no.throw = 5, no.rep = 50000), nclass = 20, col = "light grey", border = "grey", main = "Central Limit Theorem")

plot of chunk unnamed-chunk-2

주사위를 많이 던질 수록 정규분포에 가까워지는 걸 확인할 수 있다.




저작자 표시
신고

'R' 카테고리의 다른 글

R PDF생성 시 한글폰트 깨짐 문제  (3) 2013.10.21
R을 이용한 중심극한정리  (3) 2013.08.02
rChart  (0) 2013.06.13
[JRI] R Parsing data.frame to JSON  (1) 2013.06.11

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글  3개가 달렸습니다.
  1. 비밀댓글입니다
  2. 비밀댓글입니다
    • 안녕하세요 회사방화벽때문에 메일을 못드리고 댓글로 답변드립니다.

      강의요청은 감사하지만 제가 강의를 할만 큼 통계지식이 충분하지 못해서요 컴터쟁이라...^^;;

      중심극한정리 관련하여 자료를 찾아보시면 충분히 이해가 가능하시리라 생각됩니다.

      도움을 드리지 못해 죄송합니다.

      수고하세요~
secret

R에서 제공하는 DataSet을 이용하여 JSON형태로 변환해보자.


R에는 다양한 DataSet(data.frame 형태)이 내장되어있다.

DataSet 목록은 아래의 명령어로 확인 가능하다.


> library(help=datasets)


iris DataSet의 일부를 head 메소드로 확인해보면 아래와 같다.

> head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa


여러 DataSet중에서 위 명령어에서 확인한 iris DataSet을 JSON 데이터로 변환하는 작업은 R 언어 익숙하지 않다면 쉽지 않은 작업이다. 역시나 R 라이브러리 중 RJSONIO가 존재 한다. 해당 RJSONIO로 변환해보면 아래와 같다.


RJSONIO를 사용하겠다고 선언한다.

> library(RJSONIO)


toJSON 메소드에 변환될 iris DataSet을 넘겨주면 된다.

> toJSON(iris)


변환된 결과값은 아래와 같다.

{ "Sepal.Length": [ 5.1, 4.9, 4.7, 4.6, ...생략... 5.9 ],

"Sepal.Width": [ 3.5, 3, 3.2, 3.1, 3.6, ...생략... 3 ],

"Petal.Length": [ 1.4, 1.4, 1.3, 1.5, 1.4,  ...생략... 5.1 ],

"Petal.Width": [ 0.2, 0.2, 0.2, 0.2, 0.2, 0.4,  ...생략... 1.8 ],

"Species": [ "setosa", "setosa", "setosa", "setosa", ...생략... "virginica" ] }


물론 위 결과값은 문제가 없다. 하지만 내가 사용하고자 하는 JSON 구조와는 맞지 않다.

아래와 같은 결과물이 나오길 바랬다.

{"Sepal.Length":5.1,"Sepal.Width":3.5,"Petal.Length":1.4,"Petal.Width":0.2,"Species":"setosa"}


그래서 어찌어찌 JRI(rJava)에서 문자열을 받아서 simple.JSONObject로 꾸역꾸역 만들어는 냈으나.. 왠지 지저분한 느낌이 들었다.(해당 소스는 너무 지저분해서 생략....)


결국 R에서 직접 DataSet을 JSON으로 변환해주는 방법을 찾아보았으나... 검색을 해봐도... 죄다 영어고.. 자료도 없고 그렇다고 R 코딩을 할 수 도 없고 좌절하고 있었으나... 우연히 정말 우연히도 방법을 찾게 되었다.

(해당 변환함수의 출처를 잃어버렸음... @.@;;)


변환용 함수

> toJSONarray <- function(f){ + clnms <- colnames(f) + + name.value <- function(i){ + quote <- ''; + if(class(f[, i])!='numeric'){ + quote <- '"'; + } + + paste('"', i, '" : ', quote, f[,i], quote, sep='') + } + + objs <- apply(sapply(clnms, name.value), 1, function(x){paste(x, collapse=', ')}) + objs <- paste('{', objs, '}') + + res <- paste('[', paste(objs, collapse=', '), ']') + + return(res) + }


해당함수 실행

> toJSONarray(iris);


실행결과

[1] "[ { \"Sepal.Length\" : 5.1, \"Sepal.Width\" : 3.5, \"Petal.Length\" : 1.4, \"Petal.Width\" : 0.2, \"Species\" : \"setosa\" }, { \"Sepal.Length\" : 4.9, \"Sepal.Width\" : 3, \"Petal.Length\" : 1.4, \"Petal.Width\" : 0.2, \"Species\" : \"setosa\" }, ..생략..


대다나다.. 이로써 무식한 변환소스는 쓰레기통으로...


JRI을 이용하여 연계한 모습(rJava 소스는 생략...)


저작자 표시
신고

'R' 카테고리의 다른 글

R을 이용한 중심극한정리  (3) 2013.08.02
rChart  (0) 2013.06.13
[JRI] R Parsing data.frame to JSON  (1) 2013.06.11
JRI Java R Interface  (12) 2013.05.23

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. 혹시 json으로 R에서 보내고 java에서 받을때 어떻게 받는지 알 수 있을까요?
secret

JRI Java R Interface

R 2013.05.23 17:09

1. R 이란


R 프로그래밍 언어(줄여서 R)는 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다. 뉴질랜드 오클랜드 대학의 로스 이하카와 로버트 젠틀맨에 의해 시작되어 현재는 R 코어 팀이 개발하고 있다. R은 GPL 하에 배포되는 S 프로그래밍 언어의 구현으로 GNU S라고도 한다. R은 통계 소프트웨어 개발과 자료 분석에 널리 사용되고 있으며, 패키지 개발이 용이하여 통계학자들 사이에서 통계 소프트웨어 개발에 많이 쓰이고 있다.(위키백과 발췌)


2. R 설치 및 환경 세팅


2.1 R 설치

R은 공개 소프트웨어로 http://www.r-project.org/ 에서 다운로드 받아 설치가 가능하다.

Ubuntu 사용하고 있다면 apt-get으로 아래와 같이 설치하면 된다.


y2kpooh@pooh:~$ sudo apt - get install r - base


설치 후 터미널 창에서 R 명령어를 이용하면 R Console창으로 실행가능하다.

y2kpooh@pooh:~$ R


R version 2.15.1 (2012-06-22) -- "Roasted Marshmallows"

Copyright (C) 2012 The R Foundation for Statistical Computing

ISBN 3-900051-07-0

Platform: x86_64-pc-linux-gnu (64-bit)


R은 자유 소프트웨어이며 완전하게 무보증입니다.

일정한 조건에 따라 자유롭게 이것을 재배포 할 수 있습니다.

배포조건에 대한 상세설명은 'license()' 혹은 'licence()' 라고 입력해주세요


R는 많은 기여자들에 의한 공동프로젝트입니다.

더 자세한것에 대해서는 'contributors()'라고 입력해 주십시오.

또한, R 혹은 R 패키지를 인용하는 형식에 대해서는 알고싶으시다면 'citation()'라고  입력해주십시오


'demo()' 라고 입력하면, 몇가지 데모를 볼 수 있고, 'help()' 를 입력하게 되면 온라인 도움말을 볼 수 있습니다.

'help.start()' 를 입력하면 HTML 브라우저에 의한 도움말이 보여집니다.

'q()'라고 입력하면 R를 종료합니다


>


간략한 R 명령어 사용 예

(R언어의 대하여 자세한게 알고 싶다면 R을 이용한 데이터 분석 실무 참조 )

> print("Hello R")

[1] "Hello R"

> 1:10

[1]  1  2  3  4  5  6  7  8  9 10


2.2 rJava

Java와 R간의 인터페이스를 위하여 JRI(이하 rJava)를 설치한다.


2.2.1 rJava 란

JRI는 단일 스레드로 Java 애플리케이션에서 R을 실행할 수있는 Java / R 인터페이스다. 기본적으로 Java에 R 동적 라이브러리를 로드하고 R 기능에 Java API를 제공합니다. R의 기능과 전체 실행 REPL에 대한 간단한 호출을 모두 지원한다.

(http://www.rforge.net/JRI/)


2.2.2 rJava 설치

rJava 설치

y2kpooh@pooh:~$ aptitude install r-cran-rjava

환경변수 세팅

y2kpooh@pooh:~$ export R_HOME=/usr/lib/R

y2kpooh@pooh:~$ export CLASSPATH=.:/usr/lib/R/site-library/rJava/jri/

y2kpooh@pooh:~$ export LD_LIBRARY_PATH=/usr/lib/R/site-library/rJava/jri/


2.3 Eclipse 세팅


2.3.1 Java Application 빌드세팅

VM arguments : -Djava.library.path=/usr/lib/R/site-library/rJava/jri/ 추가


Environment R_HOME 추가


2.3.2 Maven 빌드세팅

VM arguments : -Djava.library.path=/usr/lib/R/site-library/rJava/jri/ 추가

Environment R_HOME 추가


2.3.3 JRI dependency 추가

<dependency>

<groupId>org.nuiton.thirdparty</groupId>

<artifactId>JRI</artifactId>

<version>0.8-4</version>

</dependency>


위와 같이 세팅을 하게 되면 이제 이클립스에서 rJava를 이용하여 R을 실행할 수 있다.


3. rJava Coding

(http://www.rosuda.org/R/nightly/JavaDoc/)

rJava를 이용한 간략한 실행 클래스이다 해당 클래스 생성 후 Run As -> Java Application 실행하면

아래 Result console화면에서 실행된 데이터를 확인 할 수 있다.

Example.java

import org.rosuda.JRI.Rengine;

import org.rosuda.JRI.REXP;


public class Example {

    public static void main (String[] args)

    {

         System.out.println("Creating Rengine (with arguments)");

         String[] Rargs = {"--vanilla"};

         Rengine re = new Rengine(Rargs, false, null);

         System.out.println("Rengine created, waiting for R");


         if (!re.waitForR()) {

              System.out.println("Cannot load R");

return;

         }


         REXP rn = re.eval("rnorm(4)");

         double[] rnd = rn.asDoubleArray();


         for(int i=0; i<rnd.length; i++){

              System.out.print(rnd[i] + " ");

         }

         System.out.println();


         re.end();

         System.out.println("Bye.");

   }

}


Result console

Creating Rengine (with arguments)

Rengine created, waiting for R

-0.4895186412991081 0.9995073716724703 -1.3400294093157445 -1.6906407959968786

Bye.

저작자 표시
신고

'R' 카테고리의 다른 글

R을 이용한 중심극한정리  (3) 2013.08.02
rChart  (0) 2013.06.13
[JRI] R Parsing data.frame to JSON  (1) 2013.06.11
JRI Java R Interface  (12) 2013.05.23

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글  12개가 달렸습니다.
  1. 안녕하세요 빅데이터를 공부하는 학생입니다.
    하둡을 이용하여 Map/Reduce한 결과를 R이 처리하도록 하고 싶은데,
    지금 현재는 RHive를 이용하여 쿼리를 하나씩 입력하여 R의 처리결과를 받고 있습니다.
    JRI를 어떻게 이용하면 가능할까요?
    • JRI도 결국 Java Runtime Interface를 통해 R을 실행시켜주는 기능을 합니다. JRI를 통해서 Java 객체를 R에서 사용하지는 못합니다.
      Map/Reduce로 결과물을 파일로 쓰고 R에서 해당 파일을 Read하는 형태면 가능할 것 같습니다.
  2. Map/Reduce로 결과물을 파일로 쓰고 R에서 해당 파일을 Read하는 형태로 진행하려고 하는데 어떻게 하면 가능할까요..??
    • JRI환경세팅을 우선 하시구요.
      Map/Reduce에서 job Class에서 waitforcompletion가 true일때
      R코드를 실행시키시면 될 것 같습니다.
      Map/Reduce에서 complete event 찾아보시면 되겠네요. ^^

      참고로 JRI보다는 rApache를 이용하시는 방법을 추천 드립니다.
      방법은 동일하겠네요~
  3. 안녕하세요, 일자가 꽤 지난 포스팅이지만 혹시나 싶어 질문드립니다.

    웹 로그 분석을 위해 rJava를 적용하고 있는데요,
    rJava에서 REngine.assign() 또는 Rengine.rniPutString()으로 값을 넘겨줄 때
    한글이 자꾸 깨져서 들어가 어려움을 겪고 있습니다.

    혹시 이와 같은 문제를 겪어보셨는지, 해결책이 있다면 공유 좀 부탁드립니다.^^;
    • 안녕하세요.
      REngine으로 R스크립트를 실행할때 한글이 포함되면
      R으로 넘겨진 R스크립트가 한글이 깨진체로 실행이 된다는 말씀이신가요?
  4. 지금 rJava에서 R로 넘어가는 과정에서 한글이 깨지는 것인지
    R에서 처리해주고 결과값을 넘겨받는 과정에서 한글이 깨지는것인지 확실히 모르겠어요.

    디버깅을 위해서라도 둘 중 어느 쪽인지 알아보려고 했는데
    제가 R을 이번에 처음 만져봐서, rJava에서는 명령어 호출만 하고 순수하게 R에서만 인풋을 넣어서 결과를 확인할 수 있는 방법을 못찾고있습니다.ㅜㅜ
    (예 : rJava에서 R코드로 파일에 한글문자열을 입력 후 저장하려고 했으나, 실패)

    인코딩이 문제인가 싶어서 확인해봤지만 크게 도움은 안됐었구요.
    • 그렇다면 rJava로 물려있는 R세션상에서 실행 history를 추출해서 R스크립트가 어떻게 실행되었는지 보시는 방법도 있겠네요
  5. Spring Framework환경에서 개발하고 있습니다.
    이클립스에서 환경설정하고 Server구동 후 웹을 화면에 띄우면 처음 한번은 예제대로 프로그램이 잘 실행이 되는데 두번째에는 Creating Rengine (with arguments) 부분에서 멈춰 버립니다.
    구글링하다보니 Native 환경변수라 안된다는 글이 있어서 System 환경변수로 바꿔서 해도
    같은 증상이었습니다.
    혹시 다른 해결책이 있을까요?
    • 안녕하세요.
      제가 시간이 좀 지나서 기억이 가물가물한데요..^^

      아마도 r입문자님께서 작성하신 코드에 R실행 Rengine객체를 R Script실행 시 마다 호출하셨을거라 예상되는데요
      해당 객체는 was(server)가 초기 실행 시에 해당 객체를 전역적으로 생성 후 R Script실행 시에 해당 객체를 재사용하는 방향으로 처리하셔야 됩니다.
  6. 다시 올립니다...^^;
    자바에서 Rengine으로 R 스크립트를 실행해 보고 있는데요...

    예를들어 arules 패키지에 있는 crossTable 함수를 사용하는 부분이 자바에서 실행이 안 되서요...
    jar 파일 지원도 없는 이런 패키지 함수들은 어떻게 해결해야 하나요?
    (ren.eval("wordtable <- crossTable(wordtran)"); //R-Studio에서는 실행되는데 자바에서는 null 값만 나옵니다;;;)
    • Rengine도 결국 R을 java에서 실행시켜주는 환경입니다.
      R-base기본 패키지가 아닌 외부 라이브러리 일 경우 library()함수를 이용하여 해당 라이브러리를 로드시켜야 합니다.
secret