SlideShare a Scribd company logo
1 of 22
R-3.0.0を使ってみてわかった1つのこと
2013/04/20
Tokyo.R#30
和田 計也
サイバー系
2013/04/20
はじめに
※この発表は個人の見
解であり、所属する組
織の公式見解ではあり
ません。
サイバー系
2
2013/04/20
u和田 計也(@wdkz)
u 静岡県袋井市出身
uサイバー系企業でデータマイニングエンジニア職
u 最近は奥華子ばっか聴いてます
u前職はバイオベンチャー
u バイオマーカ探索してた
u 学生時代は枯草菌の研究
自己紹介
サイバー系
3
2013/04/20
いきなりですが
サイバー系
u祝!!Tokyo.R 30回達成
u祝!!R-3.0.0リリース
4
2013/04/20
R-3.0.0の特徴
サイバー系
u 一番のハイライトは2^31-1以上の長さのベクトル対応
5
http://blog.revolutionanalytics.com/2012/07/big-
vectors-coming-to-r.html
2013/04/20
kohskeさんのまとめがめっちゃわかりやすい!
サイバー系
6
http://qiita.com/items/2d21344ba11d030c3cf0
挙動が微妙って...
2013/04/20
早速トライR-3.0.0
サイバー系
u 2^31-1の呪縛からの脱却っぷりを試してみよう!
u 使用データはもちろんairline(からカラム選択した)データ
・約1.2億行 x 6列
・使用マシンは244Gbyte メモリのやつ
・OSは64bit Ubuntu12.04
7
2013/04/20
(参考)怪物マシンは
サイバー系
u AWS利用した
8
スポットインスタンスなら$0.35/hrぐらい
2013/04/20
UbuntuマシンにR-3.0.0をセットアップ
サイバー系
u cranミラーとか利用するとapt-getで3.0.0が入らないよ
9
設定ファイルをちょいと変更
$ sudo vi /etc/apt/sources.list 
deb http://ppa.launchpad.net/marutter/rdev/ubuntu precise main
deb-src http://ppa.launchpad.net/marutter/rdev/ubuntu precise main
#(12.10の場合はquantalね)
$sudo add-apt-repository ppa:gwibber-daily/ppa
$ sudo apt-get update
$ sudo apt-get install r-base
↑これでR-3.0.0がインストールできる
http://www.personal.psu.edu/mar36/blogs/the_ubuntu_r_blog/
2013/03/moving-to-r-300-on-ubuntu.html
(2013/04/19現在)
2013/04/20
R-3.0.0起動
サイバー系
10
OSのメモリは240Gbyte弱
2013/04/20
airline.csv(カラム選択済み)読み込み
サイバー系
11
1.2億行程度なら2^31-1(≒21.4億)
まで達してないからR-2系でも
read.csv等でデータセットを読み込む
ところまでは可能だった
そもそもこのairlineどうやって作ってるよ?
って疑問を持った人は→の資料を参照
2013/04/20
(参考)R-2.15.3だともちろん爆死
サイバー系
12
Rのバージョンは2.15.3
読み込んだairlineは3Gbyte弱
読み込んだairlineは1.2億行 x 6列
はい爆死
OSのメモリは240Gbyte弱
2013/04/20
待望のR-3.0.0だと...
サイバー系
Rのバージョンは3.0.0
!?
あとは一緒
13
2013/04/20
待望のR-3.0.0だと...
サイバー系
14
u tracebackを見ると、glm関数内で呼び出してる
model.matrix関数でエラってるっぽい
!?
確かにmodel.matrix関数でエラーが再現した
2013/04/20
戦略
サイバー系
u R-3.0.0は2^31-1以上の要素数を持つmatrixを扱うことが
できるようになったが、model.matrix関数でデザイン行列
を作成しようとすると(デカいmatrixの場合に)エラーになる
u 仕方ないので以下のようにやってみた
i) Year毎にmatrixを分割して
ii) それぞれでmodel.matrixを適用させデザイン行列を
  作成して
iii) それぞれcsvファイルに出力して
iv) 全csvファイルを結合して
v) ↑この結合したcsvファイルをread.csvで読み込む
15
model.matrix後の要素数が2^31以上
2013/04/20
仕方ない...
サイバー系
16
#formula
object <- Cancelled ~ Year + Month + DayOfWeek + CRSElapsedTime + Distance
#NA除外しとかないとmodel.matrixの返り値とnrowが異なっちゃう
airline <- airline[-which(is.na(airline$CRSElapsedTime) |
is.na(airline$Distance)),]
chunk.level <- levels(as.factor(data[,chunk]))
for(i in 1:length(chunk.level)){
assign(paste("airline", chunk.level[i], sep=""),
subset(airline, Year==chunk.level[i]))
  assign(paste("mm", chunk.level[i], sep=""),
model.matrix(object,
data=get(paste("airline", chunk.level[i], sep=""))))
  write.table(get(paste("mm", chunk.level[i], sep="")),
file=paste("mm", chunk.level[i], ".csv", sep=""), sep=",",
col.names=ifelse(i==1,T,F), row.names=F, quote=F)
}
csv_files <- dir()[grep("^mmd{4}.csv$", dir())]
cmd_str <- paste("cat ", paste(csv_files, collapse=" "), " > mm.csv", sep="")
system(cmd_str)
airline.mm <- read.table("mm.csv", sep=",", skip=1, header=F)
clname <- as.character(read.table("mm.csv", sep=",", nrows=1,
stringsAsFactors=F))
colnames(airline.mm) <- clname 
read.csv使うと(メモリ量が充分でない場合に)コケる場合があった。
その場合はカラム名なしでread.table後にカラム名を付けるとOKだった
2013/04/20
デザイン行列のcsvファイルを作るまで
サイバー系
17
2013/04/20
デザイン行列を読み込む
サイバー系
18
2013/04/20
そしてGLMへ
サイバー系
19
2013/04/20
GLMの結果が出た!!
サイバー系
20
48G byte !!
2013/04/20
R-3.0.0の時代がやってきた。
サイバー系
21
u airlineのような1.2億行程度のミドルデータなら、メモリに
データを載せてRの標準関数で分析できる時代が到来した!!
ただし元データがR上で3Gbyte弱だったとしても、
glmするのに200G byte弱のメモリが必要...
2013/04/20
最後に
サイバー系
R-3.0.0を使ってみてわかった、ただ1つのこと
22
相変わらず memory not
mapped エラーは出ます!!

More Related Content

Viewers also liked (6)

R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
Fluentd,mongo db,rでお手軽ログ解析環境
Fluentd,mongo db,rでお手軽ログ解析環境Fluentd,mongo db,rでお手軽ログ解析環境
Fluentd,mongo db,rでお手軽ログ解析環境
 
TokyoR:RMarkdownでレポート作成
TokyoR:RMarkdownでレポート作成TokyoR:RMarkdownでレポート作成
TokyoR:RMarkdownでレポート作成
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
Rでコンジョイント分析
Rでコンジョイント分析Rでコンジョイント分析
Rでコンジョイント分析
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 

More from Kazuya Wada

RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 

More from Kazuya Wada (15)

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
 
DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

R-3.0.0でGLM