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

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

『Technical Master はじめてのPython エンジニア入門編 Python3対応』
Q&A

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

訂正


2020/03/10
Q.pandasにおけるデータの変更(Section12-01)
A.
p.223において、データを変更するために以下を実行すると、
  >>> data[6:8]['price']=[540,590]

以下のような警告が表示されることがあります。
  <stdin>:1: SettingWithCopyWarning:
  A value is trying to be set on a copy of a slice from a DataFrame.
  Try using .loc[row_indexer,col_indexer] = value instead
  See the caveats in the documentation: …

これは元のデータを変更するのではく、コピーされたデータを変更しようとしている可能性がある…という警告です。
この問題を回避するには、上記の代わりに以下を実行してください。
  >>> data.loc[6:7, 'price']=[540,590]

locはデータフレーム(DataFrameクラス)のメソッドで、元のデータへのアクセスを提供します。

2021/01/06
Q.MySQLにおけるデータの変更(mysql2.py)(Section14-02)
A.
p.275のmysql2.pyを実行すると、以下のようなエラーが表示されることがあります。使用するMySQLなどのバージョンによって動作が異なるようです。
  Traceback (most recent call last):
   File "…mysql2.py", line 11, in
    cur.commit()
  AttributeError: 'MySQLCursor' object has no attribute 'commit'

この問題を回避するには、mysql2.pyを以下のように修正してください。なお、本サイトで配布しているダウンロードファイルは修正済みです。
  旧:cur.commit()
  新:con.commit()

また、p.274の説明を以下のように修正させてください。
  旧:カーソルのcommitメソッドを呼び出して
  新:接続のcommitメソッドを呼び出して

補足


2019/08/02
Q.ダウンロードファイルの実行
A.
本書のダウンロードファイル内のプログラムを実行する方法について補足します。
  1. Section02-01/02-02/02-03のいずれかを読んで、CPython/Anaconda/Minicondaのいずれかをインストールします。pythonコマンドの起動方法も確認しておきます。
  2. 入手したダウンロードファイルを展開します。ここでは、例えば「C:\Users\higpen\Pythonエンジニア入門編」に展開したとします。
  3. コマンドプロンプトまたはAnacondaプロンプトを起動します。
  4. cdコマンド(本書p.40)を使って、実行したいプログラム(.pyファイル)があるディレクトリに移動します。例えばChapter11のfft2.pyを実行する場合には、「cd C:\Users\higpen\Pythonエンジニア入門編\chapter11」とします。
  5. 必要なパッケージがある場合には、事前にインストールしておきます。例えばChapter11(Section11-03)のfft2.pyの場合には、NumPy(Section11-01)/SciPy(11-02)/Matplotlib(11-03)のインストールが必要です。
  6. 必要なファイルがある場合には、事前に準備しておきます。例えばChapter11のfft2.pyの場合には、Chapter10(Section10-08)で作成するla.wavという音声ファイルを、あらかじめchapter11ディレクトリにコピーしておく必要があります。作成済みのla.wavも用意しましたので、ダウンロードしてchapter11ディレクトリにコピーし、ご利用ください。
  7. pythonコマンドを使って、プログラムを実行します。例えばfft2.pyの場合には、「python fft2.py」とします。
なお、Windows(Windows10)のエクスプローラを使って、目的のディレクトリでコマンドプロンプトを開く方法もあります。
  1. エクスプロ-ラで、実行したいプログラム(.pyファイル)があるディレクトリを表示します。
  2. エクスプローラのアドレスバー(上端にある「PC>C:>ユーザー>…」などと表示されている枠)をクリックして、「cmd」と入力し、Enterキーを押します。
  3. 現在開いているディレクトリでコマンドプロンプトが開くので、pythonコマンドを使ってプログラムを実行します。

2020/04/02
Q.TensorFlowを使ったプログラムの実行(Section 13-02)
A.
TensorFlowのバージョンアップ時に仕様が変更されて、プログラムが動かなくなることがあります。例えば、実行時に以下のようなエラーが出る場合があります。
  AttributeError: module 'tensorflow' has no attribute 'logging'

