書籍『Pythonによるスクレイピング&機械学習 開発テクニック』のサポートページ *

ここは、牛丼の写真からカロリーを算出してみよう!など、キャッチーな例題を掲載した、スクレイピングと機械学習の書籍のサポートページです。BeautifulSoup,scikit-learn,TensorFlowなど、さまざまなライブラリを実践で使うことに重きを置いています。

書籍の修正内容 --- 2020/11/23 *

Pandasの最新バージョンではixが廃止されてしまいました。
ixをilocに置換すると動きます。

最新版のソースコードでは修正されています。

書籍の方、申し訳ありません。
置き換えて読んでいただければと思います。

書籍の修正内容 --- 2020/10/25 *

p136 横浜市の防災データ *

以前はXMLでしたが、現在はZIPで圧縮されてしまっているようです。

  • [x] このXMLデータをダウンロードして、解析して分類します。それを行うのが以下のプログラムです。
  • [o] なお、上記Webサイトで配布される「地域防災拠点」データはZIP形式で圧縮されています。そこで、ZIPファイルをダウンロードし、このXMLデータを解凍し解析して分類するのが以下のプログラムです。
# --- プログラム修正前
import os.path

# XMLをダウンロード --- (※1)
url = "http://www.city.yokohama.lg.jp/somu/org/kikikanri/data/shelter.xml"
savename = "shelter.xml"
if not os.path.exists(savename):
    req.urlretrieve(url, savename)

# --- プログラム修正後
import os.path
import zipfile

# ZIPをダウンロード --- (※1)
url = "https://www.city.yokohama.lg.jp/kurashi/bousai-kyukyu-bohan/bousai-saigai/bosai/data/data.files/shelter.zip"
savezip = "shelter.zip"
savename = "shelter.xml"
if not os.path.exists(savezip):
    req.urlretrieve(url, savezip)
# ZIPを解凍
with zipfile.ZipFile(savezip, 'r')as zf:
    zf.extractall('./')

※なお、GitHubで公開されているファイルは修正済みです。

p202,p428のDockerのコマンド *

Windowsの場合は、以下のように、$HOME:$HOMEを{$HOME}:{$HOME}に変更して実行してください。

# p202
docker run -it \
  -v {$HOME}:{$HOME} \
  -p 8080:8080 mlearn

# p428
docker run -it -v {$HOME}:{$HOME} mlearn

書籍の修正内容 --- 2020/09/14 *

p107とp108のcronの記述 *

cronの設定の記述(2カ所)で、「*」記号の前に改行が入ってしまっています。以下のように改行なしが正しい記述です。

PATH=/usr/local/bin:/usr/bin:/bin
PYTHONIOENCODING='utf-8'
0 7 * * * python3 /home/test/everyday-kawase.py

なお、macOSでCRONを設定する場合、cronにフルディスクアクセスの権限を与える必要があります。こちらを参考にして権限を追加してください。

p51のsel-avocade.pyを実行するとエラーが出る --- 2020/08/03 *

BeautifulSoup4.8.0にて、以下のようなエラーが出るという報告をいただいています。

AttributeError: 'NoneType' object has no attribute 'string'

以前のバージョンのBeautifulSoup4の『nth-of-type(n)』では、問題なかったのですが、最近のBeautifulSoup4では、動作が不安定なようです。

(参考)https://d.aoikujira.com/bbs/mbbs.php?m=thread&threadid=19

そこで、不安定な『nth-of-type(n)』を使わず、select("li")のように書くと良いでしょう。

  • [x] print(soup.select_one("li:nth-of-type(8)").string) #(1)
  • [o] print(soup.select("li")[7].string) #(1)

本文は、以下のようになります。

  • [x] まず、(※1) の方法ですが、これは、全 <li> タグの 8 個目の要素を取り出すというものです
  • [o] まず、(※1) の方法ですが、これは、全<li>タグの(0から数えて)7個目の要素を取り出すというものです

