「前処理大全」を読んだ

f:id:Kenta-s:20181027085019j:plain

https://www.amazon.co.jp/%E5%89%8D%E5%87%A6%E7%90%86%E5%A4%A7%E5%85%A8-%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AESQL-Python%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E6%9C%AC%E6%A9%8B-%E6%99%BA%E5%85%89/dp/4774196479/

なぜ読もうと思ったのか

前処理についてのノウハウを知りたいと思っていたところ、 近所の本屋でこの本と「データ前処理の極意」が目立つところに並んで陳列されていた。

「データ前処理の極意」を読み終わり、もう1,2冊読みたいと思っていた。

概要

  • Part1 入門前処理
    • 第1章 前処理とは
  • Part2 データ構造を対象とした前処理
    • 第2章 抽出
    • 第3章 集約
    • 第4章 結合
    • 第5章 分割
    • 第6章 生成
    • 第7章 展開
  • Part3 データ内容を対象とした前処理
    • 第8章 数値型
    • 第9章 カテゴリ型
    • 第10章 日時型
    • 第11章 文字型
    • 第12章 位置情報型
  • Part4 実践前処理
    • 第13章 演習問題

という構成。

「データ前処理の極意」と比較すると技術者向けな内容になっている。

というのも基本的に手法を紹介しつつSQL, R, Pythonで実現するためのサンプルコードがセットで載っていて、 面白いことにアンチパターン的に悪いコード例まで掲載されている。

印象に残った/役に立ったところ

「こういうデータはこういう手法を使いましょう」といった説明だけで終わらず、

基本的にSQL、R、Pythonいずれかを使って目的を達成するようになっており、サンプルコードも載っている。

自分の場合はPythonにまだ慣れていないので、Pandasのget_dummiesの存在を知ったときは興奮に打ち震えた。

「データ前処理の極意」を読んでダミー変数という概念は知っていたものの(ちなみにあちらでは「ダミーコード」と呼ばれていた)、

理屈はわかるけど整形するのが面倒だなぁと感じていて実際に手を動かすには至っていなかった。

カテゴリ型については、それまでLabelEncoderを使って数値に置き換えていたが、get_dummiesを知って早速試すとLabelEncoderよりも短い行数で達成できるうえに、当時取り組んでいたHousePricesのRMSEもわずかに下がり効果を実感できた。

他にもオーバーサンプリング、アンダーサンプリング、bag of wordsなど、データの前処理の基本となる情報がてんこもり。
まだRやPythonのことは詳しくないので勘でしかないが、おそらくベストプラクティスに近い形を学べるのではないかと思う。

この本に書いてあったことだけをやったというわけではないが、
get_dummiesを使ったカテゴリ化や欠損値埋め(欠損していないデータからランダムフォレストで予測して埋めた)などで

KaggleのHousePricesのRMSEは

0.16412 から 0.13617

まで下がり、ランキングは(元の順位は忘れたが)TOP50%まで上がった。

f:id:Kenta-s:20181027083859p:plain

この間まで「前処理?なにそれおいしいの?」というレベルだった自分にとってはなかなか健闘したんじゃないかと思う。

まとめ

最近「データ前処理の極意」も読んだが、レベル感としてはこちらと大きな差はないと思う。ただしボリュームは大全のほうが満足度高かった。

「極意」と決定的に違う点として、「大全」は手法を説明するだけでなく、コードで実現するところまでが1セットというスタンスだというところ。

「極意」でありがちだった

「理屈はわかった。でもPythonで実装するにはどうやるのが定番なんだろう」

ということを考えなくてもいいのは良い。

R、Python初心者で、前処理に関する知識に自信がない人なら満足できる内容になっていると思う。

ただ、SQLはパっと見た感じWITH句とか普通に使っていたので、
もしSQL初心者の人がこの本でSQLも一緒に学ぼうと思ったらどう影響するのかはちょっと想像がつかない。

もし「極意」と「前処理大全」のどちらを読むか迷っているなら
コードを書かない人は「データ前処理の極意」
コードを書くなら「前処理大全」
という選択で良さそう。