Contenu connexe Similaire à RのffとbigmemoryとRevoScaleRとを比較してみた Similaire à RのffとbigmemoryとRevoScaleRとを比較してみた (20) RのffとbigmemoryとRevoScaleRとを比較してみた1. Rのffと
bigmemoryと
RevoScaleRとを
比較してみた
aa
Japan.R #2
2011/11/26
和田 計也
サイバー系
2. サイバー系
はじめに
※この発表は個人の
見解であり、所属する
組織の公式見解では
ありません。
2011/11/26 1
3. サイバー系
自己紹介
和田 計也(@wdkz)
静岡県袋井市出身
サイバー系企業でデータマイニングエンジニア職
創立記念日が3月18日
社長の出身地が福井県鯖江市
前職はバイオベンチャー
バイオマーカ探索してた
学生時代は枯草菌の研究
2011/11/26 2
4. サイバー系
Rの欠点
データはすべてオンメモリで保持する
メモリに載りきらないデータは解析できない。
SASはメモリに載りきらなくてもデータ解析可能。
2011/11/26 3
5. サイバー系
そこで
データはすべてオンメモリで保持しなくても
いいんじゃね?
必要なデータだけを都度メモリ上に置く
それ以外はディスク上のファイルとして置いておく
RDBSとかSASとかで一般的な方法
2011/11/26 4
6. サイバー系
搭載メモリ量以上のデータを扱えるパッケージ
ff
bigmemory
RevoScaleR
データをオンメモリ保持しない仕組みは
どれもだいたい同じ
2011/11/26 5
7. サイバー系
いつもの
それぞれに
一長一短が
あります!!
とよく言われる。
2011/11/26 6
8. サイバー系
なんだろう?
一長一短っ
て具体的に
何よ?
2011/11/26 7
9. サイバー系
一番いいのは
で、結局何
が一番いい
の?
2011/11/26 8
10. サイバー系
悩み無用
といった悩みを
今日は解消して
帰って下さい
2011/11/26 9
11. サイバー系
作者とか
ff
trueclusterって会社の中の人
GPL2ライセンス
Version 4.2.11
Bigmemory
Michael J. Kane and John W. Emerson
LGPL3ライセンス
Version 2.2.3
RevoScaleR
Revolution Analytics社
2011/11/26現在
ライセンス購入 年1,000$/人
Version 2.0.0
2011/11/26 10
12. サイバー系
インストール
ff
Install.packages(“ff”) #簡単
bigmemory
Install.packages(“bigmemory”) #簡単
RevoScaleR
Revolution Analytics社からRevolutionR Enterpriseを購入
しインストーラ(.exeとか.py)でインストール
#社内手続きとかも必要だしちょっと面倒
2011/11/26 11
13. サイバー系
まずは使ってみる
ff
ff.obj <- ff(1:10, filename=“ff.01”)
#ベクトル
ff.obj2 <- ff(1:10000, vmode="integer", dim=c(1000, 10))
#マトリックス
この例だとたまたま
ffdf.obj <- ffdf(ff.obj,ff.obj) 全部integer型ですね
#ffdf関数でデータフレームも可能
bigmemory
big.obj <- big.matrix(5,2, type=“integer”, init=1)
#マトリックス
RevoScaleR
my.data <- data.frame(x=1:100, y=100:1)
revo.obj <- rxDataFrameToXdf(my.data)
#データフレーム
それぞれ使えるクラスが違う!
2011/11/26 12
14. サイバー系
csvファイルの読み込み(きっとよく使う)
入力ファイル名
ff (ffdf) 出力ファイル名
air.ff <- read.csv.ffdf(file="AirlineDataAll.csv", header=TRUE,
asffdf_args=list(ff_args=list(filename="air.ff")),
colClasses=c(Year="integer", Month="integer",
DayofMonth="integer“, DayOfWeek="integer",
DepTime="integer", CRSDepTime="integer",
UniqueCarrier="factor", FlightNum="integer",
TailNum="factor", ActualElapsedTime="integer",
CRSElapsedTime="integer", AirTime="integer",
各カラムの型を
ArrDelay="integer", DepDelay="integer",
丁寧に指定する
のが安全 Origin="factor", Dest="factor",
Distance="integer", TaxiIn="integer",
*本来なら型は自動推定 TaxiOut="integer", Cancelled="integer",
してくれるのだが CancellationCode="factor", Diverted="integer",
AirlineDataAllはダメ。
最初の数千行ぐらいで CarrierDelay="integer", WeatherDelay="integer",
型推定していて、その型
が外れだとインポート途中
NASDelay="integer", SecurityDelay="integer",
でエラーとなる。 LateAircraftDelay="integer"
))
2011/11/26 13
15. サイバー系
csvファイルの読み込み(きっとよく使う)・続き
入力ファイル名 ; これを指定しないと共有メモリ上に
データを生成しちゃって大変なことになる
bigmemory
air.big <- read.big.matrix(“airline.csv”,header=TRUE,type="integer",
backingfile="air.bm“,descriptorfile=“air.bm.desc”)
出力ファイル名
RevoScaleR
air.rx <- rxImport(inData="AirlineDataAll.csv",outFile="air.xdf")
入力ファイル名 出力ファイル名
*RevoScaleRもffと同様に
型は自動推定してくれる。
FfdfでミスるAirlineDataAllは
RevoScaleRだと大丈夫だった。
2011/11/26 14
16. サイバー系
使用可能な型
ff
boolean, logical, quad, nibble, byte, ubyte, short, ushort,
integer, single,double,raw, factor, ordered, Date, POSIXct
かなり豊富。 やる気がみなぎる
bigmemory
integer, char, short 少ない。基本数値だけと思っててよい
RevoScaleR
…. 豊富。というかたぶん全部の型いける。(未確認生命体)
*なお、前ページのbigmemory用に読み込んだファイル「airline.csv」は
もとの「AirlineDataAll.csv」を数値データに変換したファイルです。
2011/11/26 15
17. サイバー系
ローカルディスク上のデータについて
ff
air.ff <- read.csv.ffdf(file="AirlineDataAll.csv", header=TRUE,
asffdf_args=list(ff_args=list(filename="air.ff")),
#air.ffというファイルが生成されるがこれは瞞し。実体はテンポラリフォルダ内
に大量に生成される
bigmemory
air.big <- read.big.matrix(“airline.csv”,header=TRUE,type="integer",
backingfile="air.bm“,descriptorfile=“air.bm.desc”)
#巨大なair.bmがデータの実体。air.db.descというテキストファイルにデータの実
体だとかカラム数、行数だとかが記載されている
RevoScaleR
air.rx <- rxImport(inData="AirlineDataAll.csv",outFile="air.xdf")
#巨大なair.xdfファイルがデータの実体
2011/11/26 16
18. サイバー系
データの主力と再ロードについて
ff
filenameオプションで指定した場合はそれ。
Filenameオプションで指定しなかった場合は
ffsave(air.ffdf, file=“air.ff”)
#↑みたいにして出力しておくとair.ff.ffDataが生成される
ffload(“air.ff”)#再ロード時は拡張子.ffDataはつけない
bigmemory
backingfileオプションで指定したファイルと同時に生成される.desc
ファイルも大事
air.big <- attach.big.matrix(“air.desc”)
#再ロード時はdescファイルを指定する
RevoScaleR
xdfファイルそのもの(特に気にかけておくことはない)
全ての専用関数、xdfファイルを指定する引数がある
2011/11/26 17
19. サイバー系
airlineデータの読み込みをしてみて
ただしテンポラリフォルダに生成される実体は
29ファイルで合計13,666MB だった
パッケージ 速度 生成データのサイズ メモリ使用量
ff 1337.356 1,371,623,837 ほぼ使用しない
bigmemory 1092.221 14,330,056,404 結構使う
RevoScaleR 1400.354 16,802,423,891 ほぼ使用しない
csvファイルからの読み込みでは速度的に絶望的に遅いものは無し。
生成されるデータのサイズも絶望的に大きすぎるものは無し。
ただし、bigmemoryはメモリを結構使う。一旦、共有メモリ上にデータを
置いてからファイルに書き出してる感じもする。なので、搭載メモリが
少ないマシンだとcsvファイルからの読み込みが絶望的に遅くなった。
2011/11/26 18
20. サイバー系
minとかmaxとか基本的な関数
ff
dim(air.ff), colnames(air.ff),min(air.ff[,1]), max(air.ff[,1]),
table(air.ff[,1]), sum(as.numeric(air.ff[,1])), head(air.ff)とか結構
使える
bigmemory
dim(air.big), colnames(air.big),min(air.big[,1]), max(air.big[,1]),
table(air.big[,1]), sum(as.numeric(air.big[,1])), head(air.big)とか
結構使える
RevoScaleR
皆さんの知っている関数は全て使えません。
dim, colnames, min, max, headあたりはrxGetInfo関数を使う
rxGetInfo(air.xdf, getVarInfo=TRUE, numRows=5)
tableはrxTable関数、sumはわかんね
2011/11/26 19
21. サイバー系
とはいえ
ffで、できないことも多々ある
データフレームを入力としたモデル式つかうやつ全般は全滅
randomForest(delay~., data=air.ff)
glm(delay ~., data=air.ff, family=“binomial(logit)”)
svm(delay ~,. data=air.ff)
#結構痛い...
apply関数族はapplyのみ
期待していたplyr::ddplyも使えなかった
例外的にffapply関数はあるので、行もしくは列単位で一気に
計算ってのはたぶんできる
bigmemory, RevoScaleRでは..
モデル式全滅
glm, k-meansはそれぞれ専用関数が実装されているため使える
bigmemoryはbiganalytics::applyが実装されている
RevoScaleRはバージョンアップのたびに新しい関数が実装されてい
く印象あり
2011/11/26 20
22. サイバー系
他の関数を一応列挙
ff (ffbaseパッケージ)
all.ff, any.ff, unique.ff,ffsort, ffapply...
bigmemory (biganalyticsパッケージ&bigtabulateパッケージ)
bigtable, bigsummary, bigkmeans, biglm, colsd, colvar...
RevoScaleR
rxImport, rxSort, rxMerge, rxChiSquaredTest, rxFisherTest,
rxKendallCor, rxPairwiseCrossTab, rxOddsRatio, rxLinMod, rxLogit,
rxPredict, rxKmeans, rxHistogram, rxLinePlot ...
2011/11/26 21
23. サイバー系
まとめ
ff、かわいいよff
ffの良い点
integer, factor, double等々、いろんな型を使える
ffdfでデータフレーム使える
minとかmaxとかtableとか、普段使ってる関数がそのまま使える
↑のはもしかしたらメモリ的にアウトな場合があるかもしれないがそんなとき
なffbaseパッケージを使えばいいかも
bigmemoryのダメな点
実はcsvファイルから読み込む時の(共有)メモリ使用量パねぇ
matrixしか使えない
integer, short, charの型しか使えない
RevoScaleRのダメな点
有償ライセンス
関数が全て専用のもの、しかもちょっとクセがあって使いづらい
しかもドキュメントがわかりづらい
ffの劣る点
glm, k-meansが使えない
ベクトルのサイズは2^31-1が上限(bigmemoryは2^52, RevoScaleRは不明)
データの再ロードに時間がかかる。(圧縮ファイルを解凍している感じ)
2011/11/26 22
24. サイバー系
最後に
Use R! 2011ではbigmemoryに関する発表もffに関する発表もあ
りませんでした。
ffは2007年から毎年あったのに…
RevoScaleR (Revolution R Enterprise)に関する発表はありま
した。
メモリの価格が下がってきたこともあり、数十ギガ程度のデー
タならオンメモリで処理しちゃう傾向にあるのかも
2011/11/26 23