■サンプルファイルのダウンロードについて
本書掲載のサンプルファイルは、一部を除いてインターネット上のダウンロードサービスからダウンロードすることができます。詳しい手順については、本書の巻末にある袋とじの内容をご覧ください。
なお、ダウンロードサービスのご利用にはユーザー登録と袋とじ内に記されている番号が必要です。そのため、本書を中古書店から購入されたり、他者から貸与、譲渡された場合にはサービスをご利用いただけないことがあります。あらかじめご承知おきください。

・本書の内容についてのご意見、ご質問は、お名前、ご連絡先を明記のうえ、小社出版部宛文書（郵送または E-mail）でお送りください。
・電話によるお問い合わせはお受けできません。
・本書の解説範囲を越える内容のご質問や、本書の内容と無関係なご質問にはお答えできません。
・匿名のフリーメールアドレスからのお問い合わせには返信しかねます。
本書で取り上げられているシステム名／製品名は、一般に開発各社の登録商標／商品名です。本書では、™ および ® マークは明記していません。本書に掲載されている団体／商品に対して、その商標権を侵害する意図は一切ありません。本書で紹介している URL や各サイトの内容は変更される場合があります。

前書き

Google の機械学習（人工知能）で使用されているプログラミング言語として有名になった
Python は、その簡潔なコーディングや高い機能性などから、今日、最も注目されている言語の 1 つであり、初心者向きとも言われています。
「初心者向き」という形容は、個人的には疑問に思う点もありますが、近年プログラミング
言語の善し悪しは、言語そのものの仕様ではなく、言語に関する Web ページなどの情報量、その言語から使用できるライブラリの豊富さ、それを支えるフォーラムなどコミュニティを含めた「エコシステム」（生態系）の方が重要になってきています。Python は、前述の機械学習
以外にも、画像処理、Web スクレイピングや、自然言語処理、科学技術計算、ロボットのア※1

プリケーション開発（ROS）、
IoT や組み込みシステムなどさまざまな分野で利用されてきており、それを支えるライブラリやコミュニティの豊富さなどからさまざまなシステムやアプリ
ケーションが開発できるようになってきています。また、既存のソフトウェアへの組み込みとしては、統合 3DCG ソフト（Maya、Blender、LightWave 等）でデファクトスタンダードのスクリプト言語にもなっています。
本書ではそのような Python のライブラリの中から比較的手軽に利用でき、知っておくと便利そうなものを選び、サンプルプログラムとともに説明したものです。サンプルプログラムは200 個以上あり、ダウンロードサービスからすべて取得できます。全部で 12 種類のライブ
ラリを扱っており、第 1 章はそのライブラリを用いたサンプルプログラムを読むのに必要なPython の知識を概説しています。それ以降は各ライブラリの説明になりますが、それぞれのライブラリをなるべく等しく扱うために各章を 20 〜 40 ページとしてあります。基本的にはどの章から読まれても大丈夫だと思いますが、第 10 〜 13 章は互いに関連するため続けて読まれることをお勧めします。また、本書を大学の講義などで使う場合は長い章を 2 回に分けるなどすると 14 〜 15 回とすることができると思いますし、いくつかの章を飛ばしてもよい
※2

でしょう

。

※1

Pepper の開発環境でも Python が使えます。

※2

参考までに、筆者が話をするときは、自然言語処理とデータベースが人気がありません。

iii

本書の執筆にあたっては、弓林司君（大妻女子大学非常勤講師、4、10、12、13 章）、竹畑
柚木さん（大妻女子大学社会情報学部情報デザイン専攻、5 章、6 章）の協力を得ることができました。また、草稿のチェックはこれまでも大変お世話になっている小沼千絵さん（NEC）、
山本美咲季さんにお願いできました。この場を借りて感謝します。編集はカットシステムの武井智裕さんのお世話になりました。二つ返事で本書の執筆の機会を与えていただけたカットシ
ステムの石塚勝敏さんに感謝するとともに遅筆をお詫びします。
令和元年 5 月吉日
伊根町周辺にてけりますと
松田晃一

iv

0.1 新しそうで古い言語 Python
Python は近年話題になることが多いことから新しい言語だと思いがちですが、実は 1991
年に登場した古いプログラミング言語です。Java が登場したのが 1995 年なのでそれよりも4 年も古いことになります。当時のスクリプト言語としては Tcl/Tk があり、筆者もその頃、開発していたシステムのスクリプト言語を決める際に、Tcl/Tk か Python で迷った記憶があります。当時は Python がまだ不安定だったせいもあり、前者を採用しました。このように歴史※3の長い言語であるため、そこここで古さを感じることがあります。

Python の特徴としては、波括弧を排除し言語仕様で字下げが必須であるため自然とプログ
ラムが読みやすくなる、他の言語に比べて同じ機能のプログラムが少ない行数で書けるという点があります。ライブラリという本書の観点からはインストールが簡単というのも大きな特徴でしょう（特に OpenCV を勉強される方は Python をお勧めします）。その反面、他の言語を経験された方には逆に自由度が少ないと感じられることもあるかもしれませんし、クラスなど
は分かりにくいと思われるかもしれません。初心者向きとも言われていますが、これは人によるでしょう。以下に 1 から 10 までの整数の和を求めるプログラムを Python と C 言語で示します。
sum = 0for i in range(1, 11):
sum = sum + iprint (sum)int main(){int sum = 0;

for (int i = 1; i < 11; i++){}sum = sum + i;printf ("%d¥n", sum);}

