読者です 読者をやめる 読者になる 読者になる

StatModeling Memorandum

StanとRでベイズ統計モデリングします. たまに書評.

「コマンドラインではじめるデータサイエンス」Jeroen Janssensら

この本ではMasonとWiggins(2010)のデータサイエンスの定義に従って解析をすすめていきます。すなわち、(1)データの獲得、(2)データのクレンジング、(3)データの精査、(4)データのモデリング、(5)データの解釈の5ステップです。(5)はコンピュータの出番が少ないこともあり触れていません。(3)にはデータの可視化なども含まれているようです。僕が感じたこの本の主な対象は(1)(2)であり、まごうことなき前処理本です。

コマンドラインの全オプションを説明するのではなく、例を通してsort, uniq, grep, cut, sample, head, tail, tr, sed, awk, curl, scrapeなどの基本的なコマンドラインをいかに組み合わせてデータを加工・集計するかの説明が丁寧であり、網羅的ではありませんがチュートリアルとして非常に有用だと思います。Linuxユーザにはとっつきやすいのではないでしょうか。特によかった章は5章、6章、8章です。

「5章 データのクレンジング」ではcsvkitを初めて知りました。csvlookとか便利ですね。こういう場面ではlessを使っていましたがcsvkitを活用してみたいと思います。この章ではその他にもXMLjsoncsvにして扱う方法や、csvsqlでSQL文を使って柔軟に処理する方法が載っています。少しだけ不満な点は説明のため仕方ないのかもしれませんが、はじめからデータが綺麗すぎます。個人的にはもうちょっとデータが汚いような例題が見たかったです。

「6章 データワークフローの管理」ではDrakeというツールを紹介しています。これも初めて知りました。データ解析のワークフローをある記法で定義することで、依存関係をクリアにし、再実行は元データが更新された時のみ検出されて実行される、なんてことをできるようにするツールです。このツール自体が決定版がどうかは分かりませんが、データ解析のテストとは何か?についても考えさせられ、とてもいい章だと思いました。

「8章 並列パイプライン」ではGNU parallelの簡単な使い方を説明しています。sshと合わせてAWSを使って分散処理しているところが参考になりました。

もっとコマンドラインについて詳しくなりたい、自分でも作ってみたいという人には「UNIXプログラミング環境」がオススメです。昔読んで感動した覚えがあります。動作の軽いlessが好きすぎて、ズームできたり色がつくlessを作ってみようと思っていた時期もありました。

以下は批判的なコメントです。 このコマンドラインを組み合わせるアプローチはある状況下では最高のパフォーマンスを出すことでしょう。しかしながら、デメリットもあります。

  • 個々のコマンドラインは歴史があって極めて良い出来だと思うのですが、組み合わせて使う時にオプションなどのインターフェースに一貫性がなく、覚えるのがつらい時があります。また、ちょっと複雑な処理ではコマンドラインでできるかどうか分からず、模索しているうちに最終的にR, Ruby, Pythonなどのプログラミング言語を使うことになることもしばしばあります。つきつめるとコマンドラインが機能する状況が業務のどれだけの割合かという問題になりますが、多くの場合でははじめからR, Ruby, Pythonを学んだ方が学習コストが少なくてリターンが大きいのではないでしょうか。すでに各コマンドラインに詳しい人はこのアプローチでもいいと思います。
  • 「7章 データの精査」ではgnuplotやRのggplot2を使っているし、「9章 データのモデリング」でもRやWekaを無理やりコマンドラインで使っています。使えるという情報には価値がありますが、実戦的ではないでしょう。これが機能するのはRの部分が本当に小さい部分だけに限られます。これらの章にあるようなコマンドラインを例えエディタで編集したとしてもシンタックスハイライトはうまくいかないでしょうし、はじめから全部Rでやったほうが見通しもよくなります。

まとめますと、すでにデータ解析をやっていてコマンドラインを少し使える人が、もうちょっと深掘りしてコマンドラインの便利な使い方を学ぶにはピッタリの本だと思います。しかし、本のタイトル通りにデータ解析をはじめるのにコマンドラインからはじめるのはオススメできないです。コマンドラインSQLは加工や集計には力を発揮しますが、可視化やモデリングにはほぼ無力です。そこまで実行する可能性があるのならば、はじめからRやPythonを学ぶのがよいでしょう。

細かいところですが、p.40の例3-1のbashスクリプトがインデントがされていません。オライリーなのに意外です。また、p.133 図7-2, p171 図9-1, p.183 図9-5などカラーをそのままグレースケールで印刷しているため凡例との対応がつかず図が大変見づらいです。ありがちですが、特にデータ解析の本ではやってはいけないことの一つだと思います。こういう図は校正でちゃんとひっかからないのでしょうか…。