ひぐぺん工房トップへ おかげさまで24周年!

ひぐぺん工房(松浦健一郎・司ゆき) - HigPen Works
・今までの仕事 ・書籍 ・最近の業務 ・対応可能言語 ・お見積

『わかるPython[決定版]』
Q&A

以下の回答で問題が解決しなかった場合には、 こちらから ご連絡ください。

サンプルプログラム

2018/07/25
Q.MNISTデータの取得(Chapter10, p.288)
A.
モデルの学習を行うプログラム(lr_train.py)において、MNISTデータが取得できないために、正しく実行できない場合があります。lr_train.pyが実行できない場合、以後のプログラム(lr_test.pyとlr_user.py)も実行することができません。これらのプログラムは、lr_train.pyが生成するモデルのファイル(lr.model)を使用するためです。
本来lr_train.pyのMNISTデータは、インターネット経由でサーバから取得することができますが、おそらくサーバ側の原因で、現在(2018/07/25)取得できないようです。そこで、MNISTデータ(mldata\mnist-original.mat)と学習済みモデル(lr.model)を含むアーカイブをこちらに用意しましたので、お使い頂けましたら幸いです。
またscikit-learnのバージョンが変わったために、本書の実行例とは動作が異なる場合があります。この場合は、コマンドラインで「pip install "scikit-learn<0.20.0"」としてから、サンプルプログラムを実行してみてください。本書で使用しているバージョン(0.19.1)に近いバージョンをインストールできるので、本書の例に近い実行結果が得られます。

2018/08/05
Q.抽象クラス(Chapter7, p.202)
A.
abstract2.pyの実行時に「AttributeError: 'module' object has no attribute 'ABC'」のように表示される場合には、以下をご確認ください。
(1) Python3を使用していること。「python -V」または「python3 -V」を実行すると、Pythonのバージョンを確認することができます。Mac/Linuxの場合、「python」コマンドではPython2、「python3」コマンドではPython3が起動する場合があるので、この場合は「python3」コマンドを使用してください。
(2) ファイル名やディレクトリ名(フォルダ名)に「abc」を使用していないこと。例えば、ファイル名を「abc.py」にしたり、「abc」ディレクトリ以下にファイルを配置したりしないでください。ファイル名やフォルダ名に、インポートするモジュール名(ここではabc)と同じ名前を使用していると、モジュールを正しく読み込めない場合があるようです。

2018/09/26
Q.TensorFlowのインストール(Chapter11, p.312)
A.
Python3.7.0(本Q&A執筆時における最新版)の使用時に、TensorFlowがインストールできない場合があります。インストール時に下記のメッセージが表示されて、インストールに失敗します。Window 10で確認しました。

Collecting tensorflow
Could not find a version that satisfies the requirement tensorflow (from versions: )
No matching distribution found for tensorflow

Python3.7.0とTensorFlowの組み合わせは、現在未対応のようです。TensorFlowをインストールして使用するには、以下の手順をお試しください。

(1) Python3.7.0をアンインストールします。
(2) Python3.6.6(本Q&A執筆時における、Python3.6.xの最新版)をインストールします。64bit版をインストールしてください。ダウンロードページはこちら、Windows用のインストールファイルはこちらです。
(3) コマンドプロンプトで「pip install "tensorflow<1.5"」を実行して、TensorFlow(本書で使用しているバージョン1.4)をインストールします。
(4) あとは本書の手順にしたがって、例えば「python tf_train.py」のように、サンプルプログラムを実行してみてください。

2019/01/15
Q.CGIプログラムの実行(Chapter14, p.365)
A.
本書のCGIプログラムをIDLE(Python用の統合開発環境)で実行すると、
sys.stdout = codecs.getwriter('utf_8')(sys.stdout.detach())
という箇所において、
io.UnsupportedOperation: detach
というエラーが発生することがあります。これは、出力ストリーム(sys.stdout)の仕様が、IDLEとコマンドラインとでは異なるためです。本書で説明しているように、コマンドラインで実行すれば動作します。以下に簡単な手順を示します。動作確認にはWindows10とPython3.6.8を使用しました。

