Amazon RedshiftとRによるデータ分析をやってみる
RからRedshiftに接続する
Rは、フリーの統計解析ソフトです。様々なデータソースを扱うことができます。今回は、Redshiftをデータソースとして扱い、クエリーを実行してみたいと思います。
Amazon LinuxにRをインストールする
まずは、Amazon Linux上に後から必要になるパッケージを一通りインストールします。Amazon Linux-2015.3を用いています。
$ sudo yum install -y R git libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel mysql-devel
続けて、Rの管理コンソールを提供するRStudioをインストールします。
$ wget https://download2.rstudio.org/rstudio-server-rhel-0.99.473-x86_64.rpm $ sudo yum install -y --nogpgcheck rstudio-server-rhel-0.99.473-x86_64.rpm
RStudioは、Linuxユーザの名前とパスワードでログインしますので、新しくユーザを発行しておきます。
$ sudo useradd rstudio $ sudo passwd rstudio
さらに、ポート番号8787を使いますので、セキュリティグループでポートを開けておいてください、
RStudioにアクセスする
それでは、RStudioにブラウザからアクセスしてみましょう。
無事に動作を確認できました。
RJDBCとRedshift for Rのセットアップ
RからRedshiftへの接続はJDBCを用います。そのため、関連するライブラリをセットアップします。RStudioのコンソールから以下のパッケージをインストールします。
> install.packages("RJDBC",dep=TRUE) > install.packages("httr") > install.packages("RCurl") > install.packages("rversions") > install.packages("git2r") > install.packages("xml2") > install.packages("devtools") > devtools::install_github("pingles/redshift-r")
これでパッケージのインストールは完了です。動作確認をしてみましょう。
> require(redshift) Loading required package: redshift Loading required package: RJDBC Loading required package: DBI Loading required package: rJava
ライブラリのロードができました。Redshiftに接続してみます。今回はあらかじめRedshiftにサンプルデータをいれておきました。(世界中の地震に関するデータを用いています)
> conn <- redshift.connect("jdbc:postgresql://redshift_address:5439/dbname", "username", "password") > tables <- redshift.tables(conn) > cols <- redshift.columns(conn, schema="public","earthquake") > result <- redshift.query(conn, "select place,count(1) from earthquake group by place order by count desc")
検索結果を取得することができました。
今回は、緯度経度データも取得できましたので、地図上にプロットしてみたいと思います。
RでGoogleMapを扱う
ggmapというライブラリを用いてみます。
> install.packages('ggmap') > library(ggmap)
これでOKです。実際に地図を表示してみましょう。
> map <- get_map(c(139.6, 35.6)) > ggmap(map)
以下のような地図が表示されます。
geocodeを使うと地名から地図の場所を示してくれます。
> center <- geocode("tokyo") > map <- get_map(c(center$lon, center$lat), zoom = 3, maptype = 'roadmap') > ggmap(map)
GoogleMap上にRedshiftのデータをプロットする
それでは最後に、Redshiftから取得したデータをGoogleMap上にプロットしたいと思います。
> ggmap(map) + geom_point(data=result, aes(x=longitude, y=latitude), color='red', size=0.7)
たしかにプロットできました。地域を変えてもプロットされています。
> center <- geocode("ny") > map <- get_map(c(center$lon, center$lat), zoom = 3, maptype = 'roadmap') > ggmap(map) + geom_point(data=result, aes(x=longitude, y=latitude), color='red', size=0.7)
RからAmazon Auroraにも接続してみる
何のことはありません。MySQLと完全互換ですので、そのまま繋がるはずです。やってみましょう。まずはAuroraを起動しておきます。セキュリティグループで3306ポートを開けるのを忘れずに。
> library(RMySQL) > drv = dbDriver("MySQL") > conn <- dbConnect(drv,host="aurora_address",dbname="dbname",user="username",pass="password!",port=3306) > result <- dbGetQuery(conn,statement = "show databases")
とっても簡単に繋がりました。
Rserveを入れてTableauから接続する
さらにオマケでRserveを入れてTableauから接続してみましょう。
事前にAmazon Linux上でRserveが外部から接続できるようにする設定ファイルを用意しておきます。
$ sudo vi /etc/Rserve.conf pwdfile /etc/Rserv.pwd remote enable auth required plaintext enable $ sudo vi /etc/Rserve.pwd username password
続いて、RStudio上でパッケージをインストールします。
> install.packages("Rserve") > library(Rserve) > Rserve(args="--no-save --RS-conf /etc/Rserve.conf") Rserv started in daemon mode.
Tableauからの接続設定は、「ヘルプ」>「設定とパフォーマンス」>「R接続の管理」で行なってください。
これで、TableauからRserveを使えるようになりました。あとは煮るなり焼くなり...
まとめ
今回は、Amazon Linux上にRとRStudioをインストールしてから、Redshiftに接続をしてデータを取得し、GoogleMap上にプロットするところまでご紹介しました。まだ統計解析というレベルのものではありませんが、簡単にデータを扱えることについて雰囲気を掴んで頂けたと思っています。地図上にデータをプロットして分析をする場合には、Tableauを使えば直感的に操作できると思いますし、地図データ自体を加工したい場合には、Alteryxを使うことで細かな分析を行うことができます。さらに、このRやRStudioを用いることで、様々な統計解析のライブラリを組み合わせたデータ分析ができるのではないでしょうか。
参考資料
GETTING STARTED WITH TABLEAU 8.1 BETA & R – PART 1
Integrating Tableau and R for data analytics in four simple steps