return 0;

Python は C 言語の半分くらいの行数であることが分かります。また、C 言語をご存じの方は、（これまでのプログラミング言語とは）かなり違うという印象をもたれたかもしれません。
※3

Tcl/Tk の Tk が Python の tkinter で利用できることを知ったときは当時を思い出しました。

v

0.2 Python のインストールとプログラムの実行
Python のインストール方法と、インストールした Python を使ってプログラムを作成して動作させる方法を一通り確認しましょう。

Python は以下に示す Python のホームページで公開されています。この他にも Anacondaなどの Python と他のライブラリをセットにしたディストリビューションもありますが、本書ではどのような環境でも使用できるように最もプリミティブな環境である、本家の「すっぴん」の Python を用います。

図0.1●Pythonのホームページ（http://www.python.org）

ここで画面真ん中上の Downloads をクリックすると以下のページが表示されます。

vi

図0.2●Downloadsページ

ここで「Downloads Python 3.7.x」をダウンロードして、ダウンロードしたファイルをダ
ブルクリックして実行してください。Windows の場合は、次のようなウィンドウが表示されます。

図0.3●インストーラの表示するウィンドウ

ここで下の「Add Python 3.7 to PATH」のチェックボックスをクリックしてから、上の方にある「Install Now」をクリックしてください。デバイスの変更の許可などは「はい」を選択してください。Mac の場合も同様のウィンドウが表示されますが、PATH は自動的に設定さvii

れるので、そのまま「続ける」をクリックしてください。最後に ｢インストール｣ をクリック
します。これでインストールが始まります。次のウィンドウが表示されればインストール完了です。

図0.4●インストールの完了を示すウィンドウ

これで Python を使用する準備が整いました。それではさっそくインストールした Pythonを使ってみましょう。Python のプログラムの実行方法は、（1）インタラクティブシェルで実行する方法と、（2）ファイルにプログラムを書きそれを実行する方法の 2 つの方法があります。

0.3 インタラクティブシェル
「インタラクティブシェル」という言葉はあまり聞き慣れない言葉だと思います。シェルという言葉には太古の UNIX の時代から「ユーザからのコマンド入力を受け付け、解釈するプログラム」という特殊な意味があります。つまり、インタラクティブシェルとは「対話型（インタラクティブ）で、ユーザからのコマンドを受け付け、解釈するプログラム」という意味となります。

Python プログラムにおけるインタラクティブシェルとは、「対話型、すなわち、コンピュータ（この場合は、Python）と向かい合って話し合う形式で、ユーザからの Python のプログラ
ムやコマンドを受け付け、解釈するプログラム」のこととなります。では、インタラクティブviii

シェルを実行して Python を使ってみましょう。

0.4 インタラクティブシェルでの実行
インタラクティブシェルの実行方法には 2 つの方法があります。1 つはコマンドプロンプト
やターミナルで「python」と入力して起動する方法、もう 1 つは Windows に Python をインストールすると一緒にインストールされる python 3.7 というアプリケーションを利用する方法です。以下に、Windows のコマンドプロンプトで「python」と入力した場合のウィンドウを示します。実行するとバージョンが表示され入力待ちになります。Mac ではターミナルで同様に行います。Mac の場合は Python 2 が最初からインストールされているので、それが起動してしまう場合は python3 と入力してください。本書では、「python」と表記します。

図0.5●コマンドプロンプトでpythonを実行した様子

これに対し、Windows の Python 3.7 というアプリケーションでは、スタートメニューで表示される以下のようなアイコンを選択することで起動できます。こちらの場合は、先ほどと異なり「python」と入力しなくても、すぐに Python のコマンドを試してみることができます。

図0.6●Python 3.7アプリケーションixPython 3.7 を起動した後の画面を以下に示します。

図0.7●Python 3.7アプリケーションの起動画面

どちらの方法でも画面上に「>>>」という記号が表示されます。ここで表示される「>>>」は Python がコマンドの入力を待っていることを示す表示です。これは「コマンドプロンプト」と言いますが、この名称は Windows のコマンドプロンプトと名前が同じなので紛らわしいかもしれません。
インタラクティブシェルを終了するには「quit()」と入力して Enter キーを押してください。
インタラクティブシェルで Python のプログラムを入力して実行することができます。例えば、
簡単な数式を入力して Enter キーを押すと、Python がその式を計算して答えを表示してくれます。以下のように入力してみてください。
>>> 4 + 6
10>>> 4 * 624>>>

ここで 2 つ目の「*」は掛け算を表します（第 1 章参照）
。数式を入力すると Python が受け取り計算結果を表示してくれます。それぞれ入力し Enter キーを押し、結果が表示されると、
再度「>>>」が表示されることが分かります。
実際には、Python は計算以外の処理も行い、その結果も表示するので、「計算」ではなく「評価」という言葉が使われます。先ほどの例は、数式を「評価」している、と言うことになります。つまり、数式を評価することは、数式を計算することを意味します。
このようにインタラクティブシェルは、入力をすぐに Python がチェックし評価してくれるので、何かを試してみるのには非常に便利ですが、複雑なプログラムを入力するのには大変です。このような場合に、プログラムをエディタで入力し、それをファイルに保存、Python にx実行させる方法があります。

