Rをノートブック形式で利用する

### Jupyter (iPython)
Pythonでちょっとしたスクリプトを作成するときは，iPythonのnotebookという，ノートブック形式の環境をよく使用しています。オリジナルを残したまま，必要な部分だけ別のセルにコピーしてあれこれ試してみたり，メモとスクリプトをひとまとめに残しておけるので非常に便利です。

そして，RではもっぱらRStudioを使っています。RStudioも非常に強力で便利なのですが，メモやノートを取りながら作業したい時には，ノートブック形式の環境が欲しいと思っていました。Mac版のRStudioのエディタでは，日本語入力時に未確定文字が表示されないなど，日本語の扱いにやや問題があり，また自分のコメントの入れ方が悪いせいもあるのでしょうが，コメントにメモを入れたりしていてもだんだん収拾がつかなくなってくることがあるからです。

そしてつい先ほど，別の調べ物をしていた際に，iPythonがいつの間にやらJupyterと言う名前になって拡張されていることを知りました。名前を変えたのは，Python以外の言語への対応を本格化させるためのようです。Jupyterと言う名前の由来はJulia + Python + Rと言うことで，PypeRなどのパッケージでPythonからRを使うようなことをしなくても，notebookでそのままRを使うことができます。

早速インストールして試してみたところ，なかなか良い感じだったので簡単な記録を残しておきます。この記録自体，Jupyterで作成してMarkdownとしてダウンロードしたものです。JupyterのインストールやJupyterでRを使う環境の構築方法についてはまた別にまとめたいと思います。

### RをJupyterで使う
Jupyterのノートブックを起動してサーバに接続したら，新規ファイルを作成する際に`R`を選択してRのノートブックが作成されます。PythonとRを１つのノートに混在させることはできないようです。