本書のプログラムはTensorFlow 1.x用ですが、プログラム(tf_train.pyとtf_image.py)を以下のように修正すると、TensorFlow 2.xでも動作するようになります。本サイトで配布しているダウンロードファイルは修正済みです。
  旧:import tensorflow as tf
  新:import tensorflow.compat.v1 as tf

2020/05/29の時点において、上記のように修正したプログラムが、以下の環境のいずれでも動作することを確認しました(以下の3.は修正前のプログラムでも動作します)。なお、TensorFlowのバージョンは「pip list」または「conda list」で確認できます。
  1. Python 3.8.3(CPython, 64ビット)+TensorFlow2.2.0(pip install tensorflow)
  2. Python 3.7.3(Miniconda)+TensorFlow2.1.0(conda install -y tensorflow)
  3. Python 3.7.3(Miniconda)+TensorFlow1.15.0(conda install -y "tensorflow<2")
なお、指定した画像を判別するプログラム(tf_image.py)を実行する際には、プログラム(tf_image.py)と同じフォルダに、判別対象の画像ファイル(0.png~9.pngなど)を配置してください。

WindowsでTensorFlowをインストールする場合、64ビット版のPythonを使用する必要があります。「python」コマンドを実行したときのバージョン表示から、32ビット版か64ビット版かを確認することができます。
ウイルス対策ソフトウェアを使用していて、TensorFlowのインストールに失敗する場合には、一時的にウイルス対策ソフトウェアを無効にして、インストールしてみてください。

これでも本書のプログラムが動作しない場合があるかもしれません。例えば、実行時に以下のようなエラーが出る場合もあります。
  ImportError: DLL load failed while importing
  _pywrap_tensorflow_internal: 指定されたモジュールが見つかりません。

こういった場合は、以下のようにバージョンを指定してTensorFlowをインストールした後に、本書のプログラムを実行してみてください。
上記はTensorFlow 1.xをインストールします。2020/04/02の時点で、Windows 10でPython 3.7とTensorFlow 1.15を使って、本書のプログラムが動作することを確認しました。また、この時点ではPython 3.8を使うとTensorFlowが正しく動作しませんでした(Python 3.7をお使いください)。

また、上記の手順でもTensorFlowのインストールに失敗する場合には、以下をお試しください。原因ははっきりしないのですが、色々なバージョンのTensorFlowをインストールしたり、pipとcondaを併用しているうちに、TensorFlowのインストールが上手くできなくなることがありました。
  1. TensorFlowを一度アンインストールします。CPythonは「pip uninstall -y tensorflow」を、Anaconda/Minicondaは「pip uninstall -y tensorflow」と「conda remove tensorflow」の両方を実行します。その後、上記の手順でTensorFlowを再インストールします。
  2. それでもTensorFlowをインストールできないときには、CPythonやAnaconda/Minicondaをアンインストールしてから、再インストールします。その後、上記の手順でTensorFlowを再インストールします。筆者の場合、Minicondaを再インストールしたら、TensorFlowを上手くインストールできるようになったことがありました。

2020/02/04
Q.括弧の使い分け(Section 04-04、05-01、05-02など)
A.
Pythonでは、次のような3種類の括弧(かっこ)を使います。

記号名称
()丸括弧、小括弧
{}波括弧、中括弧
[]角括弧、大括弧

文法ごとに正しい種類の括弧を使う必要があります。誤った種類の括弧を使うと、プログラムが動作しなかったり、意図とは違う動作をしたりします。

例1:
タプルを作るときには、丸括弧()を使います(p.76)。
  a = ('curry', 860)
タプルの要素を取得するときには、角括弧[]を使います(p.77)。
  a[0]

例2:
リストを作るときには、角括弧[]を使います(p.70)。
  menu = ['curry', 'pasta', 'steak']
リストの要素を取得するときには、角括弧[]を使います(p.71)。
  menu[0]
リストの要素を変更するときにも、角括弧[]を使います(p.71)。
  menu[1] = 'doria'

