書評:『Pythonによるスクレイピング&機械学習』


スポンサーリンク

写経はほとんどしていませんが、一通り目を通したのでレビューしておきます。

残念ながら読者を選ぶ本ですね。

概要

スクレイピング機械学習に関するライブラリをサンプルコード付きで紹介している本。

扱っているトピックが幅広い一方、各トピックの内容は浅い。出版社はソシム社*1

また、発売日が2016年末ということでソフトウェアのバージョンアップの関係から記述が古くなっている箇所がある。

一冊で二度美味しい……ということは全然ない

目次に文章の自動生成や文字認識など、個人的に興味のそそられるキーワードがいくつかあったので購入。

書いていないこと

  • ScraPy関連
  • 無限スクロール対策
  • 著作権の問題やrobots.txt関連
  • tensorflowの詳細
  • NumPyの詳細(ブロードキャストなどについても説明無し)
  • Pandasの詳細
  • 強化学習に関してなぜそのレイヤ構造を選んだ理由、説明

サンプルコードの処理の流れは解説しているけど使用しているモジュールなりメソッドの解説がない(特にに後半)。 ところどころ言葉足らずというか、説明不足な箇所が散見される。

この出版社は編集がいまいち。なお、タイトルどおりプログラミング言語Pythonだけど一箇所だけPHPのツール(と言うか治具?)の箇所がある。

気になった点など

  • 索引がしょぼい(特に英数索引)
  • CSSセレクタの話は結構ページを割いているが、XPathによる要素の特定の話があまりない
  • サンプルコード内で使用しているライブラリに言及していない箇所がある(例:codecsなど)
  • 解説されている内容が章ごとに独立している半面、解説されている内容がほとんど連動していない
  • 本文の説明とサンプルコード内の処理の順序やパラメータが一致していない(7-1とか)
  • 専門用語の使い分けが雑(例:「文字の認識」と「文字認識」)

最も残念なのはディープラーニングの章でそのレイヤ構造を選んだ理由の説明がない。論文を参考にしたなら最低でも参考文献を示すべき。

Phantom.js+Selenium Web driverを使う例が掲載されているけど、Phantom.jsの開発が終了しているので無益。

XPathの件はBeautiful Soup4が非対応だからか。 場合によってはCSSセレクタによる要素の特定が役に立つケースもあるので他のライブラリを使うケースまたはSelenium Web driver使用時は有益だと思うけど。

第3章のDBの解説など後半の他の章で活用していないトピックが結構ある。

文字のある領域の検出をを「文字の認識」と表記している一方で機械学習による文字の判別を文字認識と表記していたりちょっとおかしい箇所がある*2

ツメが甘いというか、編集、校正は何やってたのという感じ。サンプルコード集としては役に立つけど、コストパフォーマンスは微妙。

スクレイピング機械学習の両方の知識を活用しているのは牛丼の認識の例だけ。

サンプルコードに関して

ダウンロードしたサンプルと、本文掲載のソースで参照している画像のフォルダ名が違う箇所がある(全部はチェックしていない)。

ライブラリの導入さえミスっていなければダウンロードした方のサンプルコードは概ね動作する。

環境構築について

本文ではDockerの利用を推奨している。残念ながら極めて中途半端なのでVirtualBoxを使うことをおすすめする。

Dockerの説明も簡潔そのもの。画像の表示などDockerではうまくいかないであろう箇所についてフォローがない。

TensorflowとDocker

例えばTensorFlowのDockerイメージを使用するとJupyter Notebookは既にインストールされているということが明記されていない。
そのせいで直後のセクションで「インストールすることできます」という変な文章に遭遇する。

なお、p.202のTensorflowのDockerイメージの導入手順は引数のURLがおかしい*3ので失敗する。

Unable to find image 'b.gcr.io/tensorflow/tensorflow:latest-devel' locally docker: Error response from daemon: Get https://b.gcr.io/v2/tensorflow/tensorflow/manifests/latest-devel: unknown: b.gcr.io domain is disabled. See https://cloud.google.com/container-registry/docs/support/deprecation-notices. See 'docker run --help'.

ついでにいうとポート番号のマッピングもしてない。このままではJupyter Notebookにアクセスできない。

正常にインストールするには、例えば以下のようにする。

■最新の開発番のイメージ

$ docker run -it -p 8888:8888 tensorflow/tensorflow:latest-devel

わざわざlatest-develをインストールしようとしている理由は書いていない。

Jupyter NoteBookは自動起動しない。コンテナ上のJupyter NoteBookに接続するためにポート8888番をマッピングしている点に注意。

■バージョン指定なし

$ docker run -it -p 8888:8888 tensorflow/tensorflow:latest-py3

自動的にJupyter Notebookが起動する。

Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:

というメッセージが表示されるのでその下のURLをブラウザのロケーションバーにコピーしてEnterキーを押すとアクセスできる。

Jupyter Notebookの自動起動が不要な場合は、以下のようにする。

$ docker run -it -p 8888:8888 tensorflow/tensorflow:latest-py3 /bin/bash

なお、末尾の:latest-py3というタグを外すと、Python 2.xでJupyter Notebookが起動する。

そのほか

Tensofrflow の、SummaryWriterというプロパティは廃止されているため、Chapter 5-5のコードはそのままでは動かない。代わりにFileWriterを使う。

tf.train.SummaryWriter

変更後

tf.summary.FileWriter

TensorFlow の "AttributeError: 'module' object has no attribute 'xxxx'" エラーでつまづいてしまう人のための移行ガイド

まとめ

スクレイピングの本としては残念ながら中途半端。

ちょっと肩透かしを食らった感じは否めず。 購入したのは少し前だけど発売から1年半以上経っているのでさすがに厳しい。

自力で細々としたエラーに対処しできる自信がないなら購入しないほうが良いと思う。

はっきりいってしまうと値段の割には満足感は乏しい。ぶっちゃけお金返して欲しいな……。

本書を読みこなせるレベルの方なら関連キーワードさえ把握してしまえばあとはネット検索でどうにかなるのではないでしょうか。

むやみにググるよりは時間の短縮になるとは思います。

いろいろと惜しい本です。

*1:この出版社、広く浅くという感じの本が多い印象。

*2:他にもあったけど忘れた

*3:短縮URLの廃止は仕方ないか

広告