Pythonプログラミングパーフェクトマスター[Python3/Anaconda/PyQt5対応第3版]
書籍情報
発売日 : 2020年12月19日
著者/編集 : 金城俊哉
出版社 : 秀和システム
発行形態 : 単行本
ページ数 : 708p
書籍説明
内容紹介
Pythonはオブジェクト指向型の言語で、初学者向けでも文法解説だけでは物足りないと感じることが多いでしょう。本書では「チャットボットの開発を軸に文法的なものを学ぶ」スタイルをメインに、巻末ではディープラーニングについても学ぶことができます。
Anaconda、Jupyter Notebook、Spyderを使用し、Qt Designerでの解説をしていますので、それらの使い方も身に付きます。
第3版となる本書では、Web API、ライブラリを最新のものに対応するとともに、画像認識についてより高度な手法を追加しています。
Anaconda、Jupyter Notebook、Spyderを使用し、Qt Designerでの解説をしていますので、それらの使い方も身に付きます。
第3版となる本書では、Web API、ライブラリを最新のものに対応するとともに、画像認識についてより高度な手法を追加しています。
目次
Chapter 0 いま、なぜPythonなのか
0.1 そもそもPythonって何のためのものなの?
0.1.1 まずは「Pythonって何?」
0.1.2 Pythonって他のプログラミング言語と何が違うの?
Pythonは書いたらすぐに実行できる「インタープリター型言語」
Memo プログラミング言語
0.2 PHP、Ruby、Perlがあるのに、なぜPythonなの?
0.2.1 日本語対応もしっかり!
0.3 どうしてPythonはプログラミングの学習に向いてるの?
0.3.1 Pythonが褒められる2つの理由
Pythonには面倒な手続きが少ない
「プログラマーの頭」になるための近道
0.4 Pythonのコードが読みやすいって、どんなふうに?
0.4.1 階乗を求めるプログラムで比べてみよう
0.5 結局のところPythonで何が作れるの?
0.5.1 具体的にソフトウェアとしてはどんなものが作られているの?
統合開発環境
Memo Pythonは書いたらすぐに実行できるインタープリター型言語
Webフレームワーク
科学/数学用のライブラリ
ディープラーニング用のライブラリ
0.6 Pythonが使えると、この先どんなメリットがあるのかな?
0.6.1 Pythonのイイところ 1「ビッグな実績があるんです」
0.6.2 Pythonのイイところ 2「強力なフレームワークがいっぱいあるんです」
0.6.3 Pythonのイイところ 3「やっぱ需要はJavaの方が上でしょ?」
Onepoint 実は「儲かる」Pythonプログラマー
0.7 ところでPythonでアプリを作って何がウレシイの?
Pythonにはイイことがいっぱい
0.8 Pythonプログラミングをゼロからスタート!
なるべく順番に読んでほしいけど、好きなところから始めてもかまいません!
Chapter 1 Pythonを使えるようにしてプログラミングを始めよう(環境構築とソースコードの入力)
1.1 PythonをダウンロードしてPCにインストールしよう
1.1.1 PythonをダウンロードしてWindowsマシンにインストールしよう
Python3.x.xのダウンロードとインストール
1.2 IDLE (Python GUI)を起動してPythonを動かしてみよう
1.2.1 Pythonの開発ツール「IDLE」でプログラムを実行してみよう
IDLEを起動して「Hello world!」プログラムを実行する
Memo Pythonのバージョン
Memo Macへのインストール
1.2.2 もっとプログラムらしいことをやってみよう
Pythonのプログラム用ファイルを作る
Memo 外部ライブラリ
保存したプログラムを実行する
1.2.3 さらにプログラムらしいことをやってみよう(アプリの画面を作る)
専用の画面を持つプログラムを作ってみる
Hint 本書で使う標準ライブラリ以外のライブラリ
Memo Pythonのロゴ
1.3 Anacondaをインストールして開発環境を用意する
1.3.1 Anacondaのダウンロードとインストール
macOSの場合
1.3.2 アプリを開発するための仮想環境を構築しよう
好きな名前を付けて仮想環境を構築しよう
1.3.3 Jupyter Notebookことはじめ
Jupyter Notebookを仮想環境にインストールする
Notebookを作成してソースコードを入力してみよう
Notebookを保存して改めて読み込んでみよう
Memo Jupyter Notebookのコマンド
Jupyter Notebookを便利に使う
1.3.4 Spyderことはじめ
Spyderを仮想環境にインストールする
Chapter 2 Pythonプログラムの材料(オブジェクトとデータ型)
2.1 データのかたち(データ型)
2.1.1 プログラムとデータは別のもの(リテラル)
値(リテラル)の姿
Memo プログラムを書くときにハマりやすいこと
2.1.2 整数も小数も正も負も(数値型)
数値型
2.1.3 文字も文字列も(文字列型)
文字列リテラル
Hint 「'」と「"」のどっちがいい?
2.1.4 データではない文字列(コメント)
ソースコードのメモ書き「コメント」
2.1.5 YesかNoだけ(ブール〈bool〉型)
真偽リテラル
2.1.6 「値そのものが存在しない」は「None」
何もないことを示す特殊なリテラル「None」
2.2 オブジェクトと変数
2.2.1 オブジェクトを捕まえろ!
プログラムのデータはすべてオブジェクトになる
オブジェクトには関数(メソッド)が結び付けられている
2.2.2 3回続けてあいさつしてみよう??変数への代入
代入した値のデータ型は変更できないけれど値そのものを書き換えることはできる
Memo 変数名を付けるときのルール
Hint 変数名の命名規則
2.3 変数を使っていろんな計算をする
2.3.1 「入力した値を2倍にしてあげるよ」(算術演算子)
計算をさせるための記号、算術演算子
変数を使って演算する
単項プラス演算子(+)、単項マイナス演算子(?)
2.3.2 「x='僕の名前はPythonです'」(代入演算子)
代入演算子による値の代入
複合代入演算子による式の簡略化
多重代入
2.3.3 どこから手を付ける?(演算子の優先順位)
演算子には優先順位があるけれど()でコントロールできる
Memo 演算子の優先順位
2.4 文字列や数値をPythonの道具で自在に操ろう(関数、メソッド)
2.4.1 Pythonの道具(関数、メソッド)
print()関数ってどこから呼んできたの?
2.4.2 整数型への変換と浮動小数点数型への変換
整数以外の値をint型に変換する
浮動小数点数型(float型)への変換
Hint リテラルも変数もみんなオブジェクト
Hint 小数を含むstr型の「数字」をfloat型にする
2.4.3 え! 文字が逃げる?(エスケープシーケンス)
自動エコーとprint()関数による出力結果の違い
「\」で文字をエスケープすれば改行やタブを入れられる
2.4.4 「"こん" + "にちは"」「ようこそ *4」(文字列の連結と繰り返し)
文字列を連結したり繰り返したりする
2.4.5 会話文の中から必要な文字だけ取り出そう
[ ]で1文字抽出する
[:]や[: :]で文字列を切り出す
2.4.6 関数やメソッドを使えば文字列の分割、結合、置換、いろいろできる
len()関数で文字列の長さを調べる
split()メソッドで文字列を規則的に切り分ける
join()メソッドで文字列をジョイント!
replace()メソッドで文字列の一部を置き換える
format()メソッドで文字列を自動作成
Tips 逆さ言葉を答えてみよう
2.4.7 初恋したのはいつ?(input()関数)
コンソール上で入力された文字列はinput()関数で取得
2.4.8 あなたの標準体重は?
BMI(体格指数)を使って標準体重を計算してあげよう
Memo そのほかの便利な文字列操作関数
Chapter 3 条件分岐と繰り返し、関数を使う
3.1 テニスの攻撃パターンをシミュレートする
3.1.1 同じ技を10回繰り出す(forによる繰り返し)
スマッシュを連続10回繰り出す
3.1.2 2つの技を交互に繰り出す(ifによる条件分岐)
スマッシュとストロークを交互に繰り出す
Memo rangeオブジェクト(1)
Memo True/Falseと真/偽
3.1.3 3つの技を織り交ぜる(if...elif...else)
ifにelifを加えて条件を2つに増やす
ifの条件式を書く順番に気を付けよう
3.1.4 攻撃のパターンをランダムにしよう
randomモジュールを使って疑似乱数を発生させる
3.2 もう1つの繰り返し技(whileによる繰り返し)
3.2.1 条件がTrueの間は繰り返すよ
スマッシュを連続10回繰り出す
3.2.2 ピティナ、入力された言葉を再生する
相手の言葉をそのまま再生、'さよなら'で終了
3.3 リスト
3.3.1 4種類のストロークを順に繰り出す(リスト)
リストで複数のオブジェクトをまとめて管理
インデックシング
スライス
イテレーション
リストの更新
Memo rangeオブジェクト(2)
2つのリストをforで処理してみる
リストのリスト
Memo リストの操作
リストの中に要素製造装置を入れる(内包表記)
3.3.2 いわゆる「定数リスト」(タプル)
タプルの使い方
3.4 辞書と集合
Memo リスト要素をランダムに抽出する
3.4.1 ボールを打ったら音を出す(名前と値のペア)
辞書(dict)型
イテレーションアクセス
Memo 辞書に使えるメソッド
複数のシーケンスのイテレート
3.4.2 要素の重複を許さない集合
まずは集合を作ってみる
集合を使って重複した要素を削除する
3.5 装置を作る(関数)
3.5.1 呼び出すと擬音を付けてくれる関数
パラメーターの指定
デフォルトパラメーター
Memo デフォルトパラメーターの使いどころ
Hint リストをデフォルトパラメーターにするときの注意
伸縮自在のパラメーター
キーと値がセットになったパラメーター
関数オブジェクトと高階関数
関数内関数とクロージャー
小さな関数は処理部だけの「式」にしてしまう(ラムダ式)
Onepoint ラムダ式はいろんなプログラミング言語で使われている
ジェネレーター
Onepoint ジェネレーターの内部的な処理
デコレーター
Chapter 4 オブジェクト、そして人工知能へ向けての第一歩
4.1 オリジナルのオブジェクト
4.1.1 「鬼コーチオブジェクト」登場!(クラスの作成)
オリジナルのクラス = オブジェクト
Memo 「オブジェクト」と「インスタンス」
4.1.2 「鬼コーチ」を呼んでこよう(オブジェクトの生成)
MyCoachクラスからMyCoachオブジェクトを作る
Memo メソッドと関数って何が違うの?
4.1.3 打ち返した回数を覚えておいてもらおう(クラス変数)
オブジェクト同士で共有するクラス変数
クラス変数を外部で初期化する
teach()をクラスメソッドに変更する
Memo メソッドやクラス変数を動的に追加する
4.1.4 大事な変数は隠しておこう(カプセル化)
インスタンス変数へのアクセスはすべてプロパティ経由にする
プロパティを使うことに意味はあるの?
4.2 ほんとに知能?
4.2.1 人工知能って何? えっ知能? 無脳?
絶妙トークは続く
ピティナ、君は人工ピーポー?
Pitynaオブジェクトの動作原理
Pitynaクラスと応答クラス
Memo ソースコードのドキュメント化
4.2.2 最初のピティナ
Spyderを起動して開発の準備をしよう
ピティナ、オウム返しボットバージョン
4.2.3 「オウム返し」+「ランダム応答」の2本立てで反応する(継承とオーバーライド)
ピティナ・バージョン2の実行モジュール「prototype.py」
Memo モジュール(Pythonファイル)の取り込み
Pitynaクラスのモジュール「pityna.py」
応答オブジェクトのモジュール「responder.py」
Memo RepeatResponderへの切り替え
Memo 自然言語処理って何をするの?
Chapter 5 ピティナのGUI化と[人工感情]の移植
5.1 GUI版ピティナ
5.1.1 ピティナをGUIモジュールに移植するよ
まずはQt Designerを呼んでこよう
5.1.2 メインウィンドウを作成してウィジェット(widget)を配置しよう
メインウィンドウを作成する
Hint UI画面の開発は手打ち派? それともUIデザイナー派?
ログを表示するためのリストを配置する
応答クラス名の表示/非表示切り替え用のラジオボタンを配置する
会話入力用のテキストボックスを配置する
メッセージの送信ボタンを配置する
ピティナの応答領域、ラベルを配置する
ピティナのイメージを表示する
メニューを使う
5.1.3 イベント駆動の仕組みを実装しよう
ボタンクリックで駆動する仕組みを作ろう
ラジオボタンのオン/オフで駆動する仕組みを作ろう
メニューの[閉じる]選択で駆動する仕組みを作ろう
5.1.4 XML?Pythonモジュールへのコンバート
コマンドラインツール「pyuic5」でコンバートする
コンバート専用のプログラムを作る
リソースファイル(.qrs)をPythonにコンバートする
Memo コマンドをAnacondaのターミナルから実行する
Attention リソースファイルの名前に注意!
5.1.5 GUI版ピティナプログラムの開発
プログラムの起点、「main.py」モジュールを用意する
UI画面を構築する「mainWindow.py」モジュールを用意する
ピティナの本体「pityna.py」を用意する
応答クラスの「responder.py」モジュールを用意する
すべてのモジュールを確認してピティナを起動してみよう
5.1.6 Responderをランダムに切り替える
応答時にRandomResponderとRepeatResponderをランダムに実行する
5.2 辞書を小脇に
5.2.1 ファイルのオープンと読み込み
ファイルの中身を読み込んで画面に出力してみよう
ピティナ、辞書を読み込む
Memo ユニバーサル改行コード
5.3 ピティナ、パターンに反応する
5.3.1 正規表現ことはじめ
正規表現のパターン
パターン辞書ファイルを作ろう
5.3.2 「パターン辞書」「ランダム辞書」「オウム返し」の三つどもえの反応だ!
match()とsearch
Dictionaryクラス
Responderクラス
Pitynaクラス
5.4 感情の創出
5.4.1 ピティナに「感情」を与えるためのアルゴリズム
感情の「揺れ」はパラメーター値を変化させる仕組みで実現
Onepoint 感情の揺れをパラメーター値で表す
感情の表現はイメージを取り換えることで伝える
5.4.2 パターン辞書の変更
パターン辞書のフォーマットを変更
Memo プログラムをダブルクリックで起動する方法
5.4.3 感情モデルの移植(Emotionクラス)
機嫌値を管理するEmotionクラス
5.4.4 感情モデルの移植(Dictionaryクラス)
パターン辞書の各行をPatternItemオブジェクトとして保持する
Memo 応答メッセージをテキストエディットに出力する
5.4.5 感情モデルの移植(Patternltemクラス)
パターンや応答例から機嫌変動値を取り出す
PatternItemクラスの__init__()によるオブジェクトの初期化
match()、choice()、suitable()の追加
5.4.6 感情モデルの移植(Responderクラス、PatternResponderクラス、Pitynaクラス)
ResponderクラスとRepeatResponder、RandomResponderの修正
パターン辞書を扱うPatternResponderクラスの修正
Memo ピティナプログラムのモジュール
5.4.7 感情モデルの移植(ピティナの本体クラス)
5.4.8 ピティナ、笑ったり落ち込んだり
プログラム開発前の準備
Qt Designerを起動してリソースファイルを作ろう
UI形式ファイルとQRC形式ファイルのコンバート
感情の揺らぎを表情で表す
Chapter 6 「記憶」のメカニズムを実装する(機械学習)
6.1 機械学習のススメ
6.1.1 まるごと覚える
辞書の学習を実現するためにクリアすべき課題
「学習メソッド」と「記憶メソッド」の追加
ピティナの本体クラスの修正
プログラム終了時の処理
6.2 形態素解析入門
6.2.1 形態素解析モジュール「Janome」の導入
「PyPI」はPythonライブラリの宝庫
pipコマンドで「Janome」をインストールする
Attention pipコマンドでのインストール
「Janome」で形態素解析いってみよう
Memo datetimeモジュール
6.2.2 キーワードで覚える
形態素解析を行うanalyzerモジュールを作ろう
ピティナの本体クラスを改造する
Dictionaryクラスを改造する
Memo Dictionaryクラスのメソッド
パターン辞書ファイルへの保存
Onepoint with文
PatternItemクラスのadd_phrase()とmake_line()
形態素解析版ピティナと対話してみる
6.3 テンプレートとして覚える
6.3.1 テンプレート学習用の辞書を作ろう
ピティナプログラムに必要なファイル一式
テンプレート辞書の構造
Attention ピティナの応答エリアをテキストエディットに変更する
6.3.2 Dictionaryクラスの改造
テンプレート辞書ファイルへの保存
Responderクラス群の新入り、TemplateResponderクラス
Pitynaクラスの変更
テンプレート学習を実装したピティナと対話してみる
Chapter 7 マルコフ連鎖で文章を作り出す
7.1 無限のサル定理をマルコフ連鎖で実証する
7.1.1 マルコフ連鎖を使って文章を生成する
単語がつながっていくときの法則
マルコフ連鎖、マルコフモデルとは
7.1.2 3単語プレフィックスのマルコフ辞書
「わたしが好きなプログラムの女の子です。」って?
7.1.3 マルコフ辞書の実装
形態素解析とファイルの読み込み
マルコフ辞書の作成
マルコフ辞書から文章を作り出す
Memo マルコフ連鎖
Memo もとになる文章量が少ないと文章が作れないことがある
重複した文章を取り除く
プログラムを実行して文章を作ってみる
Hint 著作権の切れた作品を公開する青空文庫
7.2 マルコフ連鎖を利用した会話ボットの作成
7.2.1 小説を題材にマルコフ連鎖で生成した文章で応答する
Markovクラス
7.2.2 入力した文字列に反応するようにしてみる
markov_botモジュールの改造
入力した内容にマルコフ辞書が反応するか確かめる
Memo マルコフ連鎖の活用例
7.3 ピティナ、マルコフ辞書を使う
7.3.1 マルコフ連鎖文を生成するMarkovクラス
Markovクラス
7.3.2 Pitynaクラスの改造
Pitynaクラス
7.3.3 Responderに新たに加わったサブクラスMarkovResponder
MarkovResponderクラス
7.3.4 DictionaryクラスにmakeMarkovDictionary()メソッドを追加
Dictionaryクラス
7.3.5 マルコフ辞書を手にしたピティナ、その反応は?
最後に処理の流れを確認しておこう
Chapter 8 インターネットアクセス
8.1 外部モジュール「Requests」を利用してネットに接続する
8.1.1 外部モジュール「Requests」
Requestsのインストール
8.1.2 Yahoo! JAPANにアクセスしてみよう
Requestsを利用してWebサイトにアクセスする
レスポンスメッセージからデータを取り出すメソッド
8.1.3 Web APIで役立つデータを入手
Webサービスを利用するためのWeb API
NTTドコモが提供しているWeb APIがオモシロイ
8.2 Requestsでネット上の情報を収集しよう
8.2.1 天気予報のWebサービス「OpenWeatherMap」を利用する
「OpenWeatherMap」の無料アカウントを取得する
5日間/3時間ごとの天気予報を取得するためのURLを作ろう
requestsのget()で天気予報をゲット!
Memo Weather APIの呼び出し回数の制限
8.2.2 ウィキ(Wiki)るプログラム
MediaWikiのAPI
Wikipediaから情報を収集しよう
8.2.3 「Yahoo!ニュース」のヘッドラインを取得してみよう
スクレイピング専用のBeautifulSoup4モジュール
Memo Twitterの開発者向けサイト
BeautifulSoup4で「Yahoo!ニュース」のRSSをスクレイピング
8.2.4 ピティナ、ネットにつながる
ピティナが今日から5日後までの天気を教えてくれる
mainWindowモジュールの改造
Webにつながるピティナを実行してみる
Memo 「OpenWeatherMap」で無料で利用できるWebサービス
Memo WebサービスのGoogle Colabを便利に使おう!
Chapter 9 ピティナ、ディープラーニングで画像認識に挑戦!
9.1 ディープラーニングと言えばPythonなのです
9.1.1 ディープラーニングっていったい何?
ニューラルネットワークのニューロン
9.2 認識率98%の高精度のニューラルネットワークを作る
9.2.1 Kerasライブラリをインストールして「手書き数字」の画像データを用意しよう
Kerasを仮想環境にインストールしよう
Memo TensorFlowのインストールができないときの対処法
Memo matplotlib.pyplot.imshow()
Memo Matplotlibのインストール方法
9.2.2 ニューラルネットワークをプログラミングする
入力層をプログラミングしよう
第1層(隠れ層)をプログラミングしよう
ドロップアウトを実装しよう
第2層(出力層)をプログラミングしよう
バックプロパゲーションを実装しよう
ディープラーニングを実行して結果を評価しよう
Memo ディープラーニングの結果が保存されたファイル
9.3 ディープラーニング版ピティナ
9.3.1 ディープラーニング版ピティナ開発の概要です
ディープラーニング版ピティナの開発手順
9.3.2 ピティナAIの画面の開発
フォーム(メインウィンドウ)のプロパティを設定する
3個のラベルを配置してプロパティを設定する
[閉じる]メニューの設定
Onepoint pixmapプロパティでリソースファイルからイメージを取り込む手順
UI画面をPythonモジュールにコンバートする
9.3.3 ピティナAIをプログラミングしよう
ピティナAIを起動するモジュール
UI画面を生成するモジュールを作成しよう
ほんとにAI? ピティナ本体をプログラミングする
ピティナAI、手書きの数字を認識する
9.4 ピティナ、ファッションアイテムを92%の高確率で識別する
9.4.1 ファッションアイテムのデータセットとは何ぞや?
9.4.2 畳み込みニューラルネットワークの仕組みをさらっと紹介
2次元フィルター
ゼロパディング
プーリング
訓練データにばかり適合するのを避けるための「正則化」
プーリング層とドロップアウトを備えた畳み込みネットワークの構築
9.4.3 Fashion-MNISTデータを読み込んで学習する
「LearnMNIST.py」を畳み込みネットワーク版に改造してファッションアイテムを学習する
9.4.4 ピティナの本体モジュール「pityna.py」を改造する
pityna.pyの一部を書き換える
ピティナAI、ファッションアイテムを判別する
Appendix 1 Pythonの標準ライブラリ
shutil(高水準のファイル操作)
timeit(小さなコード断片の実行時間計測)
collections(コンテナデータ型)
datetime(基本的な日付型と時間型)
Appendix 2 Pythonの外部ライブラリ
データベース
ゲーム開発
GIS(位置情報システム)
GUI
画像処理
Web開発
0.1 そもそもPythonって何のためのものなの?
0.1.1 まずは「Pythonって何?」
0.1.2 Pythonって他のプログラミング言語と何が違うの?
Pythonは書いたらすぐに実行できる「インタープリター型言語」
Memo プログラミング言語
0.2 PHP、Ruby、Perlがあるのに、なぜPythonなの?
0.2.1 日本語対応もしっかり!
0.3 どうしてPythonはプログラミングの学習に向いてるの?
0.3.1 Pythonが褒められる2つの理由
Pythonには面倒な手続きが少ない
「プログラマーの頭」になるための近道
0.4 Pythonのコードが読みやすいって、どんなふうに?
0.4.1 階乗を求めるプログラムで比べてみよう
0.5 結局のところPythonで何が作れるの?
0.5.1 具体的にソフトウェアとしてはどんなものが作られているの?
統合開発環境
Memo Pythonは書いたらすぐに実行できるインタープリター型言語
Webフレームワーク
科学/数学用のライブラリ
ディープラーニング用のライブラリ
0.6 Pythonが使えると、この先どんなメリットがあるのかな?
0.6.1 Pythonのイイところ 1「ビッグな実績があるんです」
0.6.2 Pythonのイイところ 2「強力なフレームワークがいっぱいあるんです」
0.6.3 Pythonのイイところ 3「やっぱ需要はJavaの方が上でしょ?」
Onepoint 実は「儲かる」Pythonプログラマー
0.7 ところでPythonでアプリを作って何がウレシイの?
Pythonにはイイことがいっぱい
0.8 Pythonプログラミングをゼロからスタート!
なるべく順番に読んでほしいけど、好きなところから始めてもかまいません!
Chapter 1 Pythonを使えるようにしてプログラミングを始めよう(環境構築とソースコードの入力)
1.1 PythonをダウンロードしてPCにインストールしよう
1.1.1 PythonをダウンロードしてWindowsマシンにインストールしよう
Python3.x.xのダウンロードとインストール
1.2 IDLE (Python GUI)を起動してPythonを動かしてみよう
1.2.1 Pythonの開発ツール「IDLE」でプログラムを実行してみよう
IDLEを起動して「Hello world!」プログラムを実行する
Memo Pythonのバージョン
Memo Macへのインストール
1.2.2 もっとプログラムらしいことをやってみよう
Pythonのプログラム用ファイルを作る
Memo 外部ライブラリ
保存したプログラムを実行する
1.2.3 さらにプログラムらしいことをやってみよう(アプリの画面を作る)
専用の画面を持つプログラムを作ってみる
Hint 本書で使う標準ライブラリ以外のライブラリ
Memo Pythonのロゴ
1.3 Anacondaをインストールして開発環境を用意する
1.3.1 Anacondaのダウンロードとインストール
macOSの場合
1.3.2 アプリを開発するための仮想環境を構築しよう
好きな名前を付けて仮想環境を構築しよう
1.3.3 Jupyter Notebookことはじめ
Jupyter Notebookを仮想環境にインストールする
Notebookを作成してソースコードを入力してみよう
Notebookを保存して改めて読み込んでみよう
Memo Jupyter Notebookのコマンド
Jupyter Notebookを便利に使う
1.3.4 Spyderことはじめ
Spyderを仮想環境にインストールする
Chapter 2 Pythonプログラムの材料(オブジェクトとデータ型)
2.1 データのかたち(データ型)
2.1.1 プログラムとデータは別のもの(リテラル)
値(リテラル)の姿
Memo プログラムを書くときにハマりやすいこと
2.1.2 整数も小数も正も負も(数値型)
数値型
2.1.3 文字も文字列も(文字列型)
文字列リテラル
Hint 「'」と「"」のどっちがいい?
2.1.4 データではない文字列(コメント)
ソースコードのメモ書き「コメント」
2.1.5 YesかNoだけ(ブール〈bool〉型)
真偽リテラル
2.1.6 「値そのものが存在しない」は「None」
何もないことを示す特殊なリテラル「None」
2.2 オブジェクトと変数
2.2.1 オブジェクトを捕まえろ!
プログラムのデータはすべてオブジェクトになる
オブジェクトには関数(メソッド)が結び付けられている
2.2.2 3回続けてあいさつしてみよう??変数への代入
代入した値のデータ型は変更できないけれど値そのものを書き換えることはできる
Memo 変数名を付けるときのルール
Hint 変数名の命名規則
2.3 変数を使っていろんな計算をする
2.3.1 「入力した値を2倍にしてあげるよ」(算術演算子)
計算をさせるための記号、算術演算子
変数を使って演算する
単項プラス演算子(+)、単項マイナス演算子(?)
2.3.2 「x='僕の名前はPythonです'」(代入演算子)
代入演算子による値の代入
複合代入演算子による式の簡略化
多重代入
2.3.3 どこから手を付ける?(演算子の優先順位)
演算子には優先順位があるけれど()でコントロールできる
Memo 演算子の優先順位
2.4 文字列や数値をPythonの道具で自在に操ろう(関数、メソッド)
2.4.1 Pythonの道具(関数、メソッド)
print()関数ってどこから呼んできたの?
2.4.2 整数型への変換と浮動小数点数型への変換
整数以外の値をint型に変換する
浮動小数点数型(float型)への変換
Hint リテラルも変数もみんなオブジェクト
Hint 小数を含むstr型の「数字」をfloat型にする
2.4.3 え! 文字が逃げる?(エスケープシーケンス)
自動エコーとprint()関数による出力結果の違い
「\」で文字をエスケープすれば改行やタブを入れられる
2.4.4 「"こん" + "にちは"」「ようこそ *4」(文字列の連結と繰り返し)
文字列を連結したり繰り返したりする
2.4.5 会話文の中から必要な文字だけ取り出そう
[ ]で1文字抽出する
[:]や[: :]で文字列を切り出す
2.4.6 関数やメソッドを使えば文字列の分割、結合、置換、いろいろできる
len()関数で文字列の長さを調べる
split()メソッドで文字列を規則的に切り分ける
join()メソッドで文字列をジョイント!
replace()メソッドで文字列の一部を置き換える
format()メソッドで文字列を自動作成
Tips 逆さ言葉を答えてみよう
2.4.7 初恋したのはいつ?(input()関数)
コンソール上で入力された文字列はinput()関数で取得
2.4.8 あなたの標準体重は?
BMI(体格指数)を使って標準体重を計算してあげよう
Memo そのほかの便利な文字列操作関数
Chapter 3 条件分岐と繰り返し、関数を使う
3.1 テニスの攻撃パターンをシミュレートする
3.1.1 同じ技を10回繰り出す(forによる繰り返し)
スマッシュを連続10回繰り出す
3.1.2 2つの技を交互に繰り出す(ifによる条件分岐)
スマッシュとストロークを交互に繰り出す
Memo rangeオブジェクト(1)
Memo True/Falseと真/偽
3.1.3 3つの技を織り交ぜる(if...elif...else)
ifにelifを加えて条件を2つに増やす
ifの条件式を書く順番に気を付けよう
3.1.4 攻撃のパターンをランダムにしよう
randomモジュールを使って疑似乱数を発生させる
3.2 もう1つの繰り返し技(whileによる繰り返し)
3.2.1 条件がTrueの間は繰り返すよ
スマッシュを連続10回繰り出す
3.2.2 ピティナ、入力された言葉を再生する
相手の言葉をそのまま再生、'さよなら'で終了
3.3 リスト
3.3.1 4種類のストロークを順に繰り出す(リスト)
リストで複数のオブジェクトをまとめて管理
インデックシング
スライス
イテレーション
リストの更新
Memo rangeオブジェクト(2)
2つのリストをforで処理してみる
リストのリスト
Memo リストの操作
リストの中に要素製造装置を入れる(内包表記)
3.3.2 いわゆる「定数リスト」(タプル)
タプルの使い方
3.4 辞書と集合
Memo リスト要素をランダムに抽出する
3.4.1 ボールを打ったら音を出す(名前と値のペア)
辞書(dict)型
イテレーションアクセス
Memo 辞書に使えるメソッド
複数のシーケンスのイテレート
3.4.2 要素の重複を許さない集合
まずは集合を作ってみる
集合を使って重複した要素を削除する
3.5 装置を作る(関数)
3.5.1 呼び出すと擬音を付けてくれる関数
パラメーターの指定
デフォルトパラメーター
Memo デフォルトパラメーターの使いどころ
Hint リストをデフォルトパラメーターにするときの注意
伸縮自在のパラメーター
キーと値がセットになったパラメーター
関数オブジェクトと高階関数
関数内関数とクロージャー
小さな関数は処理部だけの「式」にしてしまう(ラムダ式)
Onepoint ラムダ式はいろんなプログラミング言語で使われている
ジェネレーター
Onepoint ジェネレーターの内部的な処理
デコレーター
Chapter 4 オブジェクト、そして人工知能へ向けての第一歩
4.1 オリジナルのオブジェクト
4.1.1 「鬼コーチオブジェクト」登場!(クラスの作成)
オリジナルのクラス = オブジェクト
Memo 「オブジェクト」と「インスタンス」
4.1.2 「鬼コーチ」を呼んでこよう(オブジェクトの生成)
MyCoachクラスからMyCoachオブジェクトを作る
Memo メソッドと関数って何が違うの?
4.1.3 打ち返した回数を覚えておいてもらおう(クラス変数)
オブジェクト同士で共有するクラス変数
クラス変数を外部で初期化する
teach()をクラスメソッドに変更する
Memo メソッドやクラス変数を動的に追加する
4.1.4 大事な変数は隠しておこう(カプセル化)
インスタンス変数へのアクセスはすべてプロパティ経由にする
プロパティを使うことに意味はあるの?
4.2 ほんとに知能?
4.2.1 人工知能って何? えっ知能? 無脳?
絶妙トークは続く
ピティナ、君は人工ピーポー?
Pitynaオブジェクトの動作原理
Pitynaクラスと応答クラス
Memo ソースコードのドキュメント化
4.2.2 最初のピティナ
Spyderを起動して開発の準備をしよう
ピティナ、オウム返しボットバージョン
4.2.3 「オウム返し」+「ランダム応答」の2本立てで反応する(継承とオーバーライド)
ピティナ・バージョン2の実行モジュール「prototype.py」
Memo モジュール(Pythonファイル)の取り込み
Pitynaクラスのモジュール「pityna.py」
応答オブジェクトのモジュール「responder.py」
Memo RepeatResponderへの切り替え
Memo 自然言語処理って何をするの?
Chapter 5 ピティナのGUI化と[人工感情]の移植
5.1 GUI版ピティナ
5.1.1 ピティナをGUIモジュールに移植するよ
まずはQt Designerを呼んでこよう
5.1.2 メインウィンドウを作成してウィジェット(widget)を配置しよう
メインウィンドウを作成する
Hint UI画面の開発は手打ち派? それともUIデザイナー派?
ログを表示するためのリストを配置する
応答クラス名の表示/非表示切り替え用のラジオボタンを配置する
会話入力用のテキストボックスを配置する
メッセージの送信ボタンを配置する
ピティナの応答領域、ラベルを配置する
ピティナのイメージを表示する
メニューを使う
5.1.3 イベント駆動の仕組みを実装しよう
ボタンクリックで駆動する仕組みを作ろう
ラジオボタンのオン/オフで駆動する仕組みを作ろう
メニューの[閉じる]選択で駆動する仕組みを作ろう
5.1.4 XML?Pythonモジュールへのコンバート
コマンドラインツール「pyuic5」でコンバートする
コンバート専用のプログラムを作る
リソースファイル(.qrs)をPythonにコンバートする
Memo コマンドをAnacondaのターミナルから実行する
Attention リソースファイルの名前に注意!
5.1.5 GUI版ピティナプログラムの開発
プログラムの起点、「main.py」モジュールを用意する
UI画面を構築する「mainWindow.py」モジュールを用意する
ピティナの本体「pityna.py」を用意する
応答クラスの「responder.py」モジュールを用意する
すべてのモジュールを確認してピティナを起動してみよう
5.1.6 Responderをランダムに切り替える
応答時にRandomResponderとRepeatResponderをランダムに実行する
5.2 辞書を小脇に
5.2.1 ファイルのオープンと読み込み
ファイルの中身を読み込んで画面に出力してみよう
ピティナ、辞書を読み込む
Memo ユニバーサル改行コード
5.3 ピティナ、パターンに反応する
5.3.1 正規表現ことはじめ
正規表現のパターン
パターン辞書ファイルを作ろう
5.3.2 「パターン辞書」「ランダム辞書」「オウム返し」の三つどもえの反応だ!
match()とsearch
Dictionaryクラス
Responderクラス
Pitynaクラス
5.4 感情の創出
5.4.1 ピティナに「感情」を与えるためのアルゴリズム
感情の「揺れ」はパラメーター値を変化させる仕組みで実現
Onepoint 感情の揺れをパラメーター値で表す
感情の表現はイメージを取り換えることで伝える
5.4.2 パターン辞書の変更
パターン辞書のフォーマットを変更
Memo プログラムをダブルクリックで起動する方法
5.4.3 感情モデルの移植(Emotionクラス)
機嫌値を管理するEmotionクラス
5.4.4 感情モデルの移植(Dictionaryクラス)
パターン辞書の各行をPatternItemオブジェクトとして保持する
Memo 応答メッセージをテキストエディットに出力する
5.4.5 感情モデルの移植(Patternltemクラス)
パターンや応答例から機嫌変動値を取り出す
PatternItemクラスの__init__()によるオブジェクトの初期化
match()、choice()、suitable()の追加
5.4.6 感情モデルの移植(Responderクラス、PatternResponderクラス、Pitynaクラス)
ResponderクラスとRepeatResponder、RandomResponderの修正
パターン辞書を扱うPatternResponderクラスの修正
Memo ピティナプログラムのモジュール
5.4.7 感情モデルの移植(ピティナの本体クラス)
5.4.8 ピティナ、笑ったり落ち込んだり
プログラム開発前の準備
Qt Designerを起動してリソースファイルを作ろう
UI形式ファイルとQRC形式ファイルのコンバート
感情の揺らぎを表情で表す
Chapter 6 「記憶」のメカニズムを実装する(機械学習)
6.1 機械学習のススメ
6.1.1 まるごと覚える
辞書の学習を実現するためにクリアすべき課題
「学習メソッド」と「記憶メソッド」の追加
ピティナの本体クラスの修正
プログラム終了時の処理
6.2 形態素解析入門
6.2.1 形態素解析モジュール「Janome」の導入
「PyPI」はPythonライブラリの宝庫
pipコマンドで「Janome」をインストールする
Attention pipコマンドでのインストール
「Janome」で形態素解析いってみよう
Memo datetimeモジュール
6.2.2 キーワードで覚える
形態素解析を行うanalyzerモジュールを作ろう
ピティナの本体クラスを改造する
Dictionaryクラスを改造する
Memo Dictionaryクラスのメソッド
パターン辞書ファイルへの保存
Onepoint with文
PatternItemクラスのadd_phrase()とmake_line()
形態素解析版ピティナと対話してみる
6.3 テンプレートとして覚える
6.3.1 テンプレート学習用の辞書を作ろう
ピティナプログラムに必要なファイル一式
テンプレート辞書の構造
Attention ピティナの応答エリアをテキストエディットに変更する
6.3.2 Dictionaryクラスの改造
テンプレート辞書ファイルへの保存
Responderクラス群の新入り、TemplateResponderクラス
Pitynaクラスの変更
テンプレート学習を実装したピティナと対話してみる
Chapter 7 マルコフ連鎖で文章を作り出す
7.1 無限のサル定理をマルコフ連鎖で実証する
7.1.1 マルコフ連鎖を使って文章を生成する
単語がつながっていくときの法則
マルコフ連鎖、マルコフモデルとは
7.1.2 3単語プレフィックスのマルコフ辞書
「わたしが好きなプログラムの女の子です。」って?
7.1.3 マルコフ辞書の実装
形態素解析とファイルの読み込み
マルコフ辞書の作成
マルコフ辞書から文章を作り出す
Memo マルコフ連鎖
Memo もとになる文章量が少ないと文章が作れないことがある
重複した文章を取り除く
プログラムを実行して文章を作ってみる
Hint 著作権の切れた作品を公開する青空文庫
7.2 マルコフ連鎖を利用した会話ボットの作成
7.2.1 小説を題材にマルコフ連鎖で生成した文章で応答する
Markovクラス
7.2.2 入力した文字列に反応するようにしてみる
markov_botモジュールの改造
入力した内容にマルコフ辞書が反応するか確かめる
Memo マルコフ連鎖の活用例
7.3 ピティナ、マルコフ辞書を使う
7.3.1 マルコフ連鎖文を生成するMarkovクラス
Markovクラス
7.3.2 Pitynaクラスの改造
Pitynaクラス
7.3.3 Responderに新たに加わったサブクラスMarkovResponder
MarkovResponderクラス
7.3.4 DictionaryクラスにmakeMarkovDictionary()メソッドを追加
Dictionaryクラス
7.3.5 マルコフ辞書を手にしたピティナ、その反応は?
最後に処理の流れを確認しておこう
Chapter 8 インターネットアクセス
8.1 外部モジュール「Requests」を利用してネットに接続する
8.1.1 外部モジュール「Requests」
Requestsのインストール
8.1.2 Yahoo! JAPANにアクセスしてみよう
Requestsを利用してWebサイトにアクセスする
レスポンスメッセージからデータを取り出すメソッド
8.1.3 Web APIで役立つデータを入手
Webサービスを利用するためのWeb API
NTTドコモが提供しているWeb APIがオモシロイ
8.2 Requestsでネット上の情報を収集しよう
8.2.1 天気予報のWebサービス「OpenWeatherMap」を利用する
「OpenWeatherMap」の無料アカウントを取得する
5日間/3時間ごとの天気予報を取得するためのURLを作ろう
requestsのget()で天気予報をゲット!
Memo Weather APIの呼び出し回数の制限
8.2.2 ウィキ(Wiki)るプログラム
MediaWikiのAPI
Wikipediaから情報を収集しよう
8.2.3 「Yahoo!ニュース」のヘッドラインを取得してみよう
スクレイピング専用のBeautifulSoup4モジュール
Memo Twitterの開発者向けサイト
BeautifulSoup4で「Yahoo!ニュース」のRSSをスクレイピング
8.2.4 ピティナ、ネットにつながる
ピティナが今日から5日後までの天気を教えてくれる
mainWindowモジュールの改造
Webにつながるピティナを実行してみる
Memo 「OpenWeatherMap」で無料で利用できるWebサービス
Memo WebサービスのGoogle Colabを便利に使おう!
Chapter 9 ピティナ、ディープラーニングで画像認識に挑戦!
9.1 ディープラーニングと言えばPythonなのです
9.1.1 ディープラーニングっていったい何?
ニューラルネットワークのニューロン
9.2 認識率98%の高精度のニューラルネットワークを作る
9.2.1 Kerasライブラリをインストールして「手書き数字」の画像データを用意しよう
Kerasを仮想環境にインストールしよう
Memo TensorFlowのインストールができないときの対処法
Memo matplotlib.pyplot.imshow()
Memo Matplotlibのインストール方法
9.2.2 ニューラルネットワークをプログラミングする
入力層をプログラミングしよう
第1層(隠れ層)をプログラミングしよう
ドロップアウトを実装しよう
第2層(出力層)をプログラミングしよう
バックプロパゲーションを実装しよう
ディープラーニングを実行して結果を評価しよう
Memo ディープラーニングの結果が保存されたファイル
9.3 ディープラーニング版ピティナ
9.3.1 ディープラーニング版ピティナ開発の概要です
ディープラーニング版ピティナの開発手順
9.3.2 ピティナAIの画面の開発
フォーム(メインウィンドウ)のプロパティを設定する
3個のラベルを配置してプロパティを設定する
[閉じる]メニューの設定
Onepoint pixmapプロパティでリソースファイルからイメージを取り込む手順
UI画面をPythonモジュールにコンバートする
9.3.3 ピティナAIをプログラミングしよう
ピティナAIを起動するモジュール
UI画面を生成するモジュールを作成しよう
ほんとにAI? ピティナ本体をプログラミングする
ピティナAI、手書きの数字を認識する
9.4 ピティナ、ファッションアイテムを92%の高確率で識別する
9.4.1 ファッションアイテムのデータセットとは何ぞや?
9.4.2 畳み込みニューラルネットワークの仕組みをさらっと紹介
2次元フィルター
ゼロパディング
プーリング
訓練データにばかり適合するのを避けるための「正則化」
プーリング層とドロップアウトを備えた畳み込みネットワークの構築
9.4.3 Fashion-MNISTデータを読み込んで学習する
「LearnMNIST.py」を畳み込みネットワーク版に改造してファッションアイテムを学習する
9.4.4 ピティナの本体モジュール「pityna.py」を改造する
pityna.pyの一部を書き換える
ピティナAI、ファッションアイテムを判別する
Appendix 1 Pythonの標準ライブラリ
shutil(高水準のファイル操作)
timeit(小さなコード断片の実行時間計測)
collections(コンテナデータ型)
datetime(基本的な日付型と時間型)
Appendix 2 Pythonの外部ライブラリ
データベース
ゲーム開発
GIS(位置情報システム)
GUI
画像処理
Web開発
著者情報
金城俊哉