(1) 本書のサンプルをダウンロードして、「C:\Users\ユーザ名」以下に展開します。
(2) コマンドライン(コマンドプロンプト)を起動します。
(3) コマンドラインで「cd C:\Users\ユーザ名\sample\chapter14」として、カレントディレクトリを移動します。
(4) コマンドラインで「python -V」として、Pythonのバージョンを確認します。「Python 3.6.8」のように表示されます。
(5) コマンドラインで「python cgi-bin\test.py」として、test.pyを実行します。次のように表示されます。
Content-type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
…
<p>
<img src="/daikon_happy.png" alt="大根">
このページが表示されたら、無事にCGIプログラムが動いているよ!
</p>
…
</html>
(6) コマンドラインで「python -m http.server --cgi」として、Webサーバを起動します。「Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...」と表示されます。
(7) Webブラウザで「http://localhost:8000/cgi-bin/test.py」を開きます。本書p.367のようなページが表示されます。ChromeとFirefoxで動作を確認しました。

2019/04/08
Q.lr_train.pyの実行(Chapter10, p.291)
A.
lr_train.pyなど、本書のサンプルプログラムを実行する際には、.pyファイルがあるディレクトリをカレントディレクトリにする必要があります。例えば「python lr_train.py」を実行しようとしたときに、

python: can't open file 'lr_train.py': [Errno 2] No such file or directory

のようなエラーが表示される場合、lr_train.pyのあるディレクトリがカレントディレクトリになっていない可能性があります。例えば本書のダウンロードファイルを、デスクトップのsampleディレクトリに展開した場合には、コマンドプロンプトで以下のコマンドを実行して、lr_train.pyのディレクトリをカレントディレクトリにします。

cd Desktop\sample\chapter10

または、以下のコマンドを実行します。

cd c:\Users\ユーザ名\Desktop\sample\chapter10

コマンドプロンプトのプロンプトが「C:\Users\ユーザ名\Desktop\sample\chapter10>」のように変化したら、成功です。この状態で「python lr_train.py」を実行してください。Chapter11以降のプログラムに関しても、同様にchapter11ディレクトリなどをカレントディレクトリにしてから、実行してください。

なお、MNISTのデータ(chapter10\mldata\mnist-original.mat)は、MATLAB(公式サイト)形式のデータです。データを開くには、MATLABもしくはSciPyのファイル入出力関数(scipy.io)などを使う必要があります。

また、scikit-learnのバージョンによっては、サンプルプログラム(lr_train.py, lr_test.py, lr_user.py)が正常に動作しません。この場合は、以下のようにscikit-learnのバージョンを指定してインストールことによって、動作する可能性があります。
pip install "scikit-learn<0.20"

補足

2018/08/24
Q.ファイルに保存したプログラムの実行[Windows](Chapter2, p.26)
A.
プログラムを「test.py」という名前で「ドキュメント」に保存した場合には、以下のいずれかの方法で実行してください。「Document」ではなく「Documents」を指定してください。
python C:\Users\ユーザ名\Documents\test.py
python Documents\test.py

メモ帳などにおいて、プログラムを「C:\Users\ユーザ名」に保存するには、保存ダイアログの上部にあるアドレスバー(「コンピュータ名 > デスクトップ」や「コンピュータ名 > ドキュメント」などと表示されている欄)をクリックしてから、キーボードで「C:\Users\ユーザ名」と入力してください。表示が「人のアイコン > ユーザ名」に変わりますので、この状態でファイルを保存します。