0.5 プログラムの作成、保存、実行
Python のプログラムを作成するのは簡単です。みなさんが普段使っているテキストエディ
タでテキストファイルを作成し、そこに Python に実行してほしい内容を書いておくだけです。
テキストエディタは何でも構いません。
こ こ で は Python を イ ン ス ト ー ル す る と つ い て く る IDLE（Integrated Development

Environment）を使って説明します。これは、さまざまな OS で使用することができ、プログ
ラム入力支援機能（キーワードをハイライトする機能や、自動字下げ機能など）、エディタからプログラムを実行する機能などがサポートされています。

図0.8●IDLE

IDLE は Windows ではスタートメニューから実行することができます。Mac の場合は、SpotLight で「IDLE」を検索してみてください。実行すると次のようなウィンドウが表示されます。

図0.9●IDLEの画面「>>>」が表示されていることから分かるように、これは先ほど説明したインタラクティブ
シェルです。ここにコマンドを入力すると、前の節の説明と同様に実行できます。

xi

IDLE を使って新しく Python のプログラムを書くには、［File］メニューから［New File］
を選んでください。次のようなウィンドウが表示されます。

図0.10●IDLEのエディタ画面

これが Python のプログラムを入力するエディタになります。ここに次のように入力してみましょう。

図0.11●IDLEにプログラムを入力している様子

print という文字列を入力し終わると文字列が紫色に変わることが分かります。これは「print」が Python で使われる特別なキーワードであることを示しています。例えば、これを間違えて、「printo」と入力すると黒字のままになります。このような機能をキーワードのハ
イライト機能と言います。
入力が終わったら保存します。その前に分かりやすいように Windows の場合は C: ドライブ（Mac の場合はホームディレクトリなど）に python3 というフォルダを作っておいてください。
［File］メニューから［Save］を選択してください。次のようなウィンドウが表示されるので、C ドライブの python3 フォルダに移動し、test という名前をつけて保存してください。

xii

ここでは表示されていませんが、このファイルの拡張子は「py」となります。Python では拡
張子に py を用いるのが一般的です。

図0.12●IDLEのファイルダイアログボックス

また、既に保存してあるプログラムを編集するには、［File］メニューから［Open...］を選択して読み込んでください。ファイルの作成や保存、再度開く場合の操作は他のアプリケー
ションと同じです。
これでプログラムの保存ができたので、さっそく実行してみましょう。test.py を作成した
画面上の［Run］メニューから［Run Module］を選択してください。これで今保存したプログラムを実行することができます。以下に結果を示します。

図0.13●IDLEによるプログラムの実行とその結果

xiii

先ほど書いた 3 つの print(' こんにちは ') が実行され、「こんにちは」が 3 回表示されていることが分かります。

IDLE を終了する場合は Windows では［File］メニューから［Exit］、Mac では［IDLE］メ
ニューから［Quit IDLE］を選択してください。ウィンドウの「×」を押して終了しても構いません。
このようにして作成したプログラムは前の節で説明した Windows のコマンドプロンプトやMac のターミナルでも実行できます。コマンドプロンプトやターミナルを立ち上げて、test.
py が置かれているフォルダに移動します。これには cd コマンドを用います。Windows では C:/
python3 においたのでそこに移動します。

図0.14●コマンドプロンプトからのプログラムの実行（フォルダの移動）

移動した後は、python コマンドの引数に先ほど作成した test.py を指定し Enter キーを押すと実行することができます。

図0.15●コマンドプロンプトからのプログラムの実行

本書では、内容に応じて Python のインタラクティブシェルでの実行とファイルでの実行を切り替えて用います。インタラクティブシェルでの実行は

xiv

>>>

を用いて表し、ファイルでの実行は> python プログラム名という形で表記してあります。
なお、本書のダウンロードサービスで提供されるサンプルプログラムにはすべて 1 行目にコメントが入っているので、本文中の行番号とは 1 行ずれるので注意してください。
最後に、本書で使用しているライブラリの一覧を載せておきます。

beautifulsoup4

4.7.1

Django2.2.1

Janome

0.3.9

Keras

2.2.4

matplotlib

3.1.0

numpy

1.16.3

opencv-contrib-python

4.1.0.25

opencv-python

4.1.0.25

requests

2.22.0scikit-learn

0.21.1

tensorflow

1.13.1

0.6 まとめ
こ こ ま で、Python の 紹 介 に 加 え て、Python の イ ン ス ト ー ル 方 法、 イ ン ス ト ー ル し た

Python を使ってプログラムを作成し実行する方法について説明しました。Python にはキーボードでプログラムを入力し、1 行 1 行実行する方法（インタラクティブシェル）と、ファイxv

