Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

22,756 views

Published on

Japan.R#2

Published in: Education
  • Be the first to comment

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

  1. 1. Rのffと bigmemoryと RevoScaleRとを 比較してみた aa Japan.R #2 2011/11/26 和田 計也サイバー系
  2. 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属する 組織の公式見解では ありません。2011/11/26 1
  3. 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  創立記念日が3月18日  社長の出身地が福井県鯖江市  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究2011/11/26 2
  4. 4. サイバー系 Rの欠点  データはすべてオンメモリで保持する  メモリに載りきらないデータは解析できない。  SASはメモリに載りきらなくてもデータ解析可能。2011/11/26 3
  5. 5. サイバー系 そこで  データはすべてオンメモリで保持しなくても いいんじゃね?  必要なデータだけを都度メモリ上に置く  それ以外はディスク上のファイルとして置いておく  RDBSとかSASとかで一般的な方法2011/11/26 4
  6. 6. サイバー系 搭載メモリ量以上のデータを扱えるパッケージ  ff  bigmemory  RevoScaleR データをオンメモリ保持しない仕組みは どれもだいたい同じ2011/11/26 5
  7. 7. サイバー系 いつもの それぞれに 一長一短が あります!! とよく言われる。2011/11/26 6
  8. 8. サイバー系 なんだろう? 一長一短っ て具体的に 何よ?2011/11/26 7
  9. 9. サイバー系 一番いいのは で、結局何 が一番いい の?2011/11/26 8
  10. 10. サイバー系 悩み無用 といった悩みを 今日は解消して 帰って下さい2011/11/26 9
  11. 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.02011/11/26 10
  12. 12. サイバー系 インストール  ff Install.packages(“ff”) #簡単  bigmemory Install.packages(“bigmemory”) #簡単  RevoScaleR Revolution Analytics社からRevolutionR Enterpriseを購入 しインストーラ(.exeとか.py)でインストール #社内手続きとかも必要だしちょっと面倒2011/11/26 11
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 24. サイバー系 最後に  Use R! 2011ではbigmemoryに関する発表もffに関する発表もあ りませんでした。  ffは2007年から毎年あったのに…  RevoScaleR (Revolution R Enterprise)に関する発表はありま した。  メモリの価格が下がってきたこともあり、数十ギガ程度のデー タならオンメモリで処理しちゃう傾向にあるのかも2011/11/26 23

×