2018/08/30
Q.ファイルに保存したプログラムの実行[macOS](Chapter2, p.26)
A.
macOSでプログラムを保存する場合には、ホームディレクトリに保存してください。ホームディレクトリ名は、お使いのユーザ名によって異なります。例えばユーザ名が「higpen」の場合、ホームディレクトリ名は「higpen」です。OSに標準で付属するFinderを起動すると、最初にホームディレクトリが表示されます。
プログラムを作成する場合には、テキストエディタが必要です。macOS用の無償で使えるテキストエディタには、色々な製品(例えばatom, mi, CotEditor等)がありますので、お好みのテキストエディタを入手してお使いください。
また、OSに標準で付属するターミナルからも、いくつかのテキストエディタを起動することができます(例えばvi, nano等)。これらのテキストエディタを使う方法もあります。ターミナルの起動方法は本書p.19をご覧ください。
各テキストエディタの使い方は製品のマニュアルまたはWebをご覧ください。いずれのテキストエディタについても、ホームディレクトリにプログラムを保存すれば、ターミナルから「python3 ファイル名」でプログラムを実行することができます。例えばプログラムを「test.py」というファイル名で保存した場合、ターミナルから「python3 test.py」で実行することができます。

2018/12/19
Q.元の文字列が変更されていないことの確認(Chapter3, p.61)
A.
以下を実行すると、zipcodeの値は'1008924'から'100-8924'に変化します。

zipcode = '1008924'
zipcode = zipcode[:3] + '-' + zipcode[3:]

このとき、「元の'1008924'がメモリ上に保存されていること」を直接確認することはできませんが、「元の'1008924'とは別に'100-8924'が生成されていること」は、次のように確認することができます。

zipcode = '1008924'
zipcode2 = zipcode[:3] + '-' + zipcode[3:]

zipcodeの値は'1008924'のままで、zipcode2の値は'100-8924'となります。

2019/03/13
Q.help関数の練習問題(Chapter5, p.114)
A.
この練習問題を実行するときには、あらかじめインタプリタ上でtrip関数を定義しておく必要があります。p.113ではテキストエディタでtrip関数を定義していますが、同じ内容をインタプリタで入力してから、help関数を実行してください。

>>> def trip(dist, speed):
...   """距離と速度から所要時間を計算して返します.
...
...   引数:
...   dist -- 距離
...   speed -- 速度
...   """
...   return dist / speed
...
>>> help(trip)
Help on function trip in module __main__:

trip(dist, speed)
  距離と速度から所要時間を計算して返します.

  引数:
  dist -- 距離
  speed -- 速度

>>>

すでにテキストエディタでtrip関数の定義を入力し、ファイルに保存した場合には、以下のように実行する方法もあります。ファイル(ここではdoc.pyとします)を保存したディレクトリで、インタプリタを実行してください。

>>> from doc import trip
>>> help(trip)
Help on function trip in module doc:

trip(dist, speed)
  距離と速度から所要時間を計算して返します.

  引数:
  dist -- 距離
  speed -- 速度

>>>

2019/03/13
Q.class1.pyの実行(Chapter7, p.169)
A.
class1.pyが上手く実行できない場合、まずはサンプルファイルに収録されているclass1.pyが正しく実行できるかどうか、試してみてください。以下のような結果になれば成功です。

…\sample\chapter7>python class1.py
Name : Daikon
Level: 1
Name : Ninjin
Level: 2

手作業で入力したclass1.pyを実行したときに、もし以下のようなエラーが出る場合には、最初の行の「class Player:」が正しいかどうかを確認してください。「Player」を他の名前で入力している可能性があります。

Traceback (most recent call last):
 File "class1.py", line 7, in
  p1 = Player()
NameError: name 'Player' is not defined

2019/11/05
Q.本書と異なるバージョンのPythonの使用(Chapter2, p.9)
A.
Pythonは随時バージョンアップされています。基本的には最新版のPythonを使うことがおすすめですが、本書とは異なるバージョンのPythonを使用した場合、たまにバージョンが異なることが原因で、プログラムが動かないこともあります。この場合には、Pythonのダウンロードページから、本書と同じバージョンのPythonをダウンロードして、お使いください。


最終更新 2019/11/05
トップページへ
©ひぐぺん工房 禁無断転載
動画講座「 AIへまっしぐら! Pythonアニマルズ 」 最新刊『 AWSでつくる AIプログラミング入門 』
このサイトはリンクフリーです。 このサイトはChromeで動作検証しています。ブラウザにかかわらず表示に乱れがありましたらどうぞお知らせ下さい。メールを送る