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)
결과는 위와 같이 나왔다... 해서 rpy2 document 를 신나게 뒤져봐야겠다.
아무튼 결과적으로 성공(?) 했다.
PS. 응원은 삽질의 힘이 되어줍니다.
추가 : pandas 데이터 프레임으로 변환 처리 완료했다.
[Module] rpy2 (R 데이터프레임을 python/pandas 데이터 프레임으로 변환)
반응형