【R】rmarkdownでpythonをちゃんと動かす
rmarkdownでpythonを動かそうと思ったら、なかなか苦労したので、自分用の備忘録。なので、他の人が見ても何か分からないと思われます。。。
実は、この時点で一度pythonを使えるようになっていたのですが、それ以来、使ておらず、いざ使おうと思ったら、うまく動かずハマった次第です。。。
こちらやこちら、さらには、こちらも参考にさせていただきました。
1. python動かすぞ
rmarkdownに次のようなchunkを入れてknitします。
```{python}
```
2. minicondaのインストール
minicondaをインストールするように言われます。はい、インストールします。
環境としてbase
の他に、r-reticulate
ができます。こちらを使うようです。どのような環境があるかは、Anaconda のコマンドプロンプトから、下記の通りconda info --envs
コマンドで確認できます。
>conda info --envs
# conda environments:
#
base C:\<<user-path>>\AppData\Local\R-MINI~1
r-reticulate * C:\<<usesr-path>>\AppData\Local\R-MINI~1\envs\r-reticulate
指定の環境に移るには、conda activete
です。
>conda activate r-reticulate
(r-reticulate) C:\<<user-path>>\AppData\Local\r-miniconda\envs\r-reticulate>
3. パッケージのインストール
所定の環境に移動してから、pip install
します。
>pip install PyQt5
Collecting PyQt5
Using cached PyQt5-5.15.0-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl (64.5 MB)
Collecting PyQt5-sip<13,>=12.8
Using cached PyQt5_sip-12.8.0-cp36-cp36m-win_amd64.whl (62 kB)
Installing collected packages: PyQt5-sip, PyQt5
Successfully installed PyQt5-5.15.0 PyQt5-sip-12.8.0
こんな感じ。
4. アニメーション
アニメーションの作成には、いろいろあるのかもしれませんが、Imagemagick
が有名でしょうか?これにハマりました。。。matplitliib
でgifアニメを作りたかったのですが、なかなかできず。。。。
解決したのが、matplotlibrc
ファイルにImagemagickのパスを書いてあげることでした。matplotlibrc
は、僕の環境ではここにありました。
C:\<<user-path>>\AppData\Local\r-miniconda\envs\r-reticulate\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
このファイルをエディタで開き、最終行に次のパスを追加。
animation.convert_path : C:\Program Files\ImageMagick-7.0.10-Q16\magick.exe
テストのために、こちらを使わせていただきました。
--- title: "Python_Rmarkdown" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ```{python} import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() x = np.arange(0, 10, 0.1) ims = [] for a in range(50): y = np.sin(x - a) line, = plt.plot(x, y, "r") ims.append([line]) ani = animation.ArtistAnimation(fig, ims) ani.save('anim0.gif', writer="imagemagick") ani.save('anim.mp4', writer="ffmpeg") plt.show() ```
これで無事に動きました。プロットのアニメもバッチリ保存できています。こんな風に表示されます。
次の2つのファイルが保存されます。
これで安心して寝ることができます(笑)。これからは、Pythonも勉強します。