0
Help us understand the problem. What are the problem?

posted at

updated at

『Python1年生』で勉強中(その3)

この記事について

『Python1年生』(以下、書籍)でPythonを学習する超初心者の記録です。
後述の「やったこと」にも書いていますが、ようやく書籍を最後まで進めました。
その1, その2に引き続き、超初心者の学習記録ですので、今回も大したことは書いていないと思います。

■ バックナンバー
『Python1年生』で勉強中(その1)
『Python1年生』で勉強中(その2)

実行環境

OS・MW バージョンなど
OS Windows 10 Pro 21H2 19044.1645
Python 3.10.4
IDLE 3.10.4

やったこと

前回(「その2」)の続きから書籍の最後まで、サンプルプログラムを試しながら読み進めました。
具体的には「第4章 アプリを作ってみよう」と「第5章 人工知能くんと遊んでみよう」の部分です。

気になったところ

Python関連

書籍のp135のサンプルプログラムについて

dispPhoto(Path)の中、「imageLabel.configure(image = imageData)」の行と、「imageLabel.image = imageData」の行とでやっていることの違いがよく分かっていません。
書籍の内容を通すのを優先したので詳しく調べていませんが、どちらも、行の雰囲気としては「imageLabelのimageにimageDataを設定する」というような意味だと思うのですけども……
試しに、片方をコメントアウトしてもう片方だけ残してみましたが、そうするとラベルに画像が表示されませんでした。(実行時エラーは特になし)

「(数字, 数字)」という書き方について

同じく書籍のp135のサンプルプログラム内に、以下の行があります。

	# 画像を読み込む
	newImage = PIL.Image.open(path).resize((300,300))

気になったのはこの末尾、「resize((300,300))」という部分です。
こういうふうに、数字を組にするような書き方をJavaScriptで見たことがなかったので(JavaScriptにもあるかもしれませんが)気になりました。
この書き方のメリットがあるんでしょうが、これも後で調べるリスト入りにします。

matplotlib.pyplot.subplot()の第3引数の範囲について

書籍のp169のサンプルプログラムについて、「plt.subplot()」の第3引数にでたらめな値を入れて見るとエラーになります。
で、エラーメッセージを見ると「第3引数の範囲は0以上50以下」のようですが、その範囲に収まるようにしても、たとえば次のような書き方ではエラーになりました。(直接関係ない部分のソースは省略)
本筋と外れるので深く調べませんでしたが、少し気になる……

for i in range(25):
	plt.subplot(5, 10, i * 2)

「PIL.Image.ANTIALIAS」と「PIL.Image.Resampling.LANCZOS」について

書籍のp170のサンプルプログラムを試したところ、以下のWarningが表示されました。
プログラム自体はいちおう実行はされます。

    grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS)
DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.

「ANTIALIASの代わりにResampling.LANCZOSを使え」と言われているようなので、該当の行を「grayImage = grayImage.resize((8,8),PIL.Image.Resampling.LANCZOS)」に書き換えたところ、Warningが消えました。

Pillowのドキュメントの「Antialias renamed to Lanczos」を見ると、Pillow 2.7.0以降では「LANCZOS」を用いるように変わったようでした。
「ANTIALIAS」は後方互換性のために残されているとのことです。

書籍の内容について ※Pythonと直接関係しない部分

Pillowのインストール時間

書籍のp133にて、Pillowの「インストールはしばらくかかります。」とありましたが、実際は数秒で完了しました。この辺は環境によるんでしょうけど。

人工知能アプリ用のライブラリをインストールする手順について

書籍の第5章の冒頭(p156~p161)にかけて、人工知能アプリ用のライブラリをいくつかインストールする手順があります。
Windows向けの手順では、numpyとscipyについては個別にダウンロードしたうえでインストールしていますが、Mac向けの手順と同様に「pip install ~」でもインストールできました。
少なくとも、書籍のサンプルプログラムを実行するぶんにはこれでいいようです。

>pip install wheel
Collecting wheel
  Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel
Successfully installed wheel-0.37.1

>pip install numpy
Collecting numpy
  Downloading numpy-1.22.3-cp310-cp310-win_amd64.whl (14.7 MB)
     ---------------------------------------- 14.7/14.7 MB 2.8 MB/s eta 0:00:00
Installing collected packages: numpy
Successfully installed numpy-1.22.3

>pip install scipy
Collecting scipy
  Downloading scipy-1.8.0-cp310-cp310-win_amd64.whl (37.0 MB)
     ---------------------------------------- 37.0/37.0 MB 2.7 MB/s eta 0:00:00
Requirement already satisfied: numpy<1.25.0,>=1.17.3 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from scipy) (1.22.3)
Installing collected packages: scipy
Successfully installed scipy-1.8.0

