PythonとRを連携する
マーケティング・ミックス・モデリングのパッケージが2022年4月末時点でRバージョンでしかなく、後々の運用を考えるとPythonをベースに実行したいと思い、PythonからRを実行する形で運用まで持っていく方法を検討しています。
やり方がわかり、かつ、これは今後の事も考えて、残しておくほうがいいと思いました。そこで今回は、PythonからRを実行して、Rの結果をPythonに引き渡す方法について解説していきたいと思います。
複雑なことをやるよりは、よりシンプルに連携する部分にフォーカスした解説を心がけています。
PythonからRを実行するに際しては、PypeRというライブラリーを使っていきます。Python環境にこのライブラリーを引き入れるのはPipになりますので、まず、Anaconda Promptで以下を実行しましょう。
(base) C:\Users\(ユーザー名)>pip install pyper
成功したら、ライブラリー+Rの実行のためのインスタンスの作成のためとして以下をJupyter Notebook上で実行します。
import pyper
import pandas as pd
r = pyper.R(RCMD=r"C:\Program Files\R\R-4.2.0\bin\R.exe", use_pandas='True')
RCMD=r"C:\Program Files\R\R-4.2.0\bin\R.exe"の部分は自分のR.exeが入っている場所を指定します。こちらの指定ですが、予めPathがここに通っていれば、この入力は不要なのですが、私の環境ではそのように設定したものの、できませんでしたのでRCMDは入力をしています。
また、use_pandasは指定しなくともデフォルトでTrueとなっているため特段ここで明言する必要性はないものではあります。
RのデータをPythonから取得
では続いて、PythonからRを実行するコードに移っていきます。以下を入力して実行してみましょう。
r("""
library(Robyn)
row_robyn = data('dt_simulated_weekly')
row_robyn_head = head(dt_simulated_weekly)
""")
r.get("row_robyn_head")
RのコードとしてRobynというマーケティング・ミックス・モデリングのパッケージを使っています。もし、Rにまだ入っていない方がいれば以下を実行してください。最初の2行が追加されただけのコードです。
r("""
install.packages("remotes") # Install remotes first if you haven't already
remotes::install_github("facebookexperimental/Robyn/R")
library(Robyn)
row_robyn = data('dt_simulated_weekly')
row_robyn_head = head(dt_simulated_weekly)
""")
r.get("row_robyn_head")
処理としてはかなりシンプルで、ライブラリーを読み込み、その中にあるデータセットの'dt_simulated_weeklyの先頭5行を取り出して、Pythonに戻しています。PypeRにるgetを使って(r.get)、Rの変数を指定すると、Python環境への取込みができるということが肝です。
これによって、以下のような実行結果が出れば成功です。
PythonのデータをRに連携・Pythonで再取得
では、次にPythonで操作したデータをRに連携してPythonで再度取得していく方法を解説していきます。まずはその状況がわかるように、前半のコードを変数(df_python)に格納して、一部データを変えておきましょう。
df_python = r.get("row_robyn_head")
df_python.iloc[0, 1] = "Python"
Pythonが入力されているため、このデータはPython内で新しく生成されたデータとなります。
では、これをRに連携して、Pythonで再取得するというコードを書いていきます。ステップバイステップでいくよりは、いきなり正解のコードを実行したほうがわかりやすいため、以下を使っていきましょう。
r.assign("df_python", df_python)
r("""
row_robyn_head_python = df_python
""")
r.get("row_robyn_head_python")
処理としてはassign(※割り当てるという意味です)というものに、Rに連携する"df_python" (←ダブルクオーテーションありの方)という名前でdf_python (←ダブルクオーテーションなしの方)を連携します。r()内の処理については、df_pythonで処理ができるため、同様に渡して処理を行い、row_robyn_head_pythonという名でデータをgetしていくという流れです。
結果として以下のようにpythonという名のものが取れていれば、無事に成功です。
以上で、PythonからRへの連携方法については、終了となります。いかがでしょうか?Pythonのライブラリーがまだないものの業務上で使えるRのライブラリーは豊富にあるので、両者を連携して実行するのはとても可能性が広がる気がしています。
Robynを使ったマーケティング・ミックス・モデリングをUdemyで解説する動画を作成しました。今なら限定100名まで無料で受講いただけますので、奮ってご参加ください。
※キャンペーン期間終了後は通常の値段に変わりますのでご注意ください
MMMについての整理について、以下でまとめましたのでぜひ併せてご確認ください。
また、MMMのスクールも運営してます。MMMをどのように推進していくかをEndtoEndで初めから終わりまで解説していますので、ご興味あれば覗いてもらえたらと思います。