ルに入力してから実行する方法の 2 つがあります。インタラクティブシェルでは、プログラ
ムを入力するとすぐに結果を返してくれるので、最初に勉強する場合や、何かをちょっと確認
したい場合に便利でしょう。ファイルに入力する方法では、テキストエディタであればどれでも使用できますが、ここでは IDLE を紹介しました。この方法では、長めのプログラムを書いたり、少しずつ変更しながら何度も実行して結果を確認したい場合に役に立ちます。

xvi

目 次

目

次

目次

前書き----------------------------------------------------------------------------------------------------------------- iii
0.1

新しそうで古い言語 Python-----------------------------------------------------------------------------v

0.2

Python のインストールとプログラムの実行------------------------------------------------------- vi

0.3

インタラクティブシェル------------------------------------------------------------------------------ viii

0.4

インタラクティブシェルでの実行-------------------------------------------------------------------- ix

0.5

プログラムの作成、保存、実行----------------------------------------------------------------------- xi

0.6

まとめ------------------------------------------------------------------------------------------------------- xv

第1章
1.1

Python 概説 …… 1
変数とデータ------------------------------------------------------------------------------------------------1●

1.2

変数------------------------------------------------------------------------------------------------------------5
●

1.3
1.4

1.5

リスト------------------------------------------------------------------------------------------------------- 10●

1.4.1 要素へのアクセス … 11 ／● 1.4.2 要素の変更と追加 … 13 ／● 1.4.3 要素の削除 … 14●

1.4.4 リストの連結と拡張 … 15 ／● 1.4.5 部分リストへのアクセス … 16●

1.4.6 2 次元リスト … 17

タプル------------------------------------------------------------------------------------------------------- 18

1.8
1.9

1.10

1.11

1.5.1 要素へのアクセス … 19 ／● 1.5.2 タプルからリストへの変換 … 20

辞書---------------------------------------------------------------------------------------------------------- 20●

1.7

1.2.1 変数名の付け方 … 5 ／● 1.2.2 変数の使い方 … 6

文字列---------------------------------------------------------------------------------------------------------9●

1.6

1.1.1 算術演算子 … 2 ／● 1.1.2 代入演算子と変数 … 3

1.6.1 要素へのアクセス … 21 ／● 1.6.2 要素の追加と変更 … 21 ／● 1.6.3 要素の削除 … 22

条件分岐（if 文）------------------------------------------------------------------------------------------ 23●

1.7.1 else 文、elif 文 … 25 ／● 1.7.2 比較演算子 … 27 ／● 1.7.3 論理値 … 27●

1.7.4 論理演算子 … 28

繰り返し（while 文）------------------------------------------------------------------------------------- 29
繰り返し（for 文）---------------------------------------------------------------------------------------- 33●

1.9.1 range 関数 … 35 ／● 1.9.2 タプル型、文字列型、辞書型 … 36●

1.9.3 二重 for ループ … 38 ／● 1.9.4 break と continue … 39●

1.9.5 while と for の使い分け … 40

関数---------------------------------------------------------------------------------------------------------- 41●

1.10.1 関数の定義と実行順序 … 42 ／● 1.10.2 戻り値 … 44●

1.10.3 キーワード引数 … 45 ／● 1.10.4 無名関数 … 46

クラス------------------------------------------------------------------------------------------------------- 48●

1.11.1 データだけを管理するクラス … 48●

1.11.2 データを操作する機能を持つクラス … 52 ／● 1.11.3 継承機能 … 54

1.12

ライブラリの読み込みとインストール------------------------------------------------------------- 57

1.13

まとめ------------------------------------------------------------------------------------------------------- 59

xvii

第2章

ファイル入出力（file）…… 61

2.1

ファイルを読み込み、内容を表示する------------------------------------------------------------- 62

2.2

1 行ずつ読み込む----------------------------------------------------------------------------------------- 64

2.3

ファイルを閉じる---------------------------------------------------------------------------------------- 65

2.4

ファイルが存在しない場合---------------------------------------------------------------------------- 66

2.5

ファイルの内容で図形を描画する------------------------------------------------------------------- 67

2.6

ファイルに書き込む------------------------------------------------------------------------------------- 69

2.7

ファイルに追記する------------------------------------------------------------------------------------- 70

2.8

With を用いたファイル処理--------------------------------------------------------------------------- 71

2.9

日本語を扱う---------------------------------------------------------------------------------------------- 72

2.10

その他の操作---------------------------------------------------------------------------------------------- 75

2.11

まとめ------------------------------------------------------------------------------------------------------- 76

第 3 章 GUI プログラミング（tkinter）…… 77
3.1

ウィンドウを表示する---------------------------------------------------------------------------------- 78

3.2

ラベルを配置する---------------------------------------------------------------------------------------- 80

3.3

ボタンを配置する---------------------------------------------------------------------------------------- 83

3.4

四角形を描画する---------------------------------------------------------------------------------------- 85

3.5

チェックボックスを配置する------------------------------------------------------------------------- 88

3.6

スライダを使う------------------------------------------------------------------------------------------- 90

3.7

1 行入力---------------------------------------------------------------------------------------------------- 92●

テキスト部品---------------------------------------------------------------------------------------------- 97

3.9

メッセージボックス----------------------------------------------------------------------------------- 100

3.10

図形をアニメーションさせる----------------------------------------------------------------------- 101

3.11

まとめ----------------------------------------------------------------------------------------------------- 103

