Amazon RedshiftとRによるデータ分析をやってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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にブラウザからアクセスしてみましょう。

screenshot 2015-08-29 21.46.33

無事に動作を確認できました。

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")

検索結果を取得することができました。

screenshot 2015-08-29 23.37.29

今回は、緯度経度データも取得できましたので、地図上にプロットしてみたいと思います。

RでGoogleMapを扱う

ggmapというライブラリを用いてみます。

> install.packages('ggmap')
> library(ggmap)

これでOKです。実際に地図を表示してみましょう。

> map <- get_map(c(139.6, 35.6))
> ggmap(map)

以下のような地図が表示されます。

screenshot 2015-08-29 23.40.49

geocodeを使うと地名から地図の場所を示してくれます。

> center <- geocode("tokyo")
> map <- get_map(c(center$lon, center$lat), zoom = 3, maptype = 'roadmap')
> ggmap(map)

screenshot 2015-08-29 23.19.46

GoogleMap上にRedshiftのデータをプロットする

それでは最後に、Redshiftから取得したデータをGoogleMap上にプロットしたいと思います。

> ggmap(map) + geom_point(data=result, aes(x=longitude, y=latitude), color='red', size=0.7)

screenshot 2015-08-29 23.19.26

たしかにプロットできました。地域を変えてもプロットされています。

> 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)

screenshot 2015-08-29 23.46.09

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接続の管理」で行なってください。

screenshot 2015-08-30 2.40.06

これで、TableauからRserveを使えるようになりました。あとは煮るなり焼くなり...

screenshot 2015-08-30 2.36.12

まとめ

今回は、Amazon Linux上にRとRStudioをインストールしてから、Redshiftに接続をしてデータを取得し、GoogleMap上にプロットするところまでご紹介しました。まだ統計解析というレベルのものではありませんが、簡単にデータを扱えることについて雰囲気を掴んで頂けたと思っています。地図上にデータをプロットして分析をする場合には、Tableauを使えば直感的に操作できると思いますし、地図データ自体を加工したい場合には、Alteryxを使うことで細かな分析を行うことができます。さらに、このRやRStudioを用いることで、様々な統計解析のライブラリを組み合わせたデータ分析ができるのではないでしょうか。

参考資料

RedshiftとRでビッグデータ解析

Redshift for R

R and Google Map Making

R で GoogleMaps にプロットする

R Project

GETTING STARTED WITH TABLEAU 8.1 BETA & R – PART 1

Integrating Tableau and R for data analytics in four simple steps

HOW TO USE R-STUDIO WITH TABLEAU

Tableau&R連携(2) – AWS上に構築したRserveとTableau Serverでコンテンツを共有