Python から R 言語を呼び出して実行する手順をまとめました。システムは CentOS 6.x を想定しています。
具体的には Python の PypeR ライブラリを使います。なので Python と R 言語と PypeR ライブラリをインストールすることになります。ただそれだけではまだ色々不便なので、numpy や pylab などの PypeR と一緒によく使うライブラリとまとめて環境を用意して使うことにします。
まず以下の手順を実行する上で前提となるライブラリ類と Python3 をまとめて導入しておきます。
次に pip をインストールします:
導入した pip を使って PypeR などのライブラリをインストールします(numpy や scipy などは結構時間がかかります):
最後に R 言語環境をインストールします:
これで全ての環境が整いました。では R 言語と導入したライブラリを使って動かす、以下の様な Python スクリプトを用意して実行してみます(なお、この Python スクリプトはここで紹介されているものです):
この内容を例えば python01.py という名前で保存し、python で実行すると以下の青字部分のような出力が確認できます:
Python スクリプト内で指定されている PypeR や Pylab などのライブラリが正しく読み込まれて実行することができました。
(参考)
https://gist.github.com/mia-0032/6378324
具体的には Python の PypeR ライブラリを使います。なので Python と R 言語と PypeR ライブラリをインストールすることになります。ただそれだけではまだ色々不便なので、numpy や pylab などの PypeR と一緒によく使うライブラリとまとめて環境を用意して使うことにします。
まず以下の手順を実行する上で前提となるライブラリ類と Python3 をまとめて導入しておきます。
# rpm -ivh http://mirror.yandex.ru/fedora/russianfedora/russianfedora/free/el/releases/6/Everything/x86_64/os/puias-release-6-2.R.noarch.rpm # yum install -y python3.x86_64 python3-devel.x86_64 python3-tools.x86_64 freetype* libpng-devel libjpeg-devel lapack-devel
次に pip をインストールします:
# curl -kL https://bootstrap.pypa.io/get-pip.py | python
導入した pip を使って PypeR などのライブラリをインストールします(numpy や scipy などは結構時間がかかります):
# pip install numpy # pip install pyper # pip install pandas # pip install scipy # pip install pylab
最後に R 言語環境をインストールします:
# yum install R
これで全ての環境が整いました。では R 言語と導入したライブラリを使って動かす、以下の様な Python スクリプトを用意して実行してみます(なお、この Python スクリプトはここで紹介されているものです):
# -*- coding:utf-8 -*- import numpy import pandas import pylab import pyper n = 200 # データの生成 score_x = numpy.random.normal(171.77, 5.54, n) score_y = numpy.random.normal(62.49, 7.89, n) score_x.sort() score_x = numpy.around(score_x + numpy.random.normal(scale=3.0, size=n), 2) score_y.sort() score_y = numpy.around(score_y + numpy.random.normal(size=n), 2) # 散布図を描く pylab.scatter(score_x, score_y, marker='.', linewidths=0) pylab.grid(True) pylab.xlabel('X') pylab.ylabel('Y') # Rで回帰分析 df = {'X': score_x, 'Y': score_y} df = pandas.DataFrame(df) r = pyper.R(use_pandas='True') # Rへデータ渡す r.assign('df', df) # Rのコマンド実行 print(r("summary(df)")) r("result <- lm(Y~X, data=df)") print(r("summary(result)")) #予測区間と信頼区間を算出するため new_x = numpy.arange(155, 190, 0.1) new_df = pandas.DataFrame({'X': new_x}) r.assign('new', new_df) # 予測区間(R) r("prediction <- predict(result, new, interval='prediction')") # 信頼区間(R) r("confidence <- predict(result, new, interval='confidence')") # Python側にとってくる lm_result = r.get('result$fitted.values') prediction = pandas.DataFrame(r.get('prediction')) confidence = pandas.DataFrame(r.get('confidence')) # 回帰直線, 予測区間, 信頼区間を描く pylab.plot(score_x, lm_result, 'r', linewidth=2) pylab.plot(new_x, prediction[1], 'g', linewidth=1) pylab.plot(new_x, prediction[2], 'g', linewidth=1) pylab.plot(new_x, confidence[1], 'c', linewidth=1) pylab.plot(new_x, confidence[2], 'c', linewidth=1) pylab.show()
この内容を例えば python01.py という名前で保存し、python で実行すると以下の青字部分のような出力が確認できます:
# python3 python01.py
try({summary(df)})
X Y
Min. :153.2 Min. :41.81
1st Qu.:167.1 1st Qu.:57.49
Median :171.3 Median :63.45
Mean :171.4 Mean :63.28
3rd Qu.:176.3 3rd Qu.:68.39
Max. :186.8 Max. :80.02
try({summary(result)})
Call:
lm(formula = Y ~ X, data = df)
Residuals:
Min 1Q Median 3Q Max
-8.389 -2.431 -0.233 2.405 10.974
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -106.42882 6.72661 -15.82 <2e-16 ***
X 0.99004 0.03921 25.25 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.67 on 198 degrees of freedom
Multiple R-squared: 0.763, Adjusted R-squared: 0.7618
F-statistic: 637.5 on 1 and 198 DF, p-value: < 2.2e-16
Python スクリプト内で指定されている PypeR や Pylab などのライブラリが正しく読み込まれて実行することができました。
(参考)
https://gist.github.com/mia-0032/6378324
コメント