![screen01.png](https://qiita-image-store.s3.amazonaws.com/0/106317/792b4794-bf8f-7581-da60-e0554c49bdf2.png "screen01.png")


ノートブックが起動したら，`Code`セルにRのコマンドをそのまま入力します。以下は，Rのサンプルデータを使って簡単にテストしてみた結果です。普段，変数名に日本語を使うことはまずありませんが，環境テストも兼ねてあえて変数名に日本語をつけてみます。


```R
体格データ<-women
colnames(体格データ)<-c('身長','体重')
head(体格データ)
```


![スクリーンショット 2016-04-23 15.16.38.png](https://qiita-image-store.s3.amazonaws.com/0/106317/7af4d9b2-7bf6-2fa1-1ebe-78eac3662d4f.png "スクリーンショット 2016-04-23 15.16.38.png")



変数名の日本語は問題なく表示されました。また，とくに何もしなくても，データが罫線つきの表で表示されます。

次はデータをプロットしてみます。


```R
plot(体格データ)
```


![output_3_0.png](https://qiita-image-store.s3.amazonaws.com/0/106317/1ea6106d-96a2-6572-f675-c1f8d8c1e616.png "output_3_0.png")


軸タイトルの日本語が正しく表示されませんでした。それに，プロットのサイズがちょっと大きすぎる気がします。

[このページ](http://blog.revolutionanalytics.com/2015/09/resizing-plots-in-the-r-kernel-for-jupyter-notebooks.html)によれば，JupyterのR環境は`repr`というパッケージを使用しており，そのオプションを設定すればプロットのサイズを変更できるようです。初期値では縦横とも`7`のサイズになっているので，それぞれ`4`に変更します。


```R
options(repr.plot.width=4, repr.plot.height=4)
plot(体格データ)
```

![output_5_0.png](https://qiita-image-store.s3.amazonaws.com/0/106317/129fc55c-9a4f-3981-e71d-5dc8ab0cdadf.png "output_5_0.png")


これで随分スッキリしました。

ですが，このままではまだ日本語が正しく表示されていません。色々と検索してみましたが，なかなか解決策らしきものが見つかりません。さてどうしたものか……。

そしてふと思いつきました。もしかしたら`repr`にフォント関連のオプションがあるんじゃないか。

その通りでした。プロットのオプション（詳細は[reprのページ]('https://github.com/IRkernel/repr/blob/master/R/options.r')参照）には，フォントファミリーを指定するための`repr.plot.family`という項目があります。

そこで，このオプションを使用してフォントファミリーに**ヒラギノ角ゴシック**（Hirakaku-Pro-W3）を指定してみます。


```R
options(repr.plot.width=4, repr.plot.height=4, 
        repr.plot.family='Hirakaku-Pro-W3')
plot(体格データ)
```

![output_7_0.png](https://qiita-image-store.s3.amazonaws.com/0/106317/69bfdfae-3fba-6d94-ced3-9633804e0d01.png "output_7_0.png")


大正解！ 見事，日本語を正しく表示させることができました。なお，`repr`のオプションは一旦変更するとそれ以降はずっと有効なので，フォントの変更だけであれば`options(repr.plot.family='Hirakaku-Pro-W3')`だけでも大丈夫です。

*注：ファイルをMarkdownとしてダウンロードした時，Zipされたファイルにはグラフは`png`形式と`svg`形式の２通りが含まれていますが，`png`の方は日本語の表示がうまくできていませんでした。`svg`の方は問題ありません。上の画像はもともと出力された`png`ファイルではなく，`svg`を変換して作成したものです。*


~~*注2：最近のバージョンでは，インライン表示はPNG形式がデフォルトになっており，そのままでは日本語が正常に表示されません。日本語を表示させるには，さらに次の１行を追加してください。これでインライン表示画像がSVG形式になり，フォントの設定が反映されるようになります。(2016/11/28 追加)*~~

> 上の記述は正しくありませんでした。別の端末で試してみたところ，下のオプションで画像形式を変えても日本語は正しく表示されません。

> ```R
options(jupyter.plot_mimetypes = "image/svg+xml")
```

> 今のところ，次のように`Cairo`パッケージを使用してフォントの設定を行うことで，`png`でも`svg`でも（少なくとも自分の環境では）日本語が表示できています。

> ```R
require(Cairo)
CairoFonts(regular = "Rounded M+ 2p Regular")
```

基本的なところが確認できたので，少しだけ統計らしいことをしてみます。ここでは`psych`パッケージを使って基本的な記述統計を表示させます。なお，`psych`パッケージがインストールされていない場合には，`install.packages(psych)`としてパッケージをインストールする必要があります。ここはメニューから選択するだけでインストールできるR Studioの方が（若干ですが）楽な部分です。


```R
library(psych)
describe(体格データ)
```



![スクリーンショット 2016-04-23 15.16.53.png](https://qiita-image-store.s3.amazonaws.com/0/106317/9035921d-4fc9-704b-b8a5-1c9b70e761bd.png "スクリーンショット 2016-04-23 15.16.53.png")


これも問題なく表示できました。また，これはMac版だけなのかもしれませんが，R Studioで変数名に日本語を使用した場合，横方向の空白の幅がおかしくなり，結果が非常に見づらくなってしまうことがあります。しかし，この結果を見る限り，Jupyterでは変数名に日本語を使用した場合でも，とくに表示の上での問題はなさそうです。

### 結論
まだほんの数時間使ってみただけですが，これはかなり使えそうです。R Studioから完全に乗り換えてしまってもいいかもしれません。

以下，個人的な感想ですが，R Studioと比べて良いと感じた点と，R Studioの方が便利に感じる点を挙げておきます。

**Jupyterの方が良いと思う点**

* R Studioより動作が軽快（な気がする）
* 値の一覧が罫線つきの表で表示されるなど，出力が見やすい
* 日本語の変数名を含む場合でも表示がずれたりしない
* スクリプトと結果，グラフ，メモをひとまとめにできる

**R Studioの方が良いと思う点**

* パッケージのインストールが簡単
* ワークスペース一覧や変数一覧へのアクセスが楽