Rstudioでpythonを書く (reticulate)


Rユーザーの皆さんこんにちは。

Rって便利ですよね。
機械学習や様々な統計手法を使うのに便利なRですが、たまには「これpythonで書きたい!!」なんてこともあるかと思います。

そこで、今日は備忘録的な意味も含め、Rstudioでpythonを書く(実行する)方法などを書いていきたいと思います。

# reticulateとは
reticulateはRのパッケージの1つになります。
・Rstudioでpythonを実行
・pythonパッケージ(モジュール)のインストール
・***Rのオブジェクトをpythonで呼び出し***
・***pythonのオブジェクトをRで呼び出し***

主にできることは上記の4つになりますが、下2つが強烈です。
これを使うと「pythonでクローリング(データ収集)してデータフレーム化」>>「Rで分析・可視化」なんてこともできちゃいます。

また、Rの「View」関数は大きな利点で、pythonのデメリットである見づらいpandasデータフレームを一時的にRで目視確認することもできますね。


そして何よりも重要なのが***「わざわざgoogle colabやannacondaを起動しなくてよい !!!!」***ということです。

# reticulateのインストール/実行(R側)
パッケージのインストール、呼び出しはRの他のものと同じです。

```.r
> install.packages("reticulate")
> library(reticulate)

> #python起動
> repl_python()
>>> #pythonが起動されました
>>>
```

### ※注意点
reticulateの実行にはpythonのインストールが必要(なはず)です。
reticulate::use_python()で指定するそうなのですが、僕はうまくいきませんでした。。確認してみると、自分でインストールしたpythonとは別のバージョンが使われているようなのですが、ちょっとよくわかりません。。(記事書いときながらごめんなさい!!)
上の時点でエラーが出てしまう人は教えてください。。

# pythonを使ってみよう!

準備はたったこれだけです。それではpythonを使っていきましょう。

***Rとpythonどちらが使われているのかわかりづらいですが、コンソール画面が、
・Rは「>」(1つ)
・pythonは「>>>」(3つ)
になっています***

```.r
>repl_python()
>>>
>>> 1 + 1
2

>>> print("python3")
python3

>>> [i for i in range(4)]
[0, 1, 2, 3]

>>> #pythonを抜けるにはquitを使います
>>> quit
> 
> #Rに戻っています
```

完璧です。
オブジェクト名や関数などの入力補完(？)もRと同様、問題なく行われます。(((どっかの誰かさんとは大違い。

### pythonパッケージ(モジュール)のインストール

pythonを組み込み関数だけで使いこなすのは至難の技です(というか不可能)。
早速パッケージをインストールしてみましょう。

```.r
>>> import pandas as pd
ModuleNotFoundError: No module named 'pandas'
```

おやおや。エラーが出てしまいます。「as pd」なんて一言も触れられてません。
reticulateのpythonでパッケージやモジュールを使うには、
・reticulateにインストール
・pythonでインポート
を行う必要があります。
ややこしい。

一度、pythonを出てからインストールを行いましょう。

```.r
>>> quit
> 
> #py_install()を使います
> py_install("pandas")
```

完了メッセージが出たら成功です。これで、pythonで使えるようになります。

```.r
> repl_python()
>>>
>>> import pandas as pd
>>> 
>>> #これで読み込みが完了しました
```

### しかし、、、

これでもうまくいかない場合があります。たとえば言語処理に使われる「MeCab」です。

```.r
> #R側
> py_install("mecab")
エラー: one or more Python packages failed to install [error code 1]
```

このエラーが出た場合は、ちょっと厄介ですが次の方法をとりましょう。
condaからのインストール方法をとります。
まず、[https://anaconda.org](https://anaconda.org)で自分の欲しいパッケージを検索しましょう。
そしてplatformsが自分の環境にあっているものを選んで開き、次のようなコマンドを探してください。

```
conda install -c temporary-recipes mecab-python3
```

これはターミナルから実行する時のコマンドになりますが、これを利用します。
**conda install -c (チャネル名) (パッケージ名)**
というようになっているので、

```.r
> conda_install(channel = "temporary-recipes", packages = "mecab-python3")
>
# All requested packages already installed.
```

これで、無事インストールが終わりました。

```.r
> repl_python()
>>>
>>> import MeCab
>>> 
```

読み込みも問題ありません。
あまり深いところに詳しくないのでわからないのですが、パッケージ名がcondaとpythonで異なっているので、注意してください。

# reticulateを活用

reticulateの本領発揮はここからになります。

### Rのオブジェクトを呼び出し

Rで作成したオブジェクトをpythonで利用します。

```.r
> a <- 1
> repl_python()
>>>
>>> #「r.」で呼び出しが可能
>>> r.a
1.0
>>> r.a + 1
2.0
```

Rはnumeric、pythonではint型とfloat型が使われており、データ型が異なるので、何らかの変換が行われているようです。

もちろんデータフレームも使えます。

```.r
>>> r.iris
     Sepal.Length  Sepal.Width  Petal.Length  Petal.Width    Species
0             5.1          3.5           1.4          0.2     setosa
1             4.9          3.0           1.4          0.2     setosa
2             4.7          3.2           1.3          0.2     setosa
3             4.6          3.1           1.5          0.2     setosa
4             5.0          3.6           1.4          0.2     setosa
..            ...          ...           ...          ...        ...
145           6.7          3.0           5.2          2.3  virginica
146           6.3          2.5           5.0          1.9  virginica
147           6.5          3.0           5.2          2.0  virginica
148           6.2          3.4           5.4          2.3  virginica
149           5.9          3.0           5.1          1.8  virginica

[150 rows x 5 columns]
>>> 
```

### pythonのオブジェクトをRで呼び出し

今度は逆をやってみましょう。こちらの方が利用頻度は高いかもしれないです。

```.r
>>> b = 1
>>> quit
> 
>  #「py$」で呼び出し
> py$b
[1] 1
```

python > R でデータフレームを呼び出す場合、indexの情報が失われることもあるようですが、工夫次第でいくらでも活用できるでしょう。

# まとめ

こんなに便利なreticulateパッケージですが、まとめられているサイトが少なかったので、簡単にまとめてみました。

環境によって使えない、、!!などあるかもしれませんが、その際はコメントしてください。僕もあまりわからないので一緒に勉強しましょう笑

冒頭でも書きましたが、R、pythonそれぞれの利点を活かして、
**「pythonでクローリング、データ収集/加工したものをRに渡して分析/可視化」**
なんてことも簡単にできます。

Rstudioさえあればどっかのよくわかんないヘビさんをインストールして毎回起動する必要もないので、Rを利用している人、これからpythonを初めてみたい人にはとてもいいツールになるでしょう。