第4章
4.1
4.2

グラフを描く（matplotlib）…… 105
折れ線グラフを描いてみる-------------------------------------------------------------------------- 107
複数のデータを 1 つのグラフに書いてみる----------------------------------------------------- 112
●

4.3

4.4

xviii

3.7.1 ボタンで入力する … 94 ／● 3.7.2 Enter キーで入力する … 95

3.8

4.2.1 色を指定する … 114 ／● 4.2.2 凡例を指定する … 114 ／● 4.2.3 線種を指定する … 116

色々な種類のグラフ----------------------------------------------------------------------------------- 117●

4.3.1 散布図 … 117 ／● 4.3.2 棒グラフ … 119 ／● 4.3.3 積み上げ棒グラフ … 120●

4.3.4 複数グラフの表示 … 123

まとめ----------------------------------------------------------------------------------------------------- 124

目 次

第5章

スクレイピング（bs4）…… 125

5.1

Beautiful Soup を使用できるようにする--------------------------------------------------------- 126

5.2

スクレイピングの処理の流れ----------------------------------------------------------------------- 127

5.3

HTML の要素を取得する------------------------------------------------------------------------------ 127●

5.3.1 文字列だけを取り出す … 129 ／● 5.3.2 入れ子になっている要素の取得 … 130●

5.3.3 条件を指定して要素を取得する … 131

5.4

URL にアクセスして HTML を取得する----------------------------------------------------------- 133

5.5

時間間隔をあける-------------------------------------------------------------------------------------- 137

5.6

複数ページにアクセスする-------------------------------------------------------------------------- 138

5.7

スクレイピングでの注意事項----------------------------------------------------------------------- 140

5.8

まとめ----------------------------------------------------------------------------------------------------- 141

第6章

データベース（SQLite）…… 143

6.1

SQLite3 を使用できるようにする------------------------------------------------------------------ 144

6.2

関係データベースとは-------------------------------------------------------------------------------- 144

6.3

プログラムの基本パターン-------------------------------------------------------------------------------145

6.4

テーブルの作成----------------------------------------------------------------------------------------- 148

6.5

DB Browser for SQLite の使用方法----------------------------------------------------------------- 150

6.6

データベースの操作----------------------------------------------------------------------------------- 153●

6.6.1 データの挿入 … 153 ／● 6.6.2 データの検索 … 156 ／● 6.6.3 データの更新 … 161●

6.6.4 データの削除 … 163

6.7

スクレイピングとデータベースとの連携-------------------------------------------------------- 164

6.8

まとめ----------------------------------------------------------------------------------------------------- 168

第7章

自然言語処理（Janome）…… 169

7.1

Janome を使用できるようにする------------------------------------------------------------------ 1707.2

形態素解析する----------------------------------------------------------------------------------------- 1717.3

個々の解析結果を扱う-------------------------------------------------------------------------------- 172

7.4

単語の出現回数を数える----------------------------------------------------------------------------- 174●

7.4.1 後処理 … 175 ／● 7.4.2 Analyzer … 176 ／● 7.4.3 「こころ」を解析する … 179

7.5

HTML からタグを外す--------------------------------------------------------------------------------- 182

7.6

ユーザ辞書----------------------------------------------------------------------------------------------- 1857.7フィルタの作り方-------------------------------------------------------------------------------------- 187

7.8

まとめ----------------------------------------------------------------------------------------------------- 189

xix

第8章
8.1
8.2

ネットワーク（socket）…… 191
クライアントサーバモデル-------------------------------------------------------------------------- 192
相手をどうやって指定するか？-------------------------------------------------------------------- 194●

8.2.1 IP アドレス … 194 ／● 8.2.2 ポート番号 … 197

8.3

まず実行してみましょう----------------------------------------------------------------------------- 199

8.4

プログラムの基本パターン-------------------------------------------------------------------------- 200

8.5

8.6

最も短いクライアントサーバプログラム-------------------------------------------------------- 201●

8.5.1 クライアント … 201 ／● 8.5.2 サーバ … 203●

8.5.3 サーバとクライアントを別のコンピュータで動かす … 204

複数のクライアントと何度も通信できるようにする----------------------------------------------204
●

8.7

8.8

8.6.1 エコーサーバ … 204 ／● 8.6.2 Select 処理 … 206

チャットプログラムを作成する-------------------------------------------------------------------- 209●

8.7.1 実行してみる … 209 ／● 8.7.2 サーバプログラム … 211●

8.7.3 クライアントプログラム … 212 ／● 8.7.4 終了処理 … 215

まとめ----------------------------------------------------------------------------------------------------- 217

第 9 章 Web アプリケーション（Django）…… 219
9.1

Django を使用できるようにする------------------------------------------------------------------- 219

9.2

Django プロジェクトを作成する------------------------------------------------------------------- 221

9.3

設定ファイルの変更----------------------------------------------------------------------------------- 223

9.4

Web の仕組み------------------------------------------------------------------------------------------- 225

9.5

9.6

9.7

9.8

Django アプリケーションを作成する------------------------------------------------------------- 226●

9.5.1 ビュー関数の作成 … 228 ／● 9.5.2 URL ディスパッチャの指定 … 229●

9.5.3 動作確認 … 231

