01 / 読書ガイド
読書ガイド
引用
Guttag, J. V. (2021). Introduction to Computation and Programming Using Python: With Application to Computational Modeling and Understanding Data (3rd ed.). The MIT Press.
章の要約
本書は全26章とPython 3.8のクイックリファレンスからなる。前半はプログラミングとアルゴリズムの基礎を教え、後半はPythonを使ってデータをモデル化し解釈する。
第1〜3章:Getting Started(はじめに)、Introduction to Python(Python入門)、Some Simple Numerical Programs(簡単な数値プログラム)
導入の章では計算を問題解決として位置づけ、宣言的知識と命令的知識を区別し、Pythonの基本的な型、演算子、制御構造を紹介する。第3章はそれらを、全数探索、近似、二分探索によって答えを求める簡単な数値プログラムに応用する。
第4〜7章:Functions, Scoping, and Abstraction(関数、スコープ、抽象化)、Structured Types and Mutability(構造化型と可変性)、Recursion and Global Variables(再帰とグローバル変数)、Modules and Files(モジュールとファイル)
関数とスコープは抽象化の道具として示される。続いてタプル、リスト、辞書を可変性に注意しながら扱い、再帰とグローバル変数、最後にコードのモジュール化とファイルの読み書きを学ぶ。
第8〜10章:Testing and Debugging(テストとデバッグ)、Exceptions and Assertions(例外とアサーション)、Classes and Object-Oriented Programming(クラスとオブジェクト指向プログラミング)
体系的なテストとデバッグ、例外処理とアサーション、そしてクラスとオブジェクト指向プログラミングを扱う。
第11〜13章:A Simplistic Introduction to Algorithmic Complexity(アルゴリズムの計算量の簡単な入門)、Some Simple Algorithms and Data Structures(簡単なアルゴリズムとデータ構造)、Plotting and More about Classes(プロットとクラスの続き)
計算量を非形式的に紹介し、探索や整列などの簡単なアルゴリズムとデータ構造が続く。第13章はプロットとクラスのさらなる活用を組み合わせる。
第14〜15章:Knapsack and Graph Optimization Problems(ナップサック問題とグラフ最適化問題)、Dynamic Programming(動的計画法)
最適化問題がナップサック問題とグラフの問題として提示され、続いて動的計画法の章が置かれる。
第16〜19章:Random Walks and More about Data Visualization(ランダムウォークとデータ可視化の続き)、Stochastic Programs, Probability, and Distributions(確率的プログラム、確率、分布)、Monte Carlo Simulation(モンテカルロ・シミュレーション)、Sampling and Confidence(標本抽出と信頼度)
後半は無作為性に向かう。ランダムウォークと可視化、確率と分布、モンテカルロ・シミュレーション、標本抽出と信頼区間である。
第20〜22章:Understanding Experimental Data(実験データを理解する)、Randomized Trials and Hypothesis Checking(ランダム化試験と仮説の検討)、Lies, Damned Lies, and Statistics(嘘、大嘘、そして統計)
これらの章は確率の知識を、実験データの解釈、ランダム化試験での仮説の検討、統計がいかに誤解を招きうるかの認識に応用する。
第23〜26章:Exploring Data with Pandas(pandasでデータを探る)、A Quick Look at Machine Learning(機械学習の概観)、Clustering(クラスタリング)、Classification Methods(分類手法)
最後の章ではpandasでデータを探索し、その後クラスタリングと分類を含む機械学習の入門を行う。
主要概念
第1〜10章
- 宣言的知識と命令的知識:本書の出発点となる、何が真かを述べることと、どう計算するかを述べることの区別。
- 抽象化と可変性:関数、スコープ、構造化型は複雑さを制御する手段として示され、可変性は微妙な振る舞いの源となる。
- テストと例外:体系的なテスト、デバッグ、例外処理、アサーション。
第11〜15章
- アルゴリズムの計算量:実行時間がどう増えるかを非形式的に考える方法。
- 動的計画法:部分問題の答えを再利用してナップサックなどの最適化問題を解く。
第16〜26章
- モンテカルロ・シミュレーション:繰り返しのランダムな試行で量を推定する。
- 標本抽出と信頼度:標本の結果をどこまで信頼できるかを判断する。
- クラスタリングと分類:最後の章で扱う二つの機械学習の課題。
批判的分析
長所
- プログラミングとデータ分析が一冊に。 出版社は、本書がPythonとnumpy、matplotlib、random、pandas、sklearnなどのライブラリを使った計算による問題解決と、データをモデル化し解釈するためのデータサイエンスの手法を教えると説明している。
- 初学者向け。 出版社によれば、プログラミング経験がほとんどない学生を計算による問題解決へ導く。
- 長い道のり。 アルゴリズム、計算量、シミュレーション、統計、機械学習が一冊に含まれるため、データ分析へ続く入門コースを一冊で支えられる。
- コードと正誤表がオンラインに。 本書の全コードと正誤表はMIT Pressのウェブページで入手できる。
短所
- 後半は深さより広さ。 機械学習は三章(概観、クラスタリング、分類)で、統計関連の内容は複数の章に分散しているため、これらの部分は入門にとどまる。
- ペース。 26章でPythonの基本構文から分類手法まで進むので、後の話題は簡潔に紹介される。機械学習の章の題名自体が「概観」である。
- Pythonに特化。 型、可変性、ライブラリの扱いはPython 3.8に結びついており、巻末のクイックリファレンスもそのバージョン向けである。
コースにおける位置づけ
このコースの入門的なプログラミング書のうち、How to Design ProgramsはDrRacket環境で体系的な設計手順を教え、Structure and Interpretation of Computer Programsは抽象化、高階手続き、インタプリタを重視する。Python Crash Courseは、より大きなプロジェクトで締めくくる実践的なPython入門であり、Think PythonはPythonによるプログラミングとコンピュータサイエンスの明快で実践的な入門である。The C Programming Languageはシステムレベルのプログラミングのための簡潔な古典である。
Guttagの本は、より穏やかな入門書の次の一歩として、あるいは数学に抵抗のない読者の最初の一冊として妥当である。プログラミングからアルゴリズム、シミュレーション、データ分析へと進むからである。Python Crash Courseと比べるとプロジェクト主導の度合いが低く、計算論的思考に重きがある。SICPと比べると主流の言語を使い、インタプリタを作る章はない。
本書の使い方
本書はプログラミング経験がほとんどない読者を対象とし、計算の最初のコース、特にデータ分析につながるコースに向く。事前のPythonの知識は前提としない。
第1〜10章が最初のコースの中核で、第11〜13章が計算量と基本アルゴリズムを扱う。第14〜15章は最適化に関心のある読者に適した任意のステップである。第16〜22章はシミュレーションと統計を学びたい読者に、第23〜26章はデータ処理と機械学習を学びたい読者に向く。各章のコードは自分で入力して実行し、MIT Pressのページからダウンロードしたコードと比べるとよい。