>pip install scikit-learn
Collecting scikit-learn
  Downloading scikit_learn-1.0.2-cp310-cp310-win_amd64.whl (7.2 MB)
     ---------------------------------------- 7.2/7.2 MB 3.2 MB/s eta 0:00:00
Collecting joblib>=0.11
  Downloading joblib-1.1.0-py2.py3-none-any.whl (306 kB)
     ---------------------------------------- 307.0/307.0 KB 3.2 MB/s eta 0:00:00
Collecting threadpoolctl>=2.0.0
  Downloading threadpoolctl-3.1.0-py3-none-any.whl (14 kB)
Requirement already satisfied: scipy>=1.1.0 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from scikit-learn) (1.8.0)
Requirement already satisfied: numpy>=1.14.6 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from scikit-learn) (1.22.3)
Installing collected packages: threadpoolctl, joblib, scikit-learn
Successfully installed joblib-1.1.0 scikit-learn-1.0.2 threadpoolctl-3.1.0

>pip install matplotlib
Collecting matplotlib
  Downloading matplotlib-3.5.1-cp310-cp310-win_amd64.whl (7.2 MB)
     ---------------------------------------- 7.2/7.2 MB 511.0 kB/s eta 0:00:00
Collecting packaging>=20.0
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     ---------------------------------------- 40.8/40.8 KB 1.9 MB/s eta 0:00:00
Collecting fonttools>=4.22.0
  Downloading fonttools-4.32.0-py3-none-any.whl (900 kB)
     ---------------------------------------- 900.8/900.8 KB 3.3 MB/s eta 0:00:00
Requirement already satisfied: numpy>=1.17 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from matplotlib) (1.22.3)
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Requirement already satisfied: pillow>=6.2.0 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from matplotlib) (9.1.0)
Collecting pyparsing>=2.2.1
  Downloading pyparsing-3.0.8-py3-none-any.whl (98 kB)
     ---------------------------------------- 98.5/98.5 KB 1.9 MB/s eta 0:00:00
Collecting python-dateutil>=2.7
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ---------------------------------------- 247.7/247.7 KB 3.8 MB/s eta 0:00:00
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.4.2-cp310-cp310-win_amd64.whl (55 kB)
     ---------------------------------------- 55.3/55.3 KB 2.8 MB/s eta 0:00:00
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyparsing, kiwisolver, fonttools, cycler, python-dateutil, packaging, matplotlib
Successfully installed cycler-0.11.0 fonttools-4.32.0 kiwisolver-1.4.2 matplotlib-3.5.1 packaging-21.3 pyparsing-3.0.8 python-dateutil-2.8.2 six-1.16.0

挿絵のイラストについて

Pythonとは全く関係しない部分なんですけども……
p168とか、厳密にはまだ人工知能の導入部分には入っていない(学習用の画像を試しに表示しているだけ)なのに、「50個を学習したっちゅ。」とかセリフがあるのは誤解を招きそうな気もしないでもないです。

後で調べる一覧

※過去の記事で記載したものも引き続き記載しています。

  • 循環小数の出力が小数点以下16桁までとなる理由について
  • Pythonのバージョンによるエラーメッセージについて
  • Pythonの「リスト」「配列」「多次元配列」の違いについて
  • 『Python1年生』p110のサンプルプログラムで1.1を掛けた場合の出力の理由について
  • print関数で、「,」で区切るのと、「+」で連結するのとの違いについて
  • 「from ~~~ import *」と「import ~~~」の違いについて
  • PIL.imageTkの「imageLabel.configure(image = ~)」と「imageLabel.image = ~」で行っている内容について
  • 「(数字, 数字)」という書き方の利用シーン、メリット、デメリット等について
  • plotlib.pyplot.subplot()の第3引数の範囲について

余談

『Python1年生』を今回最後まで進めてみて、こういう「超初心者向け」の書籍でも、1冊通して読み進めて一通り写経してみると、それなりに達成感のようなものがあって良かったです。
決まった間隔でQiitaに記事を投稿する、と決めていたのも、モチベーションを保つ原因になっていたと思います。
『Python1年生』では、人工知能部分はとりあえず触ってみただけ、というレベルだったので、今後は他の書籍でも学習を進めていきたいと思います。

と言いつつ、先日『Python2年生 スクレイピングのしくみ』を買って進めているので、当面はこちらを完了させようかなと思っています。
上の「後で調べる一覧」も適当なタイミングで本当に調べて片付ける必要がありますが、『Python*年生』シリーズを全部やってから着手しようと考えています。着手するころにはだいぶ肥大化してそうですけど……
Qiitaにも引き続き、学習記録として記事を投稿していくつもりです。お目汚しになるかと思いますがお付き合いください。

参考書籍、参考ページ

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?