書籍の修正内容 --- 2020/04/19 *

p57のcr-getall.pyのソースコード *

ソースコードで、importの後の「*」が欠けています。
サンプルプログラムを参考にしてください。

正誤 - 左が正しい
正誤 - 左が正しい

書籍の修正内容 --- 2019/07/19の更新 *

p190 ch4/mnist-tocsv.py *

合ってもなくても動きますが、不要なコードが一行入っていました。

OpenCV3 → OpenCV4への対応 *

  • ch7/font_draw.py
  • ch7/ocr1.py
  • ch7/ocr2.py
  • ch7/ocr3.py
  • ch7/ocr4.py

本書ではOpenCV3を利用していますが、OpenCV4になると、いくつかのメソッドの使い方が変わりました。理由は、OpenCV4以降、findContoursの返り値が変わったせいです。

P.429 のコマンドでmsgpackがみつからない旨のエラーが出る *

  • p429ページのコマンドを実行すると、“msgpack” が見つからないエラーがでる場合があるようです。
    • その際は、コマンドラインで "pip install msgpack” を実行した後、改めてコマンドを実行してください。




以前の修正内容(第一版以前) *

[Q1] WindowsとDockerを使った環境構築で、日本語が文字化けしたり、表示されないという問題が発生します。 *

いろいろ調べてみると、Docker for Windowsで、まれにマルチバイト文字が表示されないという問題があるでそうです。そこで、解決策としては、ConEmuなどの、DOSプロンプト以外のWindowsターミナル環境を使うと直るそうです。

[Q2] Windows環境では、python3/pip3ではなく、python/pipを使うようですが・・・ *

本書のプログムは、Python3を対象にしています。pythonコマンドのバージョンがPython3であれば、そのまま利用できます。

[Q3] Dockerのコンテナ環境に本書のサンプルプログラムを配置するには? *

wgetを利用して、本書のサンプルプログラムをダウンロードすると良いでしょう。

apt-get install wget
wget http://www.socym.co.jp/download/1079/src.zip
unzip src.zip

あるいは、ホスト側(Windows/macOS)にダウンロードしたファイルを、コンテナにコピーすることもできます。(参考)

最新の動作環境で生じた問題について *

本書は、執筆時点でのソフトウェアの使い方の操作について紹介したものです。ソフトウェアの性質上、どうしても、最新版では、動かなかったり、操作画面が変わってしまうということがあり得ます。

以下、最新バージョンでの操作方法を紹介します。

TensorFlowのインストールについて (5章/p202)2018/01/16に追加 *

  • 書籍執筆時点では、WindowsではTensorFlowが動きませんでしたが、現在は、Windows上でも動作するようになっています。

また、TensorFlowのインストールですが、Anacondaをインストールした後に、以下のコマンドを実行することでインストールが可能になっています。

# conda で TensorFlow 1.1.0 インストール
$ conda install -c conda-forge tensorflow=1.1.0
# pip3 で keras をインストール
$ sudo pip3 install keras==2.0.5

KerasとTensorFlowのバージョンのミスマッチについて (5章/p240) *

Kerasは、TensorFlowのバージョンに依存しています。本書5章のp240の手順に従ってインストールすると、TensorFlowのバージョンミスマッチが生じます。その場合、以下のように、モジュールが見当たらない旨のエラーが出ます。

ModuleNotFoundError: No module named ‘tensorflow.contrib.tensorboard'

その場合、この記事を書いた時点の最新のTensorFlowをインストールすることで、エラーを回避できます。

# conda で TensorFlow 1.1.0 インストール
$ conda install -c conda-forge tensorflow=1.1.0
# pip3 で keras をインストール
$ sudo pip3 install keras==2.0.5

