R Tools for Visual Studio の紹介

 

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。【元記事】 Introducing R Tools for Visual Studio 2016/3/22

 

R はプログラム言語 (英語) の 1 つで、データ サイエンティストに広く使用されています。開発者はこの言語をデータ処理に使用するためのより強力なツールが出てくることを期待しています。データサイエンティストは R をプログラムの作成に使用していますが、その成果物はプログラムそのものではなく、R プログラムで生成された結果に基づいてレポートやプレゼンテーションを作成し、ビジネスの意思決定に貢献することです。

R Tools for Visual Studio (RTVS) はマイクロソフトの Visual Studio で R プログラムを作成するための新しいツールで、現在パブリック プレビューが提供されています。このツールは MIT ライセンスに基づいてオープン ソース化されていて (英語)、無料で配布されています。ダウンロードの手順はこちら (英語) をご確認ください。また、関連ドキュメントはこちら (英語) から参照できます。

下のビデオでは、RTVS の主な機能についてご紹介していますのでぜひご覧ください。

R 言語の概要

R は強力 (英語)動的型付き (英語) インタープリター型言語で、関数型言語 (英語) の一種であり、Scheme (英語)S 言語 (英語) など他の言語の影響を大きく受けています。ここでは詳細までは説明しませんが、以下の無料公開されているオンライン書籍で詳しく紹介されていますので、こちらもぜひお読みください。

  1. Advanced R (英語)
  2. The R Inferno (英語)

この記事では、この言語やライブラリについて皆様に興味を持っていただき、データ分析にお役立ていただけるように、R 言語やライブラリ、RTVS の概要について説明します。

R の使用を開始する場合、最も手軽な方法は Read-Eval-Print Loop (REPL、英語) を使用することです。このツールを使用すると、コマンドがインタラクティブに R インタープリターに送られます。RTVS では、R 対話型ウィンドウから R REPL を使用します。

下に示すように、 3 + 4 と入力すると R がすぐに演算結果を表示します。この際、コンパイルを実行する必要はありません。

 3 + 4
 [1] 7

R の強みはデータ処理です。そのため R では、表形式のデータセットを扱うのが得意な R データフレーム (英語) が、データ構造として最も頻繁に使用されます。データを R データフレームに読み込む方法は数多くありますが、おそらく URI から読み込む方法が最も簡単です。下記のコマンドを実行すると、米国内の空港の場所のデータの CSV ファイルが Github から読み込まれます。

 usa_airports <- read.csv("https://raw.githubusercontent.com/jflam/VSBlogPost/master/usa_airports.dat", stringsAsFactors = TRUE)

R では、変数を割り当てるときは <- 演算子を、関数を呼び出すときはかっこを使用します。上のコードでは R ライブラリ関数の read.csv() を呼び出し、CSV ファイルへの URI を渡しています。

REPL で ? 演算子を使用すると、任意の R ライブラリ関数のヘルプが表示されます。たとえば、read.csv API のヘルプを表示するときには REPL で ?read.csv と入力します。

次に、R 関数の head() を使用してファイルの冒頭の 5 行の概要を表示します。

 head(usa_airports)
 
      X   ID                            name         city       country
1  318 6891           Putnam County Airport  Greencastle United States
2 1104 6890      Dowagiac Municipal Airport     Dowagiac United States
3 1121 6889     Cambridge Municipal Airport    Cambridge United States
4 1470 6885  Door County Cherryland Airport Sturgeon Bay United States
5 1507 6884    Shoestring Aviation Airfield Stewartstown United States
6 1617 6883 Eastern Oregon Regional Airport    Pendleton United States
  IATA_FAA ICAO      lat        lon altitude timezone DST
1      4I7  \\N 39.63356  -86.81381      842       -5   U
2      C91  \\N 41.99293  -86.12801      748       -5   U
3      CDI  \\N 39.97503  -81.57758      799       -5   U
4      SUE  \\N 44.84367  -87.42156      725       -6   U
5      0P2  \\N 39.79482  -76.64719     1000       -5   U
6      PDT KPDT 45.69500 -118.84139     1497       -8   A
               Region
1    America/New_York
2    America/New_York
3    America/New_York
4     America/Chicago
5    America/New_York
6 America/Los_Angeles

head 関数は、テキスト形式で出力するだけの非常に簡素なものです。このような関数まで実装されているのは、R が 1993 年頃から存在するためです (英語)。次に、2016 年の今に合った新しい形式で出力してみましょう。 HTML はハードウェア アクセラレーションが可能なレンダリング プラットフォームとしてきわめて強力なものですが、これに R 言語をバインドするライブラリが多数存在します。R で、これを htmlwidgets for R (英語) というオープン ソース ライブラリ群を使用して行います。下に示すのは DataTable ウィジェットを使用して同じデータフレームをレンダリングしたもので、usa_airports データフレームのすべてのデータを含む HTML ページを生成し、既定のブラウザーを開いて、読み込まれたデータをインタラクティブな表として表示しています。このデータは完全にインタラクティブで、検索ボックスに「Seattle」と入力するとリアルタイムでフィルターが適用され、シアトル周辺の空港のみが表示されます。また、列見出しをクリックするとその列の内容に従って並び替えられます。

 library(DT)
datatable(usa_airports[,c("name", "city", "country", "IATA_FAA", "lat", "lon", "altitude")])

(画像をクリックするとインタラクティブな表が有効になります)

dataframe rendered using the DataTable widget

データをプログラムで扱うことも簡単で、この場合は Hadley Wickham 氏が作成した dplyr ライブラリ (英語) が広く使用されています。それでは、ニューヨーク シティ周辺の空港のリストを生成してみましょう。これは dplyrsubset 関数を使用すると簡単にできます。

 library(dplyr)