テンプレートを使う----------------------------------------------------------------------------------- 232●

9.6.1 フォルダを作成する … 232 ／● 9.6.2 テンプレートとビュー関数の作成 … 233●

9.6.3 動作確認 … 235 ／● 9.6.4 テンプレート言語 … 236 ／● 9.6.5 静的ファイル … 238

入力されたデータを処理する----------------------------------------------------------------------- 240●

9.7.1 テンプレートと forms.py を作成する … 240●

9.7.2 ビュー関数と URL ディスパッチを作成する … 243●

9.7.3 フォームをテーブルにする … 245

まとめ----------------------------------------------------------------------------------------------------- 247

第 10 章10.1

ベクトル、行列の作り方----------------------------------------------------------------------------- 251

10.2

部分配列へのアクセス-------------------------------------------------------------------------------- 253

10.3

加減、スカラー倍、乗除算-------------------------------------------------------------------------- 254

10.4

内積、行列同士の積----------------------------------------------------------------------------------- 256
●

10.5

xx

数値計算（NumPy）…… 249

10.4.1 ベクトルの内積と行列の積 … 256 ／● 10.4.2 ベクトルのノルムと外積 … 259

NumPy 配列の変換------------------------------------------------------------------------------------ 261

目 次

10.6

型変換----------------------------------------------------------------------------------------------------- 262

10.7

csv ファイルの読み込み------------------------------------------------------------------------------ 264

10.8

連立一次方程式の解法の実装----------------------------------------------------------------------- 265

10.9

分類器の実装-------------------------------------------------------------------------------------------- 267

10.10 NumPy 配列の表示------------------------------------------------------------------------------------ 271
10.11 NumPy の関数リスト--------------------------------------------------------------------------------- 272
10.12 まとめ----------------------------------------------------------------------------------------------------- 273

第 11 章画像処理（OpenCV）…… 275

11.1

OpenCV を使用できるようにする----------------------------------------------------------------- 276

11.2

画像は何からできているか？----------------------------------------------------------------------- 277

11.3

画像を表示する----------------------------------------------------------------------------------------- 278

11.4

ピクセルの値を調べる-------------------------------------------------------------------------------- 281

11.5

グレースケール化する-------------------------------------------------------------------------------- 282

11.6

二値化処理----------------------------------------------------------------------------------------------- 285

11.7

フィルタ処理-------------------------------------------------------------------------------------------- 287
●

11.8

11.9

11.7.1 畳み込み演算 … 288 ／● 11.7.2 平滑化処理 … 290 ／● 11.7.3 エッジの抽出 … 293

物体検出-------------------------------------------------------------------------------------------------- 296●

11.8.1 テンプレートマッチング … 296 ／● 11.8.2 特徴点を用いた検出 … 301●

11.8.3 顔検出 … 304

動画を表示する----------------------------------------------------------------------------------------- 306

11.10 動物体検出----------------------------------------------------------------------------------------------- 308●

11.10.1 背景差分 … 308 ／● 11.10.2 混合正規分布を用いた背景差分 … 309

11.11 まとめ----------------------------------------------------------------------------------------------------- 312

第 12 章機械学習入門（scikit-learn）…… 313

12.1

機械学習とは ?------------------------------------------------------------------------------------------ 314

12.2

学習方法-------------------------------------------------------------------------------------------------- 316

12.3

ニューラルネットワーク----------------------------------------------------------------------------- 318

12.4

第 1 世代 : 単純パーセプトロン--------------------------------------------------------------------- 319
●

12.5

12.6
12.7

12.8

12.4.1 活性化関数 … 320 ／● 12.4.2 誤差計算 … 321 ／● 12.4.3 損失関数と学習 … 322

第 2 世代：多層パーセプトロン-------------------------------------------------------------------- 325●

12.5.1 誤差逆伝播法 … 327 ／● 12.5.2 勾配消失問題 … 329 ／● 12.5.3 活性化関数 … 330●

12.5.4 損失関数 … 331

scikit-learn----------------------------------------------------------------------------------------------- 332
画像認識プログラム----------------------------------------------------------------------------------- 333●

12.7.1 データセット … 333 ／● 12.7.2 学習（learn.py）… 338 ／● 12.7.3 実行 … 341●

12.7.4 運用（predict.py）… 342 ／● 12.7.5 予測結果と正解の比較 … 343

まとめ----------------------------------------------------------------------------------------------------- 344

xxi

第 13 章
13.1
13.2

13.3

13.4

畳み込みニューラルネットワーク（Keras）…… 345

TensorFlow と Keras を使えるようにする-------------------------------------------------------- 346
多層パーセプトロンの実装-------------------------------------------------------------------------- 346●

13.2.1 学習 … 348 ／● 13.2.2 データの準備 … 349 ／● 13.2.3 モデルの定義 … 350●

13.2.4 学習と評価 … 353 ／● 13.2.5 モデルの評価と実行 … 354●

13.2.6 層の追加と学習結果の保存 … 357 ／● 13.2.7 運用 … 357●

13.2.8 過学習とドロップアウト … 359

畳み込みニューラルネットワークの実装-------------------------------------------------------- 363●

