Blog

PythonからRを使えるようにした

私は大学でRを使って分析をしていたので、Pythonを始めた今もやはりRで分析したい時が多々あります。調べてみるとPython からRを利用できるライブラリのPypeRが最近人気とのことで、早速入れてみました。

インストールはpipで一発です。

pip install pyper

PypeRでPythonで整理したデータをRに渡したり、逆にRの結果をPythonで取り出すこともできます。

Pythonスクリプトの中でRを書きまくるのもなんだかな、と思ったので、基本的に外部のRスクリプトにデータを渡して処理をしてもらう方向で考えてみました。

 

まずRの外部ファイルを用意します。読み込んだデータから散布図をプロットしてpngで保存するスクリプトです。

quartz(type="png", file="result.png")
plot(data$spl, data$unpleasantness, xlab="SPL", ylab="Unpleasantness")
title(main="騒音", family="HiraKakuProN-W3", font.main=1)
dev.off()

次にPythonで以下のようにdataという変数にCSVデータを読み込みRに渡し、r()の中でRコマンドを実行します。

import pandas as pd
import pyper as pr

data = pd.read_csv('sampledata/noise.csv') #pandasでCSVの読み込み

r = pr.R(use_numpy='True', use_pandas='True') #Rのインスタンスの作成
r.assign('data', data) #PythonオブジェクトをRに渡す
r("source(file='scatterplot.R')") #Rのソースファイルを実行

これで、作業ディレクトリにresult.pngが保存されました。

result

また、r.getメソッドでRからPythonにデータを持ってこれます。

import pandas as pd
import pyper as pr

data = pd.read_csv('sampledata/noise.csv')

r = pr.R(use_numpy='True', use_pandas='True')
r.assign("data", data)
r("result <- summary(data$spl)")

result = r.get("result")
print(result)

['47.1' '57.7' '71.25' '67.9' '76.55' '84.6']

 

 

This Post Has 0 Comments

Leave A Reply