ビッグデータ時代を迎え、さまざまな大規模なデータを分析するニーズが高まってきています。
本書では、フリーの統計処理言語であるR言語を使った大規模処理や並行処理の手法を解説しています。
そのほかにもHadoopとの連携なども解説しており、Rを使って大規模なデータマイニングなどのデータ処理を行いたい人の必携の書籍となっています。
はじめに
CHAPTER 1 ビッグデータ時代とR
1.1 Rはビッグデータ時代のデファクトスタンダード
1.2 Rが克服しなければならない課題
1.3 本書で使用するデータ
CHAPTER 2 Rでのビッグデータ分析
2.1 スモールデータの分析
2.1.1 データの選択
2.1.2 前処理
2.1.3 データマイニング
2.2 ビッグデータの分析におけるRの限界
2.3 Rを用いたビッグデータ分析に向けて
CHAPTER 3 大規模データの加工
3.1 必要な加工処理
3.2 Pythonを用いた加工
3.3 Perlを用いた加工
CHAPTER 4 並列計算
4.1 並列計算とは
4.2 Rにおけるパフォーマンスチューニング
4.2.1 ベクトル処理によるループ演算の効率化
4.2.2 ベクトル処理のモンテカルロ積分への適用
4.2.3 applyファミリーによる効率化と限界
4.3 並列化できる処理・分析の例
4.3.1 層別集計
4.3.2 k平均法
4.3.3 ブートストラップ法
4.3.4 ランダムフォレスト
4.3.5 機械学習の予測モデル構築・評価
4.4 Rでの並列計算方法
4.5 並列計算における乱数生成
4.6 ロードバランシング
4.7 各パッケージの概要と用途
4.7.1 各パッケージの概要
4.7.2 用途に応じたパッケージ選択
4.8 snowパッケージ
4.8.1 クラスターの生成と終了
4.8.2 並列計算の実行
4.8.3 k平均法の並列計算
4.8.4 ランダムフォレストの並列化
4.8.5 タイミングの測定
4.8.6 乱数の生成
4.8.7 ロードバランシング
4.8.8 主要な関数のまとめ
4.9 multicoreパッケージ
4.9.1 並列計算の実行
4.9.2 乱数の生成
4.9.3 ロードバランシング
4.9.4 主要な関数のまとめ
4.10 parallelパッケージ
4.10.1 snowパッケージやmulticoreパッケージとの相違点
4.10.2 クラスターの生成と終了
4.10.3 並列計算の実行
4.10.4 乱数の生成
4.10.5 ロードバランシング
4.10.6 主要な関数のまとめ
4.11 foreachパッケージ
4.11.1 逐次処理
4.11.2 並列処理
4.11.3 ランダムフォレストの並列化
4.11.4 デバッグ
4.11.5 乱数の生成
4.11.6 主要な関数のまとめ
CHAPTER 5 大規模データの管理・分析
5.1 各パッケージの概要と用途
5.1.1 各パッケージの概要
5.1.2 用途に応じたパッケージ選択
5.2 bigmemoryパッケージ
5.2.1 bigmemoryが提供する機能
5.2.2 データの入出力
5.2.3 基本的な集計
5.2.4 多変量解析・機械学習
5.2.5 bigmemoryを用いた並列計算
5.2.6 bigmemoryパッケージの機能の拡張
5.2.7 主要な関数のまとめ
5.3 ffパッケージ
5.3.1 ffパッケージのデータ構造
5.3.2 データの入出力
5.3.3 テーブルの連結
5.3.4 基本的な集計
5.3.5 多変量解析・機械学習
5.3.6 ffパッケージを用いた並列計算
5.3.7 主要な関数のまとめ
5.4 mmapパッケージ
5.4.1 mmapパッケージが役立つケース
5.4.2 mmapパッケージの使用方法
5.4.3 主要な関数のまとめ
5.5 filehashパッケージ
5.5.1 データベースの作成と初期化
5.5.2 データの追加
5.5.3 データのリストの表示
5.5.4 データに対する操作
5.5.5 データの取得
5.5.6 データベースの削除
5.5.7 主要な関数のまとめ
5.6 colbycolパッケージ
5.6.1 データの読み込み
5.6.2 大規模データの読み込み
5.6.3 主要な関数のまとめ
5.7 data.tableパッケージ
5.7.1 データの読み込み
5.7.2 データの概要の確認
5.7.3 要素の抽出
5.7.4 データ加工・集計
5.7.5 主要な関数のまとめ
5.8 dplyrパッケージ
5.8.1 dplyrパッケージが提供する機能
5.8.2 行の抽出
5.8.3 列の抽出
5.8.4 列の追加
5.8.5 行の並べ替え
5.8.6 データの要約
5.8.7 グループ化処理
5.8.8 パイプ処理
5.8.9 主要な関数のまとめ
CHAPTER 6 Hadoopとの連携
6.1 Hadoop の環境構築
6.1.1 Oracle JDKのインストール
6.1.2 CDHのインストール
6.2 MapReduceで実行できる処理
6.3 Rhipeパッケージ
6.3.1 環境構築
6.3.2 HDFS の操作とデータ連携
6.3.3 MapReduce による並列分散処理
6.3.4 実行例: ワードカウント
6.3.5 実行例: 最小二乗法
6.3.6 主要な関数のまとめ
6.4 RHadoopパッケージ
6.4.1 環境構築
6.4.2 HDFS の操作とデータ連携
6.4.3 MapReduceによる並列分散処理
6.4.4 実行例:ワードカウント
6.4.5 実行例:最小二乗法
6.4.6 plyrmrパッケージによるデータハンドリング
6.4.7 主要な関数のまとめ
CHAPTER 7 最近の動向
7.1 Rによるハイパフォーマンスコンピューティングの動向
7.2 Rhpcパッケージ
7.2.1 環境の構築
7.2.2 ワーカープロセスの起動
7.2.3 並列計算の実行
7.2.4 既存のパッケージとの比較
7.3 pqR
7.3.1 インストール
7.3.2 マルチスレッドによる計算の実行例
付録
付録A フライトデータの入手方法
付録B Rの性能測定
B.1 処理時間の測定
B.2 メモリ使用量の測定
正誤情報
初版第1刷に誤りがありました。
2014年10月21日
P15の12行目
誤:IEEE(The Institute of Electrical and Electronics Engineers, Inc.w)
↓
正:IEEE(The Institute of Electrical and Electronics Engineers, Inc.)
P18の「航空会社の情報」
誤:
carrier,index
DL,11
DH,24
WN,4
HP,6
HA,25
↓
正:
“02Q”,”Titan Airways”
“04Q”,”Tradewind Aviation”
“05Q”,”Comlux Aviation, AG”
“06Q”,”Master Top Linhas Aereas Ltd.”
“07Q”,”Flair Airlines Ltd.”
P28のコラム内のコードの5行目
誤:+ DayOfWeek = “character”, Cancelled = > “character”))
↓
正:+ DayOfWeek = “character”, Cancelled = “character”))
P38の下側のプログラムの下から15行目のコメント
誤:# 各列の型をあらかじめ指定する
↓
正:削除
P58の実行結果
誤:
Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,CRSArrTime,Uniq
ueCarrier,FlightNum,Tail
2008,1,3,4,2003,1955,2211,2225,WN,335,N712SW,128,150,116,-14,8,IAD,TPA,810,4,8,0,,0,NA,NA,NA,NA,NA
2008,1,3,4,754,735,1002,1000,WN,3231,N772SW,128,145,113,2,19,IAD,TPA,810,5,10,0,,0,NA,NA,NA,NA,NA
2008,1,3,4,628,620,804,750,WN,448,N428WN,96,90,76,14,8,IND,BWI,515,3,17,0,,0,NA,NA,NA,NA,NA
2008,1,3,4,926,930,1054,1100,WN,1746,N612SW,88,90,78,-6,-4,IND,BWI,515,3,7,0,,0,NA,NA,NA,NA,NA
2008,1,3,4,1829,1755,1959,1925,WN,3920,N464WN,90,90,77,34,34,IND,BWI,515,3,10,0,,0,2,0,0,0,32
↓
正:
Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,CRSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,CRSElap1987,10,14,3,741,730,912,849,PS,1451,NA,91,79,NA,23,11,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1987,10,15,4,729,730,903,849,PS,1451,NA,94,79,NA,14,-1,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1987,10,17,6,741,730,918,849,PS,1451,NA,97,79,NA,29,11,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1987,10,18,7,729,730,847,849,PS,1451,NA,78,79,NA,-2,-1,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1987,10,19,1,749,730,922,849,PS,1451,NA,93,79,NA,33,19,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA
P60の6行目のファイル名
誤:”AirlineFormatter.py”
↓
正:”MyAirlineFormatter.py”
P60のコードの行番号17と21の行、P63の最下部のコードの行番号17と21の行
誤:exit
↓
正:sys.exit()
P93の本文15行目の途中から
誤:
snowパッケージのclusterSetupRNGStream関数やparallelパッケージのclusterSetRNGStream関数は、baseパッケージのRNGkind関数にL’ecuyerのアルゴリズムを使用することを指定して乱数種を発生させています。
↓
正:
snowパッケージのclusterSetupRNGStream関数は,rlecuyerパッケージを用いてL’ecuyerのアルゴリズムを実行して乱数種を発生させています。parallelパッケージのclusterSetRNGStream関数は、baseパッケージのRNGkind関数にL’ecuyerのアルゴリズムを使用することを指定して乱数種を発生させています。
P98のコラム本文14行目
誤:しかし。その簡潔さのために。
↓
正:しかし、その簡潔さのために、
P107の実行結果の11行目から
誤:
> # ランダムフォレストの実行
> system.time(fit.rf <- clusterApply(cl, rep(250, 4), function(ntree) randomForest(type ~ + ., data = spam))) user system elapsed 0.165 0.288 16.331 ↓ 正: > system.time(fit.rf <- clusterApply(cl, rep(250, 4), function(ntree) randomForest(type ~
+ ., data = spam, ntree = ntree)))
user system elapsed
0.202 0.023 9.463
P107の本文3行目
誤:以上の結果を見ると、並列計算を行う場合は行わない場合に比べて約26秒から約16秒まで計算時間を削減できたことが確認できました。
↓
正:以上の結果を見ると、並列計算を行う場合は行わない場合に比べて約26秒から約9秒まで計算時間を削減できたことが確認できました。
P112のコード
最後に下記の行を追加
stopCluster(cl)
P121の上から7行目、P136の下から10行目
誤:● ワーカープロセスごとの演算(apply関数の並列版)
↓
正:● ワーカープロセスごとの演算(lapply関数の並列版)
P121の上から9行目、P136の下から8行目
誤:● ロードバランスを考慮したワーカーごとの演算(apply関数の並列版)
↓
正:● ロードバランスを考慮したワーカーごとの演算(lapply関数の並列版)
P127の上から1行目の途中から
誤:次の例は、4つのコアを用いてそれぞれ50個の初期値によりk平均法の並列計算を行っています。
↓
正:次の例は、4つのコアを用いて曜日ごとに、目的変数を到着の遅延時間、説明変数を出発の遅延時間と飛行距離として、線形回帰分析を行っています。
P131の中央部のコード
最後に下記の行を追加
stopCluster(cl)
P151の上から12行目
誤:rfl$exec.rf()
↓
正:> rfl$exec.rf()
P154の上から32行目
誤:stopCluster(cl)
↓
正:> stopCluster(cl)
P176の中央部のコードの12行目
誤:
+ require(bigmemory) al <- attach.big.matrix(al.desc) + GetArrDelayQuantiles(g, data = al) ↓ 正: > require(bigmemory)
> al <- attach.big.matrix(al.desc) > GetArrDelayQuantiles(g, data = al)
P259の上から11行目
誤:このデータセットはややサイズが大きいため、データテーブルに変換しておきます。データテーブルへの変換は、dplyrパッケージのtbl_df関数を用いて行います。
↓
正:このデータセットはややサイズが大きいため、テーブル形式のデータフレーム(tbl形式)に変換しておきます。
P259の上から12行目
誤:このデータセットはややサイズが大きいため、データテーブルに変換しておきます。データテーブルへの変換は、dplyrパッケージのtbl_df関数を用いて行います。
↓
正:このデータセットはややサイズが大きいため、テーブル形式のデータフレーム(tbl形式)に変換しておきます。
P259のコードの4行目
誤:> # データフレームからデータテーブルへの変換
↓
正:> # データフレームからテーブル形式のデータフレーム(tbl形式)への変換
P269の下から3行目
誤:dplryパッケージでは
↓
正:dplyrパッケージでは
P277の上部の実行画面の1行目
誤:# for service in /etc/init.d/hadoop-0.20-mapreduce-*: do
↓
正:# for service in /etc/init.d/hadoop-0.20-mapreduce-*; do
P303の上部のコードの10行目
誤:> rhwrite(list(list(NULL, cbind(X, y))), input.path)
↓
正:> rhwrite(list(list(NULL, cbind(1, X, y))), input.path)
P304のコードの16行目
誤:
> # 2. 係数の推定
> solve(XtX, Xty)
[1] 0.006126556 0.010144103 -0.055067807 -0.059223342 -0.094819425
[6] -0.029960709 -0.030996249 -0.013890889 0.053427962 -0.072220425
↓
正:
> # 2. 係数の推定
> solve(XtX, Xty)
[1] 0.022952227 0.005214048 0.010393951 -0.056060394 -0.060734475
[6] -0.093189683 -0.030261908 -0.030501064 -0.013930214 0.054599710
[11] -0.071507482
P315の下部のコードの下から12行目
誤:> X.index <- to.dfs(cbind(1:nrow(X), X)) ↓ 正:> X.index <- to.dfs(cbind(1:nrow(X), 1, X))
P316のコードの下から5行目
誤:
> # 2. 係数の推定
> solve(XtX, Xty)
[1] 0.006126556 0.010144103 -0.055067807 -0.059223342 -0.094819425
[6] -0.029960709 -0.030996249 -0.013890889 0.053427962 -0.072220425
↓
正:
> # 2. 係数の推定
> solve(XtX, Xty)
[1] 0.022952227 0.005214048 0.010393951 -0.056060394 -0.060734475
[6] -0.093189683 -0.030261908 -0.030501064 -0.013930214 0.054599710
[11] -0.071507482
お問い合わせ
本書に関するお問い合わせは、下記のボタンをクリックしてお問い合わせフォームよりお問い合わせください。