13.3.1 畳み込み層 … 364 ／● 13.3.2 プーリング層 … 365 ／● 13.3.3 最も簡単な CNN … 366●

13.3.4 過学習を抑制する … 369 ／● 13.3.5 運用 … 370 ／● 13.3.6 畳み込み層の追加 … 370●

13.3.7 誤差が改善されなくなったら停止する … 372

自前のデータセットを使う-------------------------------------------------------------------------- 373●

13.4.1 ラベル名でフォルダを作成する … 374●

13.4.2 画像データを対応するフォルダに置く … 375●

13.4.3 ファイルを読み込み学習する … 376 ／● 13.4.4 データの水増し … 379

13.5

学習済みのモデル-------------------------------------------------------------------------------------- 380

13.6

ファインチューニング-------------------------------------------------------------------------------- 382

13.7

まとめ----------------------------------------------------------------------------------------------------- 386

付録 A

他言語を知っている人へのメモ …… 387

付録 B

Google Colaboratory の使い方 …… 391（1）Google Drive にアクセスする … 392 ／●（2）アプリを追加する … 392●（3）プログラムを実行する … 394 ／●（4）GPU で実行する … 395●

索  引---------------------------------------------------------------------------------------------------------------- 397

xxii

第

1

章

Python 概説
第1章

Python 概説

本章では、本書を読む上で必要な Python の基本的な構文の説明をします。すでに Python
をご存じの方は読み飛ばされても構いません。基本的には以降の章を読むのに必要な、共通な内容を説明し、特定の章にしか出てこないものはその場で説明することにします。

1.1 変数とデータ
Python で「1+1」を計算させてみます。以下の説明では Python のインタラクティブシェ
ルが起動されており、コマンドプロンプト（>>>）が表示されているものとします。>>> の後に、

1+1 を入力して、Enter キーを押すと次のように表示されます。
>>> 1+1
2

ご覧のように Python が + を解釈して足し算を行い、その結果を表示しています。また、このような計算は小数同士でも行うことができます。

1

第1章

Python 概説>>> 3.14+1.1
4.24

Python は 1 や 100、123 のような整数、3.14 や 1.1 のような小数で計算を行えます。このようなデータの種類のことを「データ型」と言います。これから、整数型と小数型（浮動小数点数型）の 2 つがあることが分かります。整数や小数以外にも Python にはさまざまなデー※1タ型がありますが、このようなデータ型は type 関数

で調べることができます。

>>> type(4.24)<class float>※2

これより 4.24 が float（浮動小数点数型）であることが分かります。

1.1.1 算術演算子
Python での計算は、演算子を用いて行います。使用できる算術演算子を以下に示します。
表1.1●算術演算子
演算子

意味

+

加算

-

減算

*

乗算

/

除算

//

切り捨て除算

%

剰余

**

冪乗

例

x + y
x - y
x * y
x / y
x//y

x % y
x**y

説明
x に y を加える
x から y を引く
x と y を掛ける
x を y で割る
x を y で割り、小数点以下を切り捨てる
x を y で割った場合の余りxのy乗

数学などと異なるものがあります。乗算ですが、×という記号がキーボードにはないのでアスタリスク（*）を代わりに使用します。また、割り算の除算記号である÷もキーボードにはないのでスラッシュ（/）を使用します。その次の剰余（%）は余りを計算する演算子です。
※1関数に関しては、1.10 節参照。

※2

後で説明するように Python は明示的にデータ型を指定しない動的型付け言語です。明示的に型を書かないため、型が分からなくなる場合があります。そのような場合に便利です。

2

1.1

変数とデータ2

冪乗は、3 のような計算を行うときに用います。使用例を以下に示します。

1>>> 8 + 5

2>>> 8 / 5
1.6

3>>> 8 % 5
3

4

3

5

1024

6

13

>>> 10 // 3>>> 2**107「8%5」は、
8 を 5 で割ると商は 1 なので、8 ­ 5 × 1 = 3 となり 3 が表示されます。「2**10」は 1024 です。2 × 2 ×…× 2 という感じで 2 を 10 回乗算したものです。これらの演算子は8小数に対しても使用できます。

9

1.1.2 代入演算子と変数

10

ここまでの演算子を使うことでいろいろな計算ができます。例えば、運動時に消費されるカ※3

ロリー（kcal）は次の式で計算することができます。

メッツ × 体重 (Kg) × 運動時間 × 1.05
メッツ（METs）値は「Metabolic equivalents」の略で、安静時は 1.0 メッツ、散歩時は 2.5、
エアロビクスが 6.5 というように値が決まっており、体重 60 kg の人が 1 時間散歩したときの消費カロリーは次のように計算できます。
>>> 2.5 * 60 * 1 * 1.05
157.5

この結果から消費カロリーが 157.5kcal であることが分かりました。これがショートケーキ
付 録

何個分かを計算してみましょう。ショートケーキは 8 等分したものが 366 kcal だそうです。
※3

国立健康栄養研究所 http://www0.nih.go.jp/eiken/programs/program_kenko.html

3

第1章

Python 概説>>> 157.5 / 366

0.430327868852459

約 0.43 個、つまり、ショートケーキ半分未満なことが分かります。このように何かを計算するときは、ある計算を行い、その結果を用いて別の計算を行うことがよくあります。このような時に便利なのが「変数」です。変数はデータを取っておくための入れ物です（図 1.1 参照）
。

