<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Colab on Marketechlabo</title><link>https://www.marketechlabo.com/tags/colab/</link><description>Recent content in Colab on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Mon, 10 Jun 2019 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/colab/index.xml" rel="self" type="application/rss+xml"/><item><title>Google ColaboratoryでRを使う</title><link>https://www.marketechlabo.com/r/google-colaboratory-with-r/</link><pubDate>Mon, 10 Jun 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/google-colaboratory-with-r/</guid><description>
&lt;p&gt;無料でPythonの実行環境を使わせてもらえるGoogle Colaboratory（以下、Colab）。現在の無料枠でも、T4やL4などの高性能なGPU、約12GB〜16GBのメモリ、そして100GB前後のディスクスペースが利用できる強力な環境であり、手元のPCよりハイスペックな人も多いだろう。&lt;/p&gt;
&lt;p&gt;データサイエンスの分野ではPythonが主流である一方で、Rユーザにとっては「PythonだけでなくRでも使えたらいいのに」と思うところである。実は、Colabのインスタンスには標準でRの環境が用意されており、用途に応じて複数のアプローチでRを利用することができる。この記事では、最新環境に合わせてColabでRを使い倒す方法と、その高速化テクニックを網羅的に解説する。&lt;/p&gt;
&lt;h2 id="rを使う3つの方法"&gt;Rを使う3つの方法&lt;/h2&gt;
&lt;p&gt;Colab上でRを実行するには、主に以下の3つのアプローチが存在する。用途やPythonとの連携の必要性に応じて使い分けるのがよい。&lt;/p&gt;
&lt;h3 id="スクリプトの実行"&gt;スクリプトの実行&lt;/h3&gt;
&lt;p&gt;Jupyterのノートブック上で、マジックコマンドの&lt;code&gt;%%script&lt;/code&gt;を使う方法である。Rに限らず、その言語がインスタンスにインストールされていれば使えるため、知っておくと非常に便利である。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;vanilla &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(x)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコマンドを実行すると、セルの中身がRのスクリプトとして解釈され、標準出力に結果が返される。&lt;code&gt;--vanilla&lt;/code&gt;ではなく&lt;code&gt;--save&lt;/code&gt;オプションを指定すると、実行終了時点でのワークスペース（&lt;code&gt;.RData&lt;/code&gt;）を保存する。次回開くときに&lt;code&gt;--restore&lt;/code&gt;とすれば、その&lt;code&gt;.RData&lt;/code&gt;を読み込んで状態を引き継ぐことが可能である。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;save &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 次のセルで以下を実行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%%&lt;/span&gt;script R &lt;span style="color:#f92672"&gt;--&lt;/span&gt;save &lt;span style="color:#f92672"&gt;--&lt;/span&gt;restore &lt;span style="color:#f92672"&gt;--&lt;/span&gt;quiet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただし、スクリプトの実行モードでは、処理の途中で変数の中身をインタラクティブに確認したり、プロットを画面にレンダリングしたりすることはできない。一つのセルで最後のアウトプットまで完結させる必要があり、探索的なデータ分析（EDA）のようなアドホックな用途には向かない。あくまで一時的なシェルの実行環境として割り切る必要がある。&lt;/p&gt;
&lt;h3 id="uiからrランタイムを選択する"&gt;UIからRランタイムを選択する&lt;/h3&gt;
&lt;p&gt;ノートブック全体をR専用の環境として使う（その場でプロットしたりオブジェクトを保存・再利用したりする）ためには、Rのランタイムを直接起動するのが最も王道である。&lt;/p&gt;
&lt;p&gt;かつては&lt;code&gt;.ipynb&lt;/code&gt;ファイルをローカルにダウンロードし、テキストエディタでJSONの&lt;code&gt;kernelspec&lt;/code&gt;を書き換えてから再アップロードするという非常に煩雑な手順が必要だった。しかし現在では、Colabの標準UIから簡単に切り替えることができる。&lt;/p&gt;
&lt;p&gt;Colabの画面上部メニューから「ファイル」を選択し、「ノートブックを新規作成」をクリックする。新しいノートブックが開いたら、メニューの「ランタイム」から「ランタイムのタイプを変更」を選択する。表示されるダイアログの中に「ランタイムのタイプ」というドロップダウンメニューがあり、デフォルトの「Python 3」から「R」に変更して保存するだけでよい。これで、マジックコマンドなしに全てのセルでRのコマンドをネイティブに実行できるようになる。&lt;/p&gt;
&lt;p&gt;ノートブックを新規作成する際のURLに&lt;code&gt;language&lt;/code&gt;パラメータを指定することで、最初から任意のカーネルを採用した状態、つまりRランタイムを選択した状態で開くことができる。頻繁にRノートブックを作成するユーザにとっては、このURLをブックマークしておくのが最も効率的である。Rの場合は以下のURLとなる。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://colab.research.google.com/notebook#create=true&amp;amp;language=r"&gt;https://colab.research.google.com/notebook#create=true&amp;language=r&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="python環境と共存したまま使う"&gt;Python環境と共存したまま使う&lt;/h3&gt;
&lt;p&gt;データの前処理は豊富なライブラリを持つPythonで行い、統計モデリングや可視化はRで行いたいというハイブリッドな用途には、&lt;code&gt;rpy2&lt;/code&gt;モジュールを利用した連携が最適である。この方法を使えば、Pythonのノートブック上でマジックコマンドを使える状況下を維持したまま、Python環境と共存してRを使うことができる。&lt;/p&gt;
&lt;p&gt;以下のコマンドをPythonセルで実行し、&lt;code&gt;rpy2&lt;/code&gt;モジュールを有効化する。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%&lt;/span&gt;load_ext rpy2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ipython
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、Pythonのコードブロックもそのまま使いつつ、マジックコマンド&lt;code&gt;%%R&lt;/code&gt;で始まるR専用のコードブロックを作ることができる。例えば、Colabの強みであるGoogle DriveのマウントをPythonで行い、そのデータをRで読み込むといった一連の流れが可能になる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Google Driveのマウント (Pythonで実行)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; google.colab &lt;span style="color:#f92672"&gt;import&lt;/span&gt; drive
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drive&lt;span style="color:#f92672"&gt;.&lt;/span&gt;mount(&lt;span style="color:#e6db74"&gt;&amp;#39;/content/gdrive&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# データファイルの取得と解凍 (シェルコマンド)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;!&lt;/span&gt;cp &lt;span style="color:#e6db74"&gt;&amp;#34;gdrive/My Drive/Colab Notebooks/train.csv.gz&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;!&lt;/span&gt;gzip &lt;span style="color:#f92672"&gt;-&lt;/span&gt;d train&lt;span style="color:#f92672"&gt;.&lt;/span&gt;csv&lt;span style="color:#f92672"&gt;.&lt;/span&gt;gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Rの有効化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%&lt;/span&gt;load_ext rpy2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ipython
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;続いて、同じノートブック内の別のセルでRを実行する。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;%%&lt;/span&gt;R
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# R側でデータを読み込み、プロットを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read.csv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;train.csv&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;library&lt;/span&gt;(ggplot2)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 仮に x_col, y_col という列があるとする&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;qplot&lt;/span&gt;(x&lt;span style="color:#f92672"&gt;=&lt;/span&gt;x_col, y&lt;span style="color:#f92672"&gt;=&lt;/span&gt;y_col, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;data)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;さらに、PythonからRに変数を渡したり、その逆を行ったりすることも可能である。PythonからRに変数を渡す場合は&lt;code&gt;-i&lt;/code&gt;オプションを使用する。&lt;/p&gt;</description></item></channel></rss>