浜村拓夫(・∀・)作品集

頭の中にあるイメージを表現できるデザイン力が欲しいです(><)

入門 Python 3 【目次】

人工知能の勉強を始めて、まずはPythonの復習から着手することにしました。

 

hamamuratakuo.hatenablog.com

 

人工知能の学習で使う言語に、Pythonを選んだ理由は、

(1) 人工知能ライブラリー/フレームワークは、Pythonバインディングが多いから。

(2) はてなの研修資料で、Pythonが推奨されていたから。

 

Pythonの復習に使う教材は、以前読んだPython2の本でも良かったのですが、せっかくの機会なので、最新の情報にアップデートしたいと思い、Python3の本を使ってみることにしました。

 

●立ち読み審査

・本屋に行く前、Amazonのレビューをチェックして、良さ気な本を事前にリストアップ。

・本屋で立ち読みして、本の内容を確かめ、自分にとって分かりやすそうな本なら購入OK

 

その結果、「入門 Python 3」という本を選びました。

 

入門 Python 3

入門 Python 3

 

 

●知りたいこと

(1) Python実行環境(インタープリター)開発環境(IDEを用意する方法

(2) Python基本文法

(3) Python科学計算ライブラリーの利用方法 → 人工知能のシステムで必要

(4) ついでに、PythonWebサイトを作成する方法

 

入門書には、プログラミング未経験者向けに「プログラミングとは何か?」という説明が記述されている本もありますが、自分には不要なので余計な説明のない本書が適切でした。

 

(1) Pythonの実行環境(インタープリター)、開発環境(IDE)を用意する方法

→公式サイトで配布されている通常のPythonインストーラーの他に、科学計算ライブラリーも一緒にパッケージした「Anaconda」というインストーラーもある。

 

Download Anaconda Now! | Continuum

f:id:hamamuratakuo:20161011185802p:plain

 

→試しに、AnacondaでPythonの実行環境を用意してみました。

 

IDEは、とりあえずNetBeans(無料)にPythonプラグインを入れたけど、金を出すなら「PyCharm」が人気らしいです。

www.jetbrains.com

 

どのプログラミング言語でもそうですが、こういった下準備はサクッと終わらせられるものが良いですね。 \(面倒なのは御免)/

 

(2) Pythonの基本文法

パッと見、Python2から3で変わったのは「print」。

print "hoge" → print("hoge") =カッコ付きになったんですね。

互換性の違いに注意しながら、あまり時間をかけずに、ザッと概観したいところ。

Python 2 3 違い - Google 検索

 

(3) Pythonの科学計算ライブラリーの利用方法

短気なので、すぐにでも機械学習や深層学習のライブラリーを使ってみたいのですが、調べてみると、基本的な数学の計算ライブラリーの理解が必要みたいなので、ジックリ見てみます。

本書には、「NumPy」等の紹介がチョロっとあったので、触りだけでも読んでみます。

→ 付録C 科学におけるPy

 

(4) ついでに、PythonでWebサイトを作成する方法

以前、Pythonを使おうとしたとき、Google App EngineがPython2にしか対応していませんでした。GAEがPython3に対応したら使ってもいいかな?と思ってました。

今は、GAEがPython3に対応したので、Webサービスのプロトタイプ作成にPythonを利用しても良い時期だ、と判断しました。

googlecloudplatform-japan.blogspot.jp

 

PythonのWebフレームワーク「Flask」辺りを使ってみたいかな?

 

本書の目次と中身を確認して、上記(1)~(4)の条件を満たしていたので、「立ち読み審査」(笑)は合格でした。

 

●目次

www.oreilly.co.jp

 

監訳者まえがき

まえがき

 

1章 Pyの味
  1.1 実世界でのPython
  1.2 Pythonと他言語の比較
  1.3 では、なぜPythonなのか
  1.4 Pythonを避けるべきとき
  1.5 Python 2 vs. Python 3
  1.6 Pythonのインストール
  1.7 Pythonの実行
    1.7.1 対話型インタープリタの使い方
    1.7.2 Pythonファイルの使い方
    1.7.3 次は何か
  1.8 Python公案
  1.9 復習課題

 

2章 Pyの成分:数値、文字列、変数
  2.1 変数、名前、オブジェクト
  2.2 数値
    2.2.1 整数
    2.2.2 優先順位
    2.2.3 基数
    2.2.4 型の変換
    2.2.5 intはどれくらい大きいのか
    2.2.6 浮動小数点数
    2.2.7 数学関数
  2.3 文字列
    2.3.1 クォートを使った作成
    2.3.2 str()を使った型変換
    2.3.3 \によるエスケープ
    2.3.4 +による連結
    2.3.5 *による繰り返し
    2.3.6 による文字の抽出
    2.3.7 [ start:end:step ]によるスライス
    2.3.8 len()による長さの取得
    2.3.9 split()による分割
    2.3.10 join()による結合
    2.3.11 多彩な文字列操作
    2.3.12 大文字と小文字の区別、配置
    2.3.13 replace()による置換
    2.3.14 その他の文字列操作関数
  2.4 復習課題

 

3章 Pyの具:リスト、タプル、辞書、集合
  3.1 リストとタプル
  3.2 リスト
    3.2.1 またはlist()による作成
    3.2.2 list()によるほかのデータ型からリストへの変換
    3.2.3 [offset]を使った要素の取り出し
    3.2.4 リストのリスト
    3.2.5 [offset]による要素の書き換え
    3.2.6 オフセットの範囲を指定したスライスによるサブシーケンスの取り出し
    3.2.7 append()による末尾への要素の追加
    3.2.8 extend()または+=を使ったリストの結合
    3.2.9 insert()によるオフセットを指定した要素の追加
    3.2.10 delによる指定したオフセットの要素の削除
    3.2.11 remove()による値に基づく要素の削除
    3.2.12 pop()でオフセットを指定して要素を取り出し、削除する方法
    3.2.13 index()により要素の値から要素のオフセットを知る方法
    3.2.14 inを使った値の有無のテスト
    3.2.15 count()を使った値の個数の計算
    3.2.16 join()による文字列への変換
    3.2.17 sort()による要素の並べ替え
    3.2.18 len()による長さの取得
    3.2.19 =による代入とcopy()によるコピー
  3.3 タプル
    3.3.1 ()を使ったタプルの作成
    3.3.2 タプルとリストの比較
  3.4 辞書
    3.4.1 {}による作成
    3.4.2 dict()を使った変換
    3.4.3 [key]による要素の追加、変更
    3.4.4 update()による辞書の結合
    3.4.5 delによる指定したキーを持つ要素の削除
    3.4.6 clear()によるすべての要素の削除
    3.4.7 inを使ったキーの有無のテスト
    3.4.8 [key]による要素の取得
    3.4.9 keys()によるすべてのキーの取得
    3.4.10 values()によるすべての値の取得
    3.4.11 items()によるすべてのキー/値ペアの取得
    3.4.12 =による代入とcopy()によるコピー
  3.5 集合
    3.5.1 set()による作成
    3.5.2 set()によるほかのデータ型から集合への変換
    3.5.3 inを使った値の有無のテスト
    3.5.4 組み合わせと演算
  3.6 データ構造の比較
  3.7 もっと大きいデータ構造
  3.8 復習課題

 

4章 Pyの皮:コード構造
  4.1 #によるコメント
  4.2 \による行の継続
  4.3 if、elif、elseによる比較
    4.3.1 Trueとは何か
  4.4 whileによる反復処理
    4.4.1 breakによるループ中止
    4.4.2 continueによる次のイテレーションの開始
    4.4.3 elseによるbreakのチェック
  4.5 forによる反復処理
    4.5.1 breakによる中止
    4.5.2 continueによる次のイテレーションの開始
    4.5.3 elseによるbreakのチェック
    4.5.4 zip()を使った複数のシーケンスの反復処理
    4.5.5 range()による数値シーケンスの生成
    4.5.6 その他のイテレータ
  4.6 内包表記
    4.6.1 リスト内包表記
    4.6.2 辞書包括表記
    4.6.3 集合内包表記
    4.6.4 ジェネレータ内包表記
  4.7 関数
    4.7.1 位置引数
    4.7.2 キーワード引数
    4.7.3 デフォルト引数値の指定
    4.7.4 *による位置引数のタプル化
    4.7.5 **によるキーワード引数の辞書化
    4.7.6 docstring
    4.7.7 一人前のオブジェクトとしての関数
    4.7.8 関数内関数
    4.7.9 クロージャ
    4.7.10 無名関数:ラムダ関数
  4.8 ジェネレータ
  4.9 デコレータ
  4.10 名前空間とスコープ
    4.10.1 名前のなかの_と__
  4.11 エラー処理とtry、except
  4.12 独自例外の作成
  4.13 復習課題

 

5章 Pyの化粧箱:モジュール、パッケージ、プログラム
  5.1 スタンドアローンプログラム
  5.2 コマンドライン引数
  5.3 モジュールとimport文
    5.3.1 モジュールのインポート
    5.3.2 別名によるモジュールのインポート
    5.3.3 必要なものだけをインポートする方法
    5.3.4 モジュールサーチパス
  5.4 パッケージ
  5.5 Python標準ライブラリ
    5.5.1 setdefault()とdefaultdict()による存在しないキーの処理
    5.5.2 Counter()による要素数の計算
    5.5.3 OrderedDict()によるキー順のソート
    5.5.4 スタック+キュー=デック
    5.5.5 itertoolsによるコード構造の反復処理
    5.5.6 pprint()によるきれいな表示
  5.6 バッテリー補充:ほかのPythonコードの入手方法
  5.7 復習課題

 

6章 オブジェクトとクラス
  6.1 オブジェクトとは何か
  6.2 classによるクラスの定義
  6.3 継承
  6.4 メソッドのオーバーライド
  6.5 メソッドの追加
  6.6 superによる親への支援要請
  6.7 selfの自己弁護
  6.8 プロパティによる属性値の取得、設定
  6.9 非公開属性のための名前のマングリング
  6.10 メソッドのタイプ
  6.11 ダックタイピング
  6.12 特殊メソッド
  6.13 コンポジション
  6.14 モジュールではなくクラスとオブジェクトを使うべきなのはいつか
    6.14.1 名前付きタプル
  6.15 復習課題

 

7章 プロのようにデータを操る
  7.1 文字列
    7.1.1 Unicode
    7.1.2 書式指定
    7.1.3 正規表現とのマッチング
  7.2 バイナリデータ
    7.2.1 バイトとバイト列
    7.2.2 structによるバイナリデータの変換
    7.2.3 その他のバイナリデータツール
    7.2.4 binasciiによるバイト/文字列の変換
    7.2.5 ビット演算子
  7.3 復習課題

 

8章 データの行き先
  8.1 ファイル入出力
    8.1.1 write()によるテキストファイルへの書き込み
    8.1.2 read()、readline()、readlines()によるテキストファイルの読み出し
    8.1.3 write()によるバイナリファイルの書き込み
    8.1.4 read()によるバイナリファイルの読み出し
    8.1.5 withによるファイルの自動的なクローズ
    8.1.6 seek()による位置の変更
  8.2 構造化されたテキストファイル
    8.2.1 CSV
    8.2.2 XML
    8.2.3 HTML
    8.2.4 JSON
    8.2.5 YAML
    8.2.6 セキュリティについての注意
    8.2.7 設定ファイル
    8.2.8 その他のデータ交換形式
    8.2.9 pickleによるシリアライズ
  8.3 構造化されたバイナリファイル
    8.3.1 スプレッドシート
    8.3.2 HDF5
  8.4 リレーショナルデータベース
    8.4.1 SQL
    8.4.2 DB-API
    8.4.3 SQLite
    8.4.4 MySQL
    8.4.5 PostgreSQL
    8.4.6 SQLAlchemy
  8.5 NoSQLデータストア
    8.5.1 dbmファミリ
    8.5.2 memcached
    8.5.3 Redis
    8.5.4 その他のNoSQL
  8.6 フルテキストデータベース
  8.7 復習課題

 

9章 ウェブを解きほぐす
  9.1 ウェブクライアント
    9.1.1 telnetによるテスト
    9.1.2 Pythonの標準ウェブライブラリ
    9.1.3 標準ライブラリを越えて
  9.2 ウェブサーバー
    9.2.1 Pythonによるもっとも単純なウェブサーバー
    9.2.2 WSGI
    9.2.3 フレームワーク
    9.2.4 Bottle
    9.2.5 Flask
    9.2.6 Python以外のウェブサーバー
    9.2.7 その他のフレームワーク
  9.3 ウェブサービスとオートメーション
    9.3.1 webbrowserモジュール
    9.3.2 Web APIとREST
    9.3.3 JSON
    9.3.4 クロールとスクレイピング
    9.3.5 BeautifulSoupによるHTMLのスクレイピング
  9.4 復習課題

 

10章 システム
  10.1 ファイル
    10.1.1 open()による作成
    10.1.2 exists()によるファイルが存在することのチェック
    10.1.3 isfile()によるファイルタイプのチェック
    10.1.4 copy()によるコピー
    10.1.5 rename()によるファイル名の変更
    10.1.6 link()、symlink()によるリンク作成
    10.1.7 chmod()によるパーミッションの変更
    10.1.8 chown()によるオーナーの変更
    10.1.9 abspath()によるパス名の取得
    10.1.10 realpath()によるシンボリックリンクパス名の取得
    10.1.11 remove()によるファイルの削除
  10.2 ディレクトリ
    10.2.1 mkdir()による作成
    10.2.2 rmdir()による削除
    10.2.3 listdir()による内容リストの作成
    10.2.4 chdir()によるカレントディレクトリの変更
    10.2.5 glob()によるパターンにマッチするファイルのリストの作成
  10.3 プログラムとプロセス
    10.3.1 subprocessによるプロセスの作成
    10.3.2 multiprocessingによるプロセスの作成
    10.3.3 terminate()によるプロセスの強制終了
  10.4 カレンダーとクロック
    10.4.1 datetimeモジュール
    10.4.2 timeモジュールの使い方
    10.4.3 日時の読み書き
    10.4.4 代替モジュール
  10.5 復習課題

 

11章 並行処理とネットワーク
  11.1 並行処理
    11.1.1 キュー
    11.1.2 プロセス
    11.1.3 スレッド
    11.1.4 グリーンスレッドとgevent
    11.1.5 twisted
    11.1.6 asyncio
    11.1.7 Redis
    11.1.8 キューを越えて
  11.2 ネットワーク
    11.2.1 パターン
    11.2.2 パブリッシュ/サブスクライブモデル
    11.2.3 TCP/IP
    11.2.4 ソケット
    11.2.5 ZeroMQ
    11.2.6 Scapy
    11.2.7 インターネットサービス
    11.2.8 ウェブサービスとAPI
    11.2.9 リモート処理
    11.2.10 ビッグデータとMapReduce
    11.2.11 クラウドでの処理
  11.3 復習課題

 

12章 パイソニスタになろう
  12.1 プログラミングについて
  12.2 Pythonコードを見つけてこよう
  12.3 パッケージのインストール
    12.3.1 pipの使い方
    12.3.2 パッケージマネージャの使い方
    12.3.3 ソースからのインストール
  12.4 IDE(統合開発環境)
    12.4.1 IDLE
    12.4.2 PyCharm
    12.4.3 IPython
  12.5 名前とドキュメント
  12.6 コードのテスト
    12.6.1 pylint、pyflakes、pep8によるチェック
    12.6.2 unittestによるテスト
    12.6.3 doctestによるテスト
    12.6.4 noseによるテスト
    12.6.5 その他のテストフレームワーク
    12.6.6 継続的インテグレーション
  12.7 Pythonコードのデバッグ
  12.8 pdbによるデバッグ
  12.9 エラーメッセージのロギング
  12.10 コードの最適化
    12.10.1 実行時間の計測
    12.10.2 アルゴリズムとデータ構造
    12.10.3 Cython、NumPy、Cエクステンション
    12.10.4 PyPy
  12.11 ソース管理
    12.11.1 Mercurial
    12.11.2 Git
  12.12 本書のサンプルのクローニング
  12.13 さらに学習を深めるために
    12.13.1 書籍
    12.13.2 ウェブサイト
    12.13.3 グループ
    12.13.4 カンファレンス
  12.14 これからのお楽しみ

 

付録A Pyアート
  A.1 2Dグラフィックス
    A.1.1 標準ライブラリ
    A.1.2 PILとPillow
    A.1.3 ImageMagick
  A.2 GUI(グラフィカル・ユーザー・インタフェース)
  A.3 3Dグラフィックスとアニメーション
  A.4 プロット、グラフ、ビジュアライゼーション
    A.4.1 matplotlib
    A.4.2 bokeh
  A.5 ゲーム
  A.6 サウンドと音楽

 

付録B ビジネス現場のPy
  B.1 Microsoft Officeスイート
  B.2 ビジネスタスクの遂行
  B.3 ビジネスデータの処理
    B.3.1 抽出、変換、ロード
    B.3.2 その他の情報源
  B.4 金融界でのPython
  B.5 ビジネスデータのセキュリティ
  B.6 マップ
    B.6.1 ファイル形式
    B.6.2 地図の描画
    B.6.3 アプリケーションとデータ

 

付録C 科学におけるPy
  C.1 標準ライブラリでの数学と統計
    C.1.1 math関数
    C.1.2 複素数の操作
    C.1.3 decimalによる正確な浮動小数点数計算
    C.1.4 fractionsによる有理数計算
    C.1.5 arrayによるパッキングされたシーケンス
    C.1.6 statisticsによる単純な統計
    C.1.7 行列の乗算
  C.2 Scientific Python
  C.3 NumPy
    C.3.1 array()による配列の作成
    C.3.2 arange()による配列の作成
    C.3.3 zeros()、ones()、random()による配列の作成
    C.3.4 reshape()による配列形状の変更
    C.3.5 []による要素の取得
    C.3.6 配列の数学演算
    C.3.7 線形代数
  C.4 SciPyライブラリ
  C.5 SciKitライブラリ
  C.6 IPythonライブラリ
    C.6.1 進化したインタープリタ
    C.6.2 IPythonノートブック
  C.7 Pandas
  C.8 Pythonと科学分野

 

付録D Python 3のインストール
  D.1 標準Pythonのインストール
    D.1.1 Mac OS X
    D.1.2 Windows
    D.1.3 Linux/Unix
  D.2 Anacondaのインストール
  D.3 pipとvirtualenvのインストールと使い方
  D.4 condaのインストールと使い方

 

付録E 復習課題の解答
  E.1 1章 Pyの味
  E.2 2章 Pyの成分:数値、文字列、変数
  E.3 3章 Pyの具:リスト、タプル、辞書、集合
  E.4 4章 Pyの皮:コード構造
  E.5 5章 Pyの化粧箱:モジュール、パッケージ、プログラム
  E.6 6章 オブジェクトとクラス
  E.7 7章 プロのようにデータを操る
  E.8 8章 データの行き先
  E.9 9章 ウェブを解きほぐす
  E.10 10章 システム
  E.11 11章 並行処理とネットワーク

 

付録F 早見表
  F.1 演算子の優先順位
  F.2 文字列メソッド
    F.2.1 大文字、小文字の操作
    F.2.2 サーチ
    F.2.3 書き換え
    F.2.4 整形
    F.2.5 文字列のタイプ
  F.3 stringモジュールの属性
  F.4 終わり

 

索引

 

 

オライリーの本は分厚すぎて、通読するのが困難な本もありますが、本書は簡潔な記述で、サッパリしたかんじなので、読みやすいかな?

 

Web開発、iOSアプリ開発学習の合間に、本書でPythonの復習を進めたいと思います。

 

 

 

松本梨香 - Alive A life (仮面ライダー龍騎)

 

太陽が遠ざかる

闇のなかで

迷うときでも

目を閉じて

胸にある声を聞けば

進んで行ける