R markdownを使って、pythonで分析レポートをいい感じに共有したい
RMarkdownとは?
Rstudioが開発している、分析レポート作成のためのパッケージ。Markdownを拡張して、Markdown内にRのコードを記述できるようにしたもので、HTML/PDF/Wordなどに出力が可能。
http://rmarkdown.rstudio.com/index.html
どんなことができるかは、下記を見てもらえればわかるかと思います
ざっくりRmarkdownの良さを書いておくと・・・
何かデータ分析のレポートをする時に、「Excelでピポッドテーブル作ったり、グラフを作ってレポートする」「Rやpythonでグラフや計算した結果をpptに貼り付けてレポートする」というような分析レポートの作り方をしていると、元のデータソースが更新された時に、ピポッドテーブルを作り直す/pptにコピペするなど、毎回毎回手作業が発生してしてしまいます。超めんどうくさいですよね。
最近、jupyter notebookもデータ分析共有のデファクトスタンダードになってきているとは思います。しかし、jupyter notebookはソースコードとその出力が1対1対応してしまっているので、エンジニア←→ビジネスサイドの間の共有の時に「ソースコードが邪魔で見にくい、結果だけでいい」なんてこともあるかと思います。(個人的にはjupyter notebookはエンジニア←→エンジニアの間のデータ分析の共有のツールだと思っています)
そんな時に、RMarkdownが役に立ちます。Rmarkdownであれば、ソースコードを含めることも、外すことも設定で簡単にできるので、エンジニア←→エンジニアの間の共有だけでなく、エンジニア←→ビジネスサイドの間の共有にも使えると思います。
Rmarkdownでpythonも動く!?
Twitterでこう言うツイートを見かけた。
The @rstudio R Markdown notebook will execute Python code from code chunks- very cool! #rstats #pydata pic.twitter.com/CjKGi146hY
— Kyle Walker (@kyle_e_walker) 2016年10月5日
どうやらpythonが動くらしい。公式にもpythonの動かし方が書いてある。・・・ということでやってみた。
ソースコード(.Rmd)
結果
HTMLをRPubsにあげたもの
PDFにした感じ
・・・という感じで、まぁpythonでも動いた
はまったこと/確認したこと
virtualenv下でのpythonをRmarkdownで使う
```{python}
って書いただけでは、システムのpythonを使ってしまうっぽい。自分は、もっぱらvirtualenv環境でpythonを動作させているので、なんとかしたかった。
```{python,engine.path = '/VIRTUALENV_PATH/bin/python3',echo=FALSE}
というように、engine.pathを指定すれば、virtualenvでもいけるっぽい。
参考:r - How can I specify rmarkdown to use python3 instead python 2? - Stack Overflow
pythonのimport
importするライブラリがインストールされていれば、普通にimportって書けば動く。 ライブラリが入っていない場合は、コンパイルエラーになる。
描画作成
matplotlibを試してみたが、単純にplotしただけではRmarkdownは描画してくれなかった。一度、画像として保存して読み込むというのが1つの方法らしい
参考:RStudio with python matplotlib graph - Stack Overflow
PDFで出力する際の設定
これは、pythonだからという訳ではないけどもRmdからPDF化する時に、日本語がエラーではまった。 https://kaz-ic.net/notes/20141224-rstudio-pdf を参考にさせてもらい、以下のように修正。
output: html_document: default pdf_document: latex_engine: xelatex monofont: Meiryo mainfont: Meiryo
チャンク間のメモリ共有ができない!?
Each Python chunk in an R notebook runs in a new instance of Python
ということなので、現状pythonの場合、複数チャンクにまたがる場合(実務のレポートの場合、ほぼ100%跨ると思う・・・)、結果をディスクに吐き出して、再度読み込むということが必要らしい。めっちゃめんどくさい・・・。
まとめ
こんだけ書きましたが、最後の最後で知った事実に衝撃を受けました。Rmarkdown+pythonを実務で使うのはまだ時期尚早っぽいなと思います。Rmarkdownでpythonを使うという変化球ではなく、同じようなことがpythonのみ実装で出来たり、jupyter拡張で出来たりしないかな?と思ったのですが、あまりいいのが見つからず・・・。
唯一、良さそうなのがpython実装のpweaveでした。ただ、githubのstarは少ない・・・。今度、時間があれば触ってみようかな。