ビッグデータの流行によって分析ツールが注目を集めています。それらのツールのうちの1つがプログラミング言語のRです。この記事では、テキストファイル、CSVファイル、データベースからデータを抽出し、Webサーバーへ送信する方法を紹介します。
また新しい言語を習得しなければならないのかと心配していませんか? 答えはノーです。ほんの少しのコマンドだけ知っていれば大丈夫です。
なにかしらのプログラミング言語でWebアプリケーションを作った経験のあるプログラマーであれば、Rにデータをインポートして処理をし、必要な形式に出力できます。
注意:もしRにまったく馴染みがなければSitePointの記事『Introduction to R and RStudio』がおすすめです。R言語の概要や基本コマンドが書かれています。今回の記事では、IDEのRStudioは使わずにターミナルで動くコマンドのみを紹介します。しかし、初心者にとってターミナルで大きいデータセットを扱うことは難しいので、より深く理解するためにはRStudioをおすすめします。RStudioでは、コンソール画面と同様のコマンドが動きます。
テキストファイルの扱い方
ローカル内のテキストファイルは、read.tableコマンドを少し変形して使えば読めます。テーブルを読むために設計されているので、空の文字列( "")をセパレータとしてセットすれば行ごとに読めます。
file_contents = read.table("<path_to_file>", sep = "")
注意:以降のコード例で<path_to_file>のような角括弧でくくられている中には適切な文字列や数値を角括弧なしで入力してください。
ファイルのパスは相対パスでも大丈夫です。もし列が同一でなければ、fill = TRUEをセットしてください。このコマンドのアウトプットの形式はRのデータフレームです。
もしファイルが大きすぎて一度で読み込めなければ、skipとnrowオプションを使って少しずつ読み込めます。たとえば、6-10行目を読み込ませたい場合、以下のようにします。
connection <- file("<path_to_file>")
lines6_10 = read.table(connection, skip=5, nrow=5) # 6-10 lines
CSVファイルの扱い方
CSV(comma-separated values)ファイルは文字どおり、カンマで区切られたデータです。read.csvコマンドを使えばCSVファイルを読み込めます。
file_contents = read.csv("<path_to_file>")
headerオプションはCSVファイルがヘッダーの列を含むかどうかを指定します。デフォルトではTRUEにセットされています(これはテキストファイルを読むときも指定されています)。 列の長さが等しくない場合は、こちらもfillにTRUEをセットする必要があります。
サイズの大きいファイルの場合は先と同じ方法で列を指定すれば読み込めます。
connection <- file("<path_to_file>")
lines6_10 = read.csv(connection, skip=5, nrow=5) # 6-10 lines
MySQLを使う
データベースの接続を確立するためにはRMySQLライブラリーが必要です。以下のコマンドでインストールできます。
install.packages('RMySQL')
一度インストールしておけば、以下のコマンドで起動できます。
library('RMySQL')
データベースが起動していれば、コネクションを確立したあとでMySQLのクエリを渡せます。
con <- dbConnect(MySQL(),
user="root", password="root",
dbname="nsso", host="localhost", port=8889)
もしMacのMAMPを使ってMySQLを使っているなら、unix.socketを指定します。
con <- dbConnect(..., unix.socket = "/Applications/MAMP/tmp/mysql/mysql.sock")
MySQLのクエリを実行するときは、最初にクエリを渡して、そのあとでデータをデータフレームで保存します。
rs <- dbSendQuery(con, "SELECT * FROM my_table;") # Make sure you run a LIMIT if your query is too large
data <- fetch(rs, n = -1)
クエリが完了したら、dbDisconnectコマンドでコネクションを切断します。
dbDisconnect(con)
Webのデータを読み込む
もしデータソースがWebにあったらどうすれば良いでしょう? どのようにしてオンラインのファイルを読みますか? Rではreadコマンドで指定しているファイルのパスを変更すればOKです。urlコマンドを使ってread.csvの中でURLを指定する必要があります。例は次のようになります。
file_contents = read.csv(url("<file_URL>"))
データベースではhostをWebサーバーのデータベースからデータを抽出するように変更できます。
データを出力する
read.csvやread.tableのように、writeコマンドを使えばデータフレームをテキストファイルかCSVファイルに出力できます。
write.csv(data_frame, file = "data.csv")
テキストファイルで異なった区切り文字(たとえばtabなど)で書き出すには、write.tableコマンドが使えます。
write.table(data_frame, file = "data.txt", sep = "\t")
データベースの更新は簡単です。MySQLのUPDATEとINSERTコマンドを実行すればできます。
グラフを出力する
一度データをRで処理してグラフを描画したら、グラフを出力できます。pngやjpegコマンドを使います。基本的に現在アクティブなグラフを保存します。
# Initiate Image
png(filename="sample.png")
# Make a plot
plot(c(1,2,3,4,5), c(4,5,6,7,8))
# Save the plot
dev.off()
理想を言えば、2つ目のコマンドを調整して、必要なグラフだけを保存するようにします。
Webにデータを出力する
Webへ直接ファイルをアップロードするのは少しややこしいですが、段階を踏めばできます。まずローカルにファイルを保存して、次にWebへアップロードします。RのPOSTリクエストを使えばWebにファイルをアップロードできます(httrパッケージを使ったときと同様です)。
POST("<upload_URL>", body = list(name="<path_to_local_file>", filedata = upload_file(filename, "text/csv")))
詳細は、httrパッケージのスタートガイドを参照してください。
最後に
ここ数年、統計を仕事にする人びとの間ではRはとても人気を集めていて、このすばらしい言語を学ぶには良いタイミングです。柔軟でさまざまなタイプのデータと同期でき、どのようなバックグラウンドの人でも簡単に処理できます。この記事がRを使い始めるきっかけになればうれしいです。
(原文:How to Import Data and Export Results in R)
[翻訳:萩原伸悟/編集:Livit]