igjit(著), atusy(著), hanaori(著), 技術評論社, 2021
著者のhanaori様よりご恵贈いただきました。ありがとうございます。
「楽をしたいために努力を惜しまない」んだけど、じゃあどうすればいいのか!というあなたへ。
データ分析をしていると、色々な場面で「楽をするのは楽じゃない」というパラドックスに向き合う必要が生じます。「楽をしないで努力する」と「楽をするために努力する」のコストを比較してどちらを取るかに頭を悩ませる場面です。ネットやツイッターなどでは後者を選択するのがより良い(そうしないとダメだ!)という意見もよく流れてきます。「楽をするために努力をする」のは格好いいですよね。何しろ上手くいったら楽ができるんですから。しかも自分だけではなくチーム全体が楽になり、生産性が上がった時の達成感たるや、まさにハッカー冥利に尽きるという気分を味わえそうです。
しかし現場の目線では、これは簡単に割り切れるパラドックスでは無いのは明らかです。「楽をするための努力」が高い効果を上げる場面であればあるほど、抱えている課題が大きいため新しいツールの導入に対して保守的になりがちだというのが1つの要因だと思います。「これまで使ったことがないそのツールを導入して何か問題が起きたらどうするのか、責任をとれますか?そのリスクを回避するためには今回は泥臭くみえるけれど今のやり方でいこう」という訳です。実際、僕も研究業務の中でこのような選択をする機会は少なくありません。「今回は」という限定がずるずる引き伸ばされないように背筋を伸ばす次第です。
何があれば「楽をするための努力」が実を結び、生産性を高めることができるのでしょうか。僕の経験では新しいツールを導入して生産性を向上させるには以下の4点の正しい知識が必須です。
この4点について正しい知識をおさえるのはそれだけでコストが掛かります。先端的なツールであれば公開されている(特に日本語の)解説や実行例は限定的かもしれないですし、そもそもどんなツールが選択肢になりうるのかという概要を掴むことすらままならない場合もあるかと思います。前置きが長くなりましたが本書(R登山本)はそこにフォーカスしています。
本書では、データ分析の現場でよく登場する「これを手動でやるのはツラいし自動でやる方法はありそうなんだけど難しそうなんだよな」という課題をテーマ別に取り上げ、それぞれを効果的に解決するためのRの拡張機能(アドインのようなものでRではパッケージpackageと呼びます)が紹介されています。例えばデータの読み込み・整形・要約(第2章)、データ可視化(第3章)、レポーティング(第4章)、Googleサービスとの接続(第5章)、Webスクレイピング(第6章)といった具合です。またこのようなツール群を導入する際に生じる課題をハンドルしたり更に効率化を進めるためのツールがまとめられています(第7章)。
一般的な技術書では、その書籍で使うパッケージを出来るだけ少なくしようとするものだと思います。道具を揃えるパートを最小限にしてその分で中身を充実させたいと思うのは自然ですし、その方が「このツールを使えばなんでもできます」「ちょっと準備するだけでいいので簡単ですね」という書き方が出来るからです。ところが本書は違います。これでもかというぐらい様々な便利ツールが登場します。Rを業務でバリバリ使っている僕でも知らなかった痒いところに手が届く便利パッケージや、名前は知っていたしどこかでデモをみかけたけど正確な挙動を調べるのをサボっていたパッケージが数多く紹介されているのは素晴らしいです。このような広範囲のレビューをまとめる著者陣の力量やその努力には頭が下がります。
本書を一通り読んでおくことで、ひょっとしたら今すぐ現在の課題解決に役立つツールに出会えるかもしれませんし、こういうツールがあれば良いのかというイメージを広げられるかもしれません。データ分析においてこのような問題が「あるある」なんだ、かつそれが解決可能なんだ、という概要を掴むだけでも得るものは大きいと思います。
冒頭の写真右は、僕が付箋がわりに折ったページです(付箋が嫌い)。データ可視化(第3章)とレポーティングに関連する項目(第4章)を多く折ったようです。どちらも今少し技術的に余裕があり、新しいツールを取り入れる余地があるのでそうなったのかなと思います(例えばこのWebサイトもRmdでhtmlをknitして作っていますが修行中です)。最後に、そこを中心に気になったり膝を打った(比喩)ポイントを以下に列挙しました。
ggplot()
関数の引数名のdata =
を最初から省略するのは後々大変そうだなと思いました。例えば[p.76]でdata =
をgeom_point()
関数の中で指定することになりますが、これ分かるかな?という心配です。作図コードの改行がすっきりしていて参考になりました。scale_*_manual()
関数で水準=
をつけられるんですね!便利!as.factor()
関数も出てくるのでどこかで説明が欲しい気がします。coord_cartesian()
関数は使ったことなかったですがxlim()
関数との違いを整理していただいて助かります。ragg
パッケージを知らなかったです。作図デバイス一覧は使えそうです。「高品質な出力を得るにはデバイス関数の指定を推奨します」というのはちょっと何かわからなかったです。map_*()
関数は超便利(大好き)なので落ち穂拾い的にでも挙動の紹介などをフォローしていただけるとありがたいと思いました。2022年2月2日