dat.blog
dat
dat
nxdataka

データ分析の世界に惹かれて30代で分析会社に転職。数学・統計学・機械学習・プログラミングと色々苦しみ&楽しみながら勉強中

jupyter notebookでRを使う

これは何?

jupyter notebookでRを使うための設定と使い方です。
私は普段、Rのコードをガッツリ書く必要があるときはRStoduioを使います。が、ちょっとだけRのコードを試したいときや、コードの実行結果を配布したいとき1には、jupyter notebookを使います。 jupyter notebookの使い方に慣れていて、Rも使う機会があるよ、という人にオススメです。

Rカーネルを使う設定

パターン①Anaconda & Rを未インストールの場合

RもAnacondaで管理(Anaconda経由でインストール)してしまうのがいいと思います。
pythonのようにパッケージがpipとconodaで競合する、みたいなことが起こり得ないので、base環境や普段使っている環境に入れても問題はない…はずですが、pythonとRのパッケージを混ざて管理するのもなんとなく気持ち悪いので、conda createでR実行用に専用の環境を作ります。(その方が気分的にすっきりするため)。

以下、condaコマンドが使えるコンソール(Anaconda Promptか、パスが通ってるならコマンドプロンプトでもOK)で実行。

①-1.環境の作成と有効化

conda create -n renv python=3.6 -y
conda activate renv

※何をしている?
conda createで新しい環境を作っています。
-n renvで新しく作る環境をrenvという名前に指定しています。(renvの部分は任意の名前に置き換え可能)
python=3.6で新しい環境にインストールするpythonのバージョンを指定しています(3.6じゃなくてもいいし、この部分を丸ごと省略してもいいです2)。
-yはことあと出てくる確認にyesと答えるオプションです。(インストールを実行しますか?みたいな確認が入るので)
conda activateで作成した環境に入っています。macとかlinuxだとsource activateになるようです。

ちなみに環境から出るのはconda deactivate(macとかはsource deactivate)です。

①-2. R関係インストール

conda install -c r r r-irkernel r-essentials rstudio -y

※何をしている?
conda installでAnaconda cloudから必要なもの(下記)をインストールしています。-c rはAnaconda cloudのチャンネル指定です。R関係はrチャンネルから取得します。
2つ目のrはR本体です。Rのバージョンを指定したければr==3.6みたいな形式で指定してください。
r-irkernelはjupyterにRを認識させるためのRカーネルです。
r-essentialsはRでよく使われるRのパッケージ群です。
rstodioはRのIDEであるRStoduioをインストールしています。jupyterだけで使えればいい人には不要です。

おまけ:nbextensionのインストールと有効化

ここはオプションです。jupyterの拡張機能が不要なら飛ばしてください。

conda install -c conda-forge jupyter_contrib_nbextensions jupyter_nbextensions_configurator -y
jupyter contrib nbextension install --sys-prefix
jupyter nbextensions_configurator enable --sys-prefix

※何をしている?
jupyterの拡張機能を使う設定です。拡張機能が使えると何が嬉しいかについては調べたらたくさん情報が出てくるので、今更説明することもないかと。
たとえば、この投稿とか参考にしたらよいと思います。

1行目のconda installで拡張機能コレクション(jupyter_contrib_nbextensions)とインターフェイス(jupyter_nbextensions_configurator)を取得しています(いずれもconda-forgeチャンネルから取得)。
2行目で拡張機能本体(javascriptやcssファイル)を、pythonのsys.prefixにインストールしています。つまり、今有効化しているrenvの環境内に拡張機能をインストールしています3 4
3行目で拡張機能のインターフェイスを有効化しています。

以上で、パターン①の設定は終了です。

パターン②Anaconda以外 | Anacondaだが公式からRインストール済みの場合

すでに公式経由でRをインストールしている場合は、jupyterに認識させるR用のカーネルをインストールして登録するだけです。
Anaconda以外でRを未インストールの場合は、公式からR本体をインストールしてください。RStudioが必要なら、それもRStudioの公式から入れてください。
あとはもちろん、jupyter自体がインストールされていることも前提条件になります。

jupyter用Rカーネルのインストールと登録

Rで実行してください。

install.packages('IRkernel')
IRkernel::installspec()

※何をしている?
1行目でjupyter用のRカーネルをインストールしています。
2行目で、現在実行しているRをjupyterから利用できるように登録しています。
もし複数バージョンのRを使用している&それぞれのバージョンをjupyterで利用したい場合は、以下のように名前を指定して別々に登録してください。

# 複数のバージョンを登録する場合の例
# Rバージョン3.6で実行
IRkernel::installspec(name = 'ir36', displayname = 'R 3.6')
# Rバージョン3.4で実行
IRkernel::installspec(name = 'ir34', displayname = 'R 3.4')