また、上記の手順でインストールした、この記事を書いた時点の最新版(Tensorflow 1.1.0)では、APIの名前が変更になっています。主に、TensorBoardを使ったプログラムで変更が必要です。

  • ch5/tb-mul.py
  • ch5/tb-add.py
  • ch5/tb-bmi.py
  • ch5/tb-bmi2.py
  • ch5/mnist-deep.py

変更点は、以下の通りです。

  • (1) tf.train.SummaryWriterがなくなった
    • [x] tw = tf.train.SummaryWriter("log_dir", graph=sess.graph)
    • [o] tw = tf.summary.FileWriter("log_dir", graph=sess.graph)
  • (2) initialize_all_variablesがなくなった
    • [x] tf.initialize_all_variables()
    • [o] tf.global_variables_initializer()

誤植情報 *

申し訳ありません、誤植がありました。

2017/03/15 - p.71付近、書籍でソースコードの部分 *

  • [x] 「from selenium import Webdriver」
  • [o] 「from selenium import webdriver」

2017/03/01以前の誤植情報 *

ソースコード: src/ch2/selenium-capture.py *

プログラムの一行目のfromの前にスペースが入っていました。スペースを削除すると動きます。

p.114 JSON形式を書き出す *

  • 編集時に入ったコメント「※※※なにかせつめいを※※※」がそのまま残ったままでした。
  • →以下のコマンドを実行すると、Pytyhonの辞書形式データをJSONデータとして出力します。

ソースコード: src/ch3/yaml-io.py *

コメント部分にタイポ

  • [x] # PythoのデータをYAMLで出力
  • [o] # PythonのデータをYAMLで出力

p.245 タイポ *

  • [x] Pandas の配列データはをそのまま使えないので
  • [o] Pandas の配列データはそのまま使えないので

p.275 タイポ *

  • [x] 後者の確率的言語モデルを利用した形態素解析が多く多く、精度も高くなっています。
  • [o] 後者の確率的言語モデルを利用した形態素解析が多く精度も高くなっています。

p.275以降、3つの図の下のキャプションがおかしい *

先頭の図が「ぬけ」となっており、その後、図のキャプションが一つずつずれています。本来図の下のキャプションは次のようになるはずです。

  • [o] 「Python」の類似語を列挙したところ...近しいプログラミング言語が列挙された
  • [o] 「カレー」の類似語を列挙したところ...どれも美味しそう
  • [o] 「岡村」という名字の類義語を列挙したところ...関連人物が出た

p.279 ベイズの定理の式 *

崩れてしまっていますが、正しくは、以下の式が正しいです。

bayes.png

p.290 ソースリストの修正 *

P.290 ~291のソースリスト「src/ch6/mlp3-classify.py」において、原稿執筆時に入力に使ったデータのパラメータが変わったため、入力データの不整合が発生しておりました。「mlp3-classify.py」を以下のように修正すると動作します。

# 最大単語数を指定
max_words = len(X[0])

このほかの部分も見直し、以下のように修正したファイルをzip形式でアップロードしてありますので、ご利用下さい。

9行目のmax_wordの定義を削除し、
16行目に、global max_wordsを追加
34行目に、max_words = len(X[0])を追加
http://www.socym.co.jp/download/1079/mlp3-classify.zip

p.320 コマンドラインの指定 *

タイポでした。

  • [x] $ python3 python3 avhash.py
  • [o] $ python3 avhash.py

P.387 余白の部分に以下を追加 *

  • [日本語がうまく表示されない問題に対処する]
  • Docker for Windows で、まれにマルチバイト文字が表示されないという問題があるようです。その場合、ConEmuなどの、DOSプロンプト以外のWindowsターミナル環境を使うと解決されます。
ConEmu
[URL] https://conemu.github.io/

ご質問がある方は... *

本ページのコメント欄に、質問を書くと収集がつかなくなってしまいます。ご質問がある方は、「出版社のサポートページ」あるいは「くじらはんど・お問い合わせフォーム」でご連絡ください。