【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も勉強します。

Add a Comment

メールアドレスが公開されることはありません。