Development/Python

[Module] 파이썬에서 R 실행하기 (rpy2)

Dev. Jkun 2022. 6. 8. 06:21
반응형

파이썬에서 R 을 실행할 일이 있어서 일단 현재까지 사용가능한 방법은 모두 찾아보고 정리하고 있다. 그 중 먼저 rpy2 부터 보려고 한다. rpy2 가 제공하는 기능은 R 과 연동하기에 꽤나 훌륭하다.

  • rpy2.rinterface : 속도와 유연성이 가장 중요한 R 에 대한 저수준 인터페이스. R 의 C 레벨 API 에 가깝다.
  • rpy2.robjects : 사용 용이성이 가장 중요할 때 용이한 높은 수준의 인터페이스. 일반적으로 사용하기에 적합하다.
  • rpy2.interactive : robjects 에 기반을 두고 높은 수준의 인터페이스를 제공한다.

일단 위 3가지를 제일 유용하게 사용할 수 있는 것 같다. 대충 그렇게만 알고 내 목적에 맞게 테스트 해야겠다.
목적은 2가지다.

  • R 스크립트파일을 실행하여 실행결과를 파이썬에서 출력하는 것.
  • R 코드 또는 객체를 호출 / 실행하여 결과를 파이썬에서 출력하는 것.

먼저 R 의 describe() 함수 결과를 파이썬에서 출력해보자.

import rpy2.robjects as robjects
import pandas as pd

robjects.r('library(psych)') # psych 라이브러리를 불러온다.
x = robjects.r('x <- read.csv(toString("./rpy2.csv"), sep = ",", header = TRUE, encoding = "UTF-8")') # R 에서 csv 파일로드
des = robjects.r('describe(x)') # describe 함수 실행
print(des) # 출력

결과는 정상적으로 도출해서 출력했다. 여기서 야호~! 했는데... 이것을 pandas 모듈의 데이터프레임(DataFrame) 형식으로 전환해야 정상적으로 사용이 가능할 것 같다.

그래서 타입도 확인해보았다.

print(type(def))

# OUT : <class 'rpy2.robjects.vectors.DataFrame'>

이렇게 robjects.vectors.DataFrame 이란 형식으로 출력되었다.

그리고 위 R 코드는 다음과 같은 형식으로도 가능했다.

des2 = robjects.r('''
    library(psych)
    x <- read.csv(toString("./rpy2.csv"), sep = ",", header = TRUE, encoding = "UTF-8")
    describe(x)
''')
print(des2)
print(type(des2))

 

아무튼 위 결과를 pandas 의 데이터프레임 형식으로 바꿀려고 하는데 아직까지는 이것밖에 모르겠다;; 좀더 스마트한 방법을 찾고 싶어서 미치겠다..

toPandasDataFrame = pd.DataFrame({
    'vars': des2[0],
    'n': des2[1],
    'mean': des2[2],
    'sd': des2[3],
    'median': des2[4],
    'trimmed': des2[5],
    'mad': des2[6],
    'min': des2[7],
    'max': des2[8],
    'range': des2[9],
    'skew': des2[10],
    'kurtosis': des2[11],
    'se': des2[12]
})

print(toPandasDataFrame)

pandas DataFrame Type (toPandasDataFrame 출력)

결과는 위와 같이 나왔다... 해서 rpy2 document 를 신나게 뒤져봐야겠다.
아무튼 결과적으로 성공(?) 했다.

 

 

PS. 응원은 삽질의 힘이 되어줍니다.

 

추가 : pandas 데이터 프레임으로 변환 처리 완료했다.
[Module] rpy2 (R 데이터프레임을 python/pandas 데이터 프레임으로 변환)

반응형