本書の例において、どの種類の括弧が使われているのかをよく確認して、同じ種類の括弧を入力してみてください。もし、お使いの環境で括弧が上手く入力できない場合には、以下をお試しください。

2020/02/04
Q.timeitモジュールの実行方法(Section 10-05)
A.
timeitモジュールを実行するときには、Pythonインタプリタの内部ではなく、コマンドプロンプトやAnacondaプロンプト上で、例えば次のように実行してください。

C:\Users\ユーザ名> python -m timeit "[x for x in range(100)]"
100000 loops, best of 5: 3.16 usec per loop

Pythonインタプリタの内部で実行すると、次のようなエラーになってしまいます。
>>> python -m timeit "[x for x in range(100)]"
 File "", line 1
  python -m timeit "[x for x in range(100)]"
       ^
SyntaxError: invalid syntax

この場合はPythonインタプリタを終了してから、上記のようにtimeitモジュールを実行してください。Pythonインタプリタの終了には、Ctrl-Zキー(macOS/LinuxではCtrl-Dキー)を使います(p.38)。

あるいは、Pythonインタプリタを実行しているコマンドプロンプト(Anacondaプロンプト)とは別に、もう一つコマンドプロンプト(Anacondaプロンプト)のウィンドウを開き、そちらでtimeitモジュールを実行しても構いません。

2020/02/18
Q.本書の通りに入力したはずなのに動かない
A.
本書の通りにプログラムを入力したはずなのに、意図した通りに動かない場合には、以下をお試しください。
  1. ダウンロードファイルを利用する。
    まずはダウンロードファイルをそのまま利用して、実行してみてください。これで正しく動作する場合には、入力したプログラムのどこかが本書のプログラムと異なっている可能性があります。ダウンロードファイルが正しく動作しない場合には、このQ&Aを参照していただき、Q&Aに対策が掲載されていない場合には、誠にお手数ですがご連絡をいただけましたら幸いです。
  2. 入力したプログラムと本書のプログラムを比較する。
    目で比較しても分からないときには、ツールを使ってファイルの内容を比較するのがおすすめです。コマンドラインで使える標準搭載のツールとしては、macOSやLinuxには「diff」、Windowsには「fc」があります。別途インストールが必要ですが、Windowsでは「WinMerge」などのツールも便利です。またテキストエディタによっては、ファイルの内容を比較する機能を内蔵しているものもあります。
例えば、以下は本書p.191のプログラムです。
  pattern = r'(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,}'
以下は一部が異なっているために正しく動かないプログラムです。
  pattern = r'(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8.}'
どこが異なっているのか分かりづらいのですが、この場合は末尾付近の「8,」と「8.」が異なります。

また、以下は本書p.245のプログラムです。
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
以下は一部が異なっているために正しく動かないプログラムです。
  tf.keras.layers.Dense(512, activation=tf.nn.rule),
こちらも分かりづらいのですが、末尾付近の「relu」と「rule」が異なります。

2020/04/21
Q.CPythonとAnaconda(Miniconda)の併用(Chapter 02)
A.
CPythonとAnaconda(またはMiniconda)を併用することは可能です。

筆者の場合、Python 3.8(CPython)と、Python 3.7(Miniconda)を併用しています。Python 3.8(CPython)においてTensorflow 1.xが動作しなかったため、Python 3.7(Miniconda)上にインストールして使用しました。MinicondaにTensorflowをインストールする際には、conda、pipともにインストールは可能でした(Anaconda/Minicondaではcondaが推奨されています)。

他のライブラリについても、Python 3.8(CPython)上で動作しない場合には、併用しているPython 3.7(Anaconda/Miniconda)上で使用できる可能性はあります。

2020/04/24
Q.scikit-learnを使ったプログラムの実行(Section 13-01)
A.
ウイルス対策ソフトウェアを使用していて、scikit-learnのインストールに失敗する場合には、一時的にウイルス対策ソフトウェアを無効にして、インストールしてみてください。

また、Section 13-01のプログラムを実行するには、scikit-learnに加えて、pandas(Section 12-01)とMatplotlib(Section 11-03)をインストールしておいてください。