X

a

4

cal

4

データ

変数

図1.1●変数はデータの入れ物

入れ物なので、入れ物（変数）にデータを入れる機能が必要になります。これが、代入演算※4子のイコール（=）です。cal という変数を用意して、そこに計算結果を代入してみます。

>>> cal = 2.5 * 60 * 1 * 1.05>>>

これで cal という変数にカロリーの計算結果（157.5）が代入されました。変数に代入するだけなので何も表示されません。代入されたものは、cal と Enter キーで表示されます。
>>> cal157.5

また print 関数を用いることでも表示することができます（関数に関しては 1.10 節参照）。

print 関数は表示したいものを ( ) の中に書くことで表示させることができます。
※4

他の言語をご存じの方への注意 : Python では、変数は宣言する必要はありませんが、逆に言うと「変数を宣言する」ことだけを行うことはできません。必ず代入が伴います。また、型を書く必要もありません。型は変数にデータが代入された時点で決まります（動的型付け言語）。

4

1.2

変数

>>> print(cal)
157.5

2

cal に代入された値を使用する場合は、変数名をそのまま使い、次のようにします。

3>>> cal / 366

40.430327868852459

5

先ほど計算したのと同じ値が表示されました。

6
7

1.2

8

変数

9

前節では、cal という変数に 157.5 という数値を代入し、簡単な使い方を見てきました。変

10

数の内容は新しい値が代入されるまで変わりませんが、「変数」という言葉の「変」が表すよ
うにいつでも内容を変更できます。ここでは変数名の付け方、使い方を説明します。

1.2.1 変数名の付け方
変数名には、x、y、z、width、red など好きなものが使用できますが、以下のような命名規
則があります。
（1）使える文字は、半角英数字（a 〜 z、A 〜 Z、0 〜 9）
、下線文字（_）
、ドル記号（$）
、
全角文字だけです。
（2）最初の文字に数字は使えません。例えば、100niku はエラーになります。
（3）Python で使用する用途が決まっている予約語は変数に使えません。Python では次のよ
うに入力するとどのような予約語があるか分かります。
付 録>>> import keyword>>> keyword.kwlist

5

第1章

Python 概説['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class','continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from','global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or','pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

なお、予約語が変数名の一部なっていても構いません。例えば、変数名として if は使えませんが、gif は（if という文字列が含まれていますが）使えます。

1.2.2 変数の使い方
まず前の節で説明した変数の使い方を再度見てみましょう。以下のようなものでした。
>>> cal = 2.5 * 60 * 1 * 1.05>>> cal / 366

0.430327868852459

このカロリーがご飯何杯分かを知りたくなったとしましょう。ご飯のカロリーは 100 g で

168 kcal だそうです。これは、次のように計算できます。
>>> cal / 168
0.9375

このように変数の値は新しい値を代入するまで保持されます。では、別の値を代入してみましょう。2 時間散歩したときのカロリーです。
>>> cal157.5>>> cal = 2.5 * 60 * 2 * 1.05>>> cal315.0

変数の内容が変わっています。このような変数には、次に示すように計算結果と同様にデー
タそのものも代入できます。

6

1.2

変数

>>> x = 8>>> y = 52>>> x + y133

ここで注意が必要なのはデータが代入されていない変数を使うとエラーになることです。

4>>> x = 55

Traceback (most recent call last):

6

NameError: name 'z' is not defined7>>> x + z

File "<stdin>", line 1, in <module>

8

Python は、変数が使われるとその中に入っているものを取り出します。何も入っていないと取り出せなくエラーになります。

9

最後に、コンピュータ独特な変数の使い方を見てみましょう。

10>>> x = 8>>> x = x + 1>>> x
9

2 行目の式は数学的には変ですが、最初に代入演算子の右側の x + 1 が計算され、このとき
x が 8 なので 8 + 1 で 9 となります。その結果が、代入演算子の左側の x に代入されます。実
世界でも、預金の計算などで似たような計算をします。例えば、1000 円の預金をしていて、年に利子が 5 % つくとします。1 年後の預金額は次のようになります。
>>> 1000 * 1 + 0.05
1050.0次の年の利子は、元金と利子を合わせたものを元金にして付くとすると、次の年には以下の付 録

ような金額になります。

7

第1章

Python 概説>>> 1050.0 * 1 + 0.05
1102.5このような計算は、代入演算子の左辺と右辺で同じ変数を使うと簡単に書けます。
>>> x = 1000>>> x = x * (1 + 0.05)>>> x = x * (1 + 0.05)>>> x1102.5

分かりにくい場合は x の値がどのようになっているかを print 関数などで確認してみてください。このように変数に算術演算を行った結果をもとの変数に代入する場合には次のような略記ができます。
>>> x *= (1 + 0.05)

これは他の演算子も同じです。
>>> x += 10 # x = x + 10 と同じ>>> x -= 10 # x = x - 10 と同じ

ここで「#」はコメントを表します。Python では、# が書かれていると、その記号も含め行末までを無視します（つまり、# 以降に書かれたものは何も書かれていないのと同じ扱いになります）。

8