new_york_airports <- subset(usa_airports, city == "New York")
datatable(new_york_airports[,c("name", "city", "country", "IATA_FAA", "lat", "lon", "altitude")])

(画像をクリックするとインタラクティブな表が有効になります)

Example of interactive table

さらに複雑なフィルタリングも可能で、たとえば、ニューヨーク シティ付近で標高が 25 フィート未満の空港をすべて選択し、標高順に並べ替えて各行に空港の名前、標高、緯度、経度を表示します。

 low_nyc <- 
    usa_airports %>% 
    filter(city == "New York" & altitude < 25) %>% 
    arrange(altitude) %>% 
    select(name, altitude, lat, lon)
datatable(low_nyc)

(画像をクリックするとインタラクティブな表が有効になります)

Table with ordering

ここでは「パイプ」演算子 (%>%) が使用され、R の構文がより複雑になっています。この演算子は自然な形で処理を構成するもので、左から右の順に読み込みます。上の例では、まず usa_airports データフレームを取得し、city == "New York" & altitude < 25 という条件が真の行をすべて検出し、altitude 列の値で並べ替え、low_nyc 変数に格納された結果データセットから namealtitudelatlon の列のみを選択しています。

パイプ演算子の実装について興味を持たれた方は、magrittr パッケージ (英語) のサイトをご覧ください。また、magrittr が F# の前方パイプ演算子にどのような影響を受けたかについて書かれたブログ記事 (英語) も参考になるかと思います。

 

地図上にデータをプロットする

データセットが完成したら、次はこれをインタラクティブな地図にプロットしてみましょう。インタラクティブな地図を生成する場合は htmlwidget for R の Leaflet ライブラリ (英語) が便利です。前の手順では、dplyr を使用して、ニューヨークシティ周辺の標高が低い空港を含むデータフレームを取得しました。下のコードでは、先ほど説明したパイプ演算子を使用してこれを leaflet ライブラリに送り、マップ タイルを生成して、lon 列と lat 列から位置を指定してその地図上に円をプロットするように依頼します。さらに、この円をクリックすると name 列の内容がポップアップするようにします。

 library(leaflet)
map <- 
    new_york_airports %>% 
    leaflet() %>% 
    addTiles() %>% 
    addCircles(~lon, ~lat, popup = ~name, radius = 200, color="blue", opacity = 0.8)
map

Map showing low altitude New York City airports

 

まとめ

R については他にもお伝えしたいことがたくさんありますが、ブログでは時間とスペースに限りがあるので、ここまでとさせていただきます。この記事が、皆様が R に興味を持ち学習を始めるきっかけとなれば幸いです。R とそのライブラリについてこの記事で扱えなかったことは、以下にご紹介する資料を使って学習していただけると思います。

 

R プログラム言語の概要

  1. An Introduction to R (英語)』: 現在マイクロソフトの R チームに所属している David Smith (英語) の著書です。
  2. Introduction to R for Data Science (英語): R 言語学習者向けにマイクロソフトが提供する無料のオンライン クラスです。

主な R ライブラリ

  1. dplyr (英語): データ処理用の「d plyer」ライブラリで、分析可能な形式でデータを手早く処理する場合によく使用されるツールです。
  2. ggplot2 (英語): Hadley Wickham 氏が提唱したグラフィックスの文法 (英語) という考え方に基づいて構築されたプロット ライブラリです。
  3. ggvis (英語): ggplot2 と同様にグラフィックスの文法 (英語) の考え方に基づいて構築された、HTML キャンバスにプロットを生成するプロット ライブラリです。
  4. rodbc (英語): SQL Server などの ODBC に準拠したデータベースからデータを読み込むライブラリです。

マイクロソフトの R 言語関連製品

マイクロソフトは R への取り組みを強化しており、ツール、ランタイム、ライブラリを含むアプリケーション向けのフルスタックの R ソリューションを提供しています。

  1. R Tools for Visual Studio (英語): マイクロソフトが無料で提供するオープン ソース ツールで、Visual Studio で R の開発を行う場合に使用します。
  2. Microsoft R Open (英語): マイクロソフトが提供する R のクロス プラットフォーム (Windows/OS X/Linux) ディストリビューションです。Intel の Math Kernel Library (英語) との統合により線形代数計算のアクセラレーション (英語) が実現されています。また、checkpoint パッケージ (英語) との統合により、ユーザーが R プログラムを実行するときに、そのプログラムの作成時に使用されたバージョンと同じ R ライブラリ (英語) が使用されることが保証されます。
  3. Microsoft R Server (英語): システムのメモリよりも大きいサイズのデータセットで R の演算をアクセラレーションするときに使用するマイクロソフトのライブラリで、Microsoft R Open の上に構築されています。

追記

この記事ではさまざまなことをお伝えしましたが、最後にもう 1 つ重要なことをお伝えします。なんと、この記事は Visual Studioで作成されています。ドキュメントは RMarkdown (英語) で記述しています。これはマークアップ言語の Markdown (英語) の方言の 1 つで、実行形式の R コード スニペットを内部に埋め込むことができます。

ソース コードを Github で公開 (英語) していますので、どうぞご覧ください。

RTVS in Visual Studio

 

John Lam (Visual Studio 担当主任プログラム マネージャー)John Lam は、R Tools for Visual Studio、Python Tools for Visual Studio、Azure Jupyter Notebook Service のプログラム マネージャーを担当しており、データ サイエンティスト向け開発ツール チームと連携して作業を行っています。お問い合わせは Twitter (@john_lam) または Github (英語) までお願いします。また、Python の開発も行っています。jflam@microsoft.com でもご連絡をお待ちしています。