Data Science by R and Python

統計学を、広く、深く、わかりやすく。

plotlyパッケージでグラフをシェアしよう! -Rによるグラフィックス-

Plotlyパッケージを紹介します。

PlotlyはRのグラフィックのライブラリで、グラフの作成や共有をインタラクティブに行えて、かつかなりハイレベルな図をブラウザーで表示できるという特徴を持っています。
実際、書いたものをアップロードして、URLでブログなどに張り込むということができるという点でとても実用的です。今回は、このplotlyを用いて、グラフを3つほどDemo的に作成します。

plotlyのインストール

まずは、インストールですが、Rのコンソールから次のようにdevtoolsを読み込みます。libraryで使ってない人は、installをしてください。

install.packages("devtools")
library("devtools")

次に、githubからplotlyをダウンロードします。plotlyには様々なapiが用意されており、今回はR版を使います。Python, Matlabなども対応しているようです。

devtools::install_github("plotly/R-api")

これで、インストールすることができました。ただしplotlyを使うためにはこれだけではダメで、https://plot.ly/のページからアカウントを作成してください。そして、アカウントを作成したら右上のsettingsからusernameとpassをコピーして、次の形でログインをします。

library(plotly)
p <- plotly(username="#ユーザーの名前", key="#APIキー")


これで、plotlyを使えるようになりました。

グラフの作成

さて、ここからはグラフの作成を行います。手始めに、次の用にコマンドを打ってください。それぞれの説明は、#で記述しています。

#データの作成
x0 = rnorm(500)
x1 = rnorm(500)+1

#データを表示方法を一緒に記述
data0 = list(x=x0,type='histogramx',opacity=0.8)
data1 = list(x=x1,type='histogramx',opacity=0.8)
layout = list(barmode='overlay')  
#
response = p$plotly(data0, data1, kwargs=list(layout=layout)) 
#ブラウザーの表示
browseURL(response$url)


すると、こんな感じのグラフを書くことができます。ちなみにオンライン上(https://plot.ly/~tomoshige_n/0)でも見ることができるのですが、iframeで張り込むこともできます。そして何より素晴らしいのは「インタラクティブ」であることです。見ていただくとわかるように、図の上にマウスをのせると、その箇所の数字がみれます!

ggplot2との連携

このplotlyはggplot2とも連携しています。実際ggplot2で描く図はとても奇麗なのでそれをオンライン上でパブリッシングして、さらにインタラクティブにできたら嬉しいですよね。そのためにggplotlyというコマンドが用意されています。実際に以下のようにコマンドを打ち込んでください。コマンドの説明は中に書いてあります。irisのデータを使っています。

library(ggplot2)
#ggplotでirisデータを可視化したもの
ggiris <- qplot(Petal.Width, Sepal.Length, data = iris, color = Species)
print(ggiris)

#plotlyでonline publishing
library(plotly)
py <- plotly("tomoshige_n", "APIキー")
res = py$ggplotly(ggiris)
#ブラウザを開く
browseURL(res$url)

この結果は次のようになります。これもオンラインでも確認できますが、iframeで張り込むことができます。つまり、ggplot2で作成した図もpublishingすることができます。

注)ただ、まだ対応していない部分もあるかもしれません...僕は、図を作成してpublishしたら図がおかしなことになったので...

MAPを書くことだってできます!

オンラインで、インタラクティブな図を作成する場合に、よく例に出されるのが「市町村と人口」を表示する図です。今回は「カナダ」の都市の人口を可視化してみます。

library(maps)
data(canada.cities)
#まずカナダの図(listで作成するところに注意してください)
trace1 <- list(x=map(regions="canada")$x,y=map(regions="canada")$y)
#カナダの都市の位置をx,yで指定して、その箇所につける「名称」をtextで指定。さらに各位置に対して、markerを付けて、マーカーの大きさはsizeで指定。opacityは透過性です。
trace2 <- list(x= canada.cities$long,y=canada.cities$lat,
	text=canada.cities$name,type="scatter",mode="markers",
	marker=list(
    	"size"=sqrt(canada.cities$pop/max(canada.cities$pop))*100,
    	"opacity"=0.5)
    )
response <- py$plotly(trace1,trace2)

url <- response$url
filename <- response$filename
browseURL(response$url)

すると、次のような図が作成できます。マウスオーバーでその都市の人口が見られるようになりました!

とにかく、データの可視化は大事!

先日のTokyoRの資料で「The R User Conference 2014 @ UCLA」という資料(The R User Conference 2014 @ UCLA )が公開されているのを拝見して、データを可視化するということにとても注目が集まっていることを再確認しました。
このブログでも少し前にshinyというRで作成するアプリケーションの話をしましたがそれもこの資料で取り上げられていることをみると、みんな可視化するにはどうすればいいのかといろいろと試行錯誤しているんだと思います。
実際、どんな場所でデータを解析した結果をみせても「図でみたい」と言われることは多いですし、図があれば統計を学んでいない人にも少なからず伝えることができる。そういった利点があるのだと思います。可視化周りは今後、もっと勉強していこうと思いました。

p.s.

最近、もっぱらカーネル法と、マルコフ連鎖の勉強をしていますが、、、とにかく数学をきちんとやってこなかったつけを今まさに払っています。これから統計を始める皆さんは、ぜひ数学を大事にして欲しいと思います...。