※何をしている?
現在実行しているRをjupyterから利用できるように登録しているのは前述と一緒ですが、複数バージョンを分けて管理できるように名前をつけています。
nameの方がシステムで扱う名前、displaynameが画面で表示される名前です。
ほかのバージョンと名付けが被らないように、例みたいにバージョンを絡めた名前をつけるといいと思います。

おまけ:nbextensionのインストールと有効化

ここは前述のパターン①と同様にオプションです。
Anacondaの人はパターン①と同一内容を、Anaconda以外なら1行目をpipに変えて以下のように実行してください。

pip install jupyter_contrib_nbextensions jupyter_nbextensions_configurator -yjupyter contrib nbextension install --sys-prefix
jupyter nbextensions_configurator enable --sys-prefix

※何をしている?
パターン①で解説したので省略。

jupyterでRを使う

jupyter notebook起動

普通にコンソールから起動します。 ※パターン①で設定した場合は、conda activate renvをしてR実行用環境に入ってから起動。

jupyter notebook

ノートブックをRで新規作成

NEWをクリックすると、Rで新規notebookが作れるようになっていると思います。Rを選択してください。

new
※パターン②で複数のRを登録した方は、ここにdisplaynameで設定した名前が並びます。実行したいバージョンを選択してください。

使用例

あとは普通にnotebookを使います。セルにコードを書いて実行していくだけです。
install.packagesでのパッケージ追加も問題なくできますし、パターン①で導入した方はtidyverse群とか、有名なパッケージは導入済みです(r-essentialsを入れてあるので)。

いくつか例です。

データの表示

library(tidyverse)

df <- iris
df %>% head()
df %>% glimpse()
df %>% summary()

実行結果1 pythonのpandas.DataFrameのように、データフレームが綺麗に表示されています。

グラフ表示

df %>% ggplot() +
    geom_point(
        mapping = aes(
            x = Sepal.Length,
            y = Sepal.Width,
            color = Species
        )
    )

実行結果2

mpg %>% ggplot() + 
    geom_point(
        mapping = aes(
            x = displ, 
            y = hwy, 
            color = cyl
        )
    ) +
    facet_wrap(
        ~ class, 
        nrow = 2
    )

実行結果3

グラフもしっかり表示されています。 久しぶりに使ったけど、やっぱりggplot2はグラフが綺麗ですね。

覚えておくと役立つこと

ショートカット系

ショートカット系は通常のnotebookで使えるショートカット(shift + enterとか)に加えて下記が利用できます。
(RStudioと同じなので覚えやすいですね)

  • alt + -で代入演算子である左矢印(<-)
  • ctrl + shift + mでmagrittrのパイプ(%>%)
  • オブジェクト上にカーソルを置いてF1で、ドキュメント表示

F1での表示例:summary関数上でF1を押した場合 document

グラフ系

RStudioだとグラフ用のウィンドウでサイズが調整できますが、notebookだとそれができません。なので、グラフの縦横幅などをいじりたい場合はコードを書いて設定します。

  • グラフの縦横幅のコントロールはoptions

例:

options(
    repr.plot.width=10,
    repr.plot.height=8
)
  • グラフのフォントのコントロールはtheme_set

例:

theme_set(
    theme_gray(
        base_size = 18,
        base_family = ""
    )
)

base_familyで日本語フォントを指定すれば、日本語の文字化けに対処できます。
そのほか、themeについては公式をご確認ください。

公式リファレンス:

その他、これも覚えていたら役立つよ、ってのがあればコメントで教えてください。間違いのご指摘も歓迎です。


  1. 配布に関しては「RMarkdownを使えばええやん」ってのはごもっともなんですが、しばらく使わないうちに書き方を忘れちゃったので…

  2. R専用環境作るのになんでpython?という疑問はごもっともですが、conda createで環境を作るとpythonは必ずインストールされます。なので、一応使い慣れたバージョンを指定しているだけです。どうせこの環境ではpythonは使わないので別に省略してもいいのですが、何のバージョンが入るのかおまかせにするのも気持ち悪い、という気分的な問題です。

  3. sys.prefixについては詳しくは公式ドキュメントをどうぞ。

  4. ※過去にbase環境や他の環境で--user--systemを使って拡張機能をインストール済み&有効化済みかつ、それらの環境と同一の拡張機能の設定を使いたいならば、2行目以降の実行は不要です。その場合、conda createで作った環境の外(ユーザーディレクトリかシステムディレクトリ内のjupyterディレクトリ)に拡張機能がインストールされているため、すでに環境を横断して拡張機能が利用できるようになっています。