2020/04/28
Q.画像ファイルの入力(Section 10-07)
A.
p.196の画像ファイルを入力するプログラム(image3.py)は、一つ前にあるp.194の画像を描画するプログラム(image2.py)が出力する、画像ファイル(random.png)を読み込みます。image3.pyを正しく実行するには、image3.pyと同じフォルダに、random.pngが存在する必要があります。もしrandom.pngが存在しない場合、以下のようなエラーになります。

FileNotFoundError: [Errno 2] No such file or directory: 'random.png'
(ファイルが見つからない:random.pngというファイルまたはディレクトリがない)

image3.pyを正しく実行するには、以下の手順をお試しください。
  1. 本書のダウンロードファイルを使用してください。
  2. chapter10フォルダに移動します。移動の方法は、このQ&Aの「ダウンロードファイルの実行」をご覧ください。
  3. 「python image2.py」として、image2.pyを実行します。
  4. エクスプローラからrandom.pngを開くなどして、image3.pyと同じフォルダにrandom.pngが作成されていることを確認してください。
  5. 「python image3.py」として、image3.pyを実行します。

2020/08/28
Q.Jupyter Notebookで.pyファイルを扱うには(Section 12-02)
A.
Pythonプログラムのファイル(拡張子.py)をJupyter Notebookで編集するには、Jupyter Notebookで.pyファイルを直接開くのではなく、一度テキストエディタで.pyファイルを開いて全体をコピーしてから、Jupyter Notebookにペースト(貼り付け)するのがおすすめです。具体的には次のように操作します。
  1. Jupyter Notebookを起動し、本書p.228の手順で新しいページを開きます。
  2. テキストエディタで.pyファイルを開き、全体を選択してからコピーします。
  3. Jupyter Notebookのページにプログラムを貼り付けます。

2022/11/02
Q.ModuleNotFoundError(Section 10-07)
A.
PILパッケージについてModuleNotFoundErrorが出る場合、p.192の手順に沿って、Pillowライブラリをインストールしてください。CPython(コマンドプロンプトやVisual Studio Codeなど)と、Anaconda(AnacondaプロンプトやSpyderなど)では、ライブラリが別々に管理されています。例えば「Anacondaでは動作するのに、CPythonでは動作しない」という場合は、AnacondaにはPillowがインストールされているが、CPythonにはPillowがインストールされていない、という状況が予想されます。p.192のように、CPythonのコマンドプロンプトで「pip install pillow」を実行し、CPythonにPillowをインストールしてください。

2022/11/03
Q.fft1.pyの実行結果が一部見えない(Section 11-02)
A.
fft1.pyの実行結果は行数が多いため、コマンドプロンプト(あるいはAnacondaプロンプト)で表示すると、先頭に近い行が流れてしまって見えないことがあります。この場合は、以下のように実行してみてください。1ページごとに表示が止まり、スペースキーで次のページに進むので、結果を確認しやすくなります。途中で終了するには、qキーまたはCtrl+Cキーを入力します。

  python fft1.py | more

コマンドプロンプトの設定において、「履歴のサイズ」を変更し、スクロールして戻せる行数を増やす方法もあります。設定の方法はOSやバージョンにより異なるので、Webで検索してみてください。Windows 11(バージョン22H2)の場合には、Windowsターミナルの設定において、「コマンドプロンプト」の「詳細設定」の「履歴のサイズ」を変更します。

なおfft1.pyを実行するには、SoundFileライブラリのインストールと、音声ファイル(la.wav)が必要です。事前にSection10-08(p.198)の手順に沿って、ライブラリをインストールし、sound1.pyを実行して、出力されたla.wavをfft1.pyと同じフォルダにコピーしておいてください。本サイトのダウンロードファイルには、chapter11フォルダにla.wavを収録しておきましたので、必要に応じてご利用ください。

最終更新 2022/11/03
トップページへ
©ひぐぺん工房 禁無断転載
最新刊『Java[完全]入門』 
このサイトはリンクフリーです。
このサイトはChromeで動作検証しています。ブラウザにかかわらず表示に乱れがありましたらどうぞお知らせ下さい。メールを送る