- 森畑 明昌, 2019: Python によるプログラミング入門 (東京大学 教養学部 テキスト) — アルゴリズムと情報科学の基礎を学ぶ。東京大学出版会, 224 pp. ISBN 978-4-13-062458-9.
2019年にでたA5判 横書きのペーパーバック。
わたしは気象学をまなぶ学生にプログラム言語 Python をつかって計算をしてもらうことにしたので、その参考になる教材をもとめている。2024年8月、東京大学出版会の出版目録を検索したら、東大の学生が専門にわかれるまえの教養課程の授業の教科書としてつくられた本をいくつかみつけたので、まとめて注文した。本書はその1冊めである。
題名のように、読者にとってはじめてまなぶプログラム言語が Python であるばあいを想定して、プログラミングのかんがえかたと Python とをいっしょにまなぶ教科書だが、本書はどちらかというと Python の操作にくわしい。
Python 言語のバージョンは version 3 系列を前提とし、version 2 ではちがいがあることを注意している。実行環境として Anaconda を想定している。ただし Anaconda の使用条件やインストールのしかたにはふれていない。起動のしかたは、Windows では Anaconda Prompt から、Mac では「ターミナル」から、「idle」 または 「jupyter notebook」によっている。ライブラリとして、Anaconda では常備の Numpy と Matplotlib のほか、ita を追加している。ライブラリ追加の方法は「pip install ita」である。(わたしは2021年以後につかいはじめたので Anaconda Navigatorをつかうところだが、2019年には pip がふつうだったのだろう)。
第1章はプログラミングとはどんなことかの概論。第2章では対話モードで Python の文をうちこんで、数値の演算式の書きかたなどを習得する。第3章ではプログラムを書いてそれを動かす形にうつっていく。早い段階で「関数をつくって、それをよびだす」ことをやっている。第4章は、(中学かなにかの試験点数の集計を例として) 合計、平均、最大・最小を計算したり、条件をみたす事例を抽出したりしながら、配列変数、if 文、for ループなどの文法要素を習得していく。
第5章以降は応用編で、かならずしも順にやることを想定していないようだ。
第6章は力学の運動方程式の計算、第10章は拡散方程式の計算で、いずれも微分方程式の差分近似にもとつく計算であり、それには誤差にあることもふれている。すこしだが図による可視化もしている。わたしの想定する気象学むけの教材としても入れたい内容だ。(わたしは自分が理解していない ita をつかいたくないので、プログラム例をそのままつかうわけにはいかないが。)
第9章は統計学でいう直線回帰、あるいは 最小2乗法による直線のあてはめだ (この2つの概念を区別していないようだが)。この章の重点はむしろそこでつかわれる技術としての連立1次方程式の解をもとめる方法にあるようで、そこは統計処理をしない人にも有用だ。
第12章は、データ解析の手法としてのクラスター分析 (多次元空間の点とみなせる要素の集合をクラスターにわけること) だ。
第7章は、統計学的解析にやくだつ基礎をねらっているにちがいないのだが、組み合わせの数を計算する方法、ことに要素数が大量になったときに能率よく計算する方法が中心になっている。
第8章は、データ配列の要素を検索したり整列したりする技術をあつかう。項目の数が多くなるとどうすれば効率よく計算できるかが問題になり、計算機科学としては重要な分野なのだ。すこしだけ文字テキストへの応用をあつかっている。第11章はゲノムの解析となっているが、長い文字列のなかから同じ文字のならびを検出する話なので、技術としては第8章のつづきなのだと思う。
第5章は「ライフ ゲーム」である。2次元の格子のそれぞれのます目の値が、そのまわりの値を一定の関数形で反映してかわっていく。平面のディスプレイ装置で可視化できるし、わりあい簡単なルールなのに人の頭では予想しきれない結果になることもあるので、おもしろいと思えればおもしろい教材なのだとおもう。(わたしは、実際の気象の式を2次元に単純化したモデルによるシミュレーションにであうほうがさきだったせいだろうとおもうが、このようなあきらかに仮想的な世界のシミュレーションをたのしめなくなってしまったのだが。)
折りかえしのあとに目次をつける。ただし、第2章から第11章までの各章末にある「練習問題」は省略した。
===== 目次 =====
まえがき
目次
第1章 はじめに
– 1.1 なぜプログラミングを学ぶのか
– 1.2 プログラミングの学び方
– – [コラム] 機械語と言語処理系
– 1.3 プログラミングを通して見えてくる世界
– 1.4 本書の構成
– 1.5 参考文献
第2章 まずは使ってみる
– 2.1 プログラミング環境の準備と起動
– – 2.1.1 Python プログラミング環境の入手
– – 2.1.2 プログラム開発環境の準備と起動
– – 2.1.3 プログラミング環境の起動と終了
– – 2.1.4 本書で用いるライブラリのインストール
– 2.2 簡単な計算をしてみる
– 2.3 整数と小数
– 2.4 変数
– – [コラム] 何に名前をつけるべきか?
– 2.5 コメント
– 2.6 入力のルールとエラー
– 2.7 学んだことのまとめ
– – 変数の使い方
第3章 プログラムを作ろう
– 3.1 プログラムの読み込み
– 3.2 関数
– 3.3 print 関数
– 3.4 インデント
– 3.5 ライブラリ
– 3.6 [発展] 値を返さない関数
– 3.7 [発展] 変数のスコープ
– 3.8 学んだことのまとめ
– – 関数の使い方
第4章 データ処理の基本: 成績の集計
– 4.1 配列: 多くのデータをひとまとめに
– 4.2 点数の総和と平均
– 4.3 テストによる結果の確認と可視化
– 4.4 [発展] for 文についてもう少し
– 4.5 分数の計算と誤差
– 4.6 最高点の計算
– 4.7 さまざまな if 文
– 4.8 真偽値
– 4.9 さまざまな試験科目がある場合
– 4.10 文字列
– 4.11 [発展] 型
– 4.12 学んだことのまとめ
– – 配列の使い方
– – for 文の使い方
– – if 文の使い方
第5章 ライフゲーム
– 5.1 ライフゲームとは
– 5.2 ライフゲームのプログラム
– – 5.2.1 2次元配列による盤面の構成
– – 5.2.2 周囲の生命を数える
– – 5.2.3 各セルの次世代の計算
– – 5.2.4 次世代の盤面の計算
– – 5.2.5 複数世代のシミュレーションを行う
– 5.3 ライフゲームの可視化
– 5.4 モジュール化
– 5.5 いろいろな絵を描いてみよう
– 5.6 [発展] 配列のさまざまな機能
– 5.7 [発展] 配列とコピー
第6章 放物運動のシミュレーション
– 6.1 運動方程式と差分化
– 6.2 放物運動シミュレーションプログラムの作成
– 6.3 放物運動シミュレーションプログラムの改善
– – 6.3.1 可視化による正しさの確認
– – 6.3.2 モジュール化再訪
– 6.4 [発展] オブジェクト指向
– [コラム] オブジェクト指向をサポートする言語機能
– 6.5 break を伴う繰返し
幕間: テストとデバッグの基本
– – print 法
– – コメントアウト法
– [コラム] 読みやすいプログラムと読みにくいプログラム
第7章 p値の計算
– 7.1 p値とは
– [コラム] p値の不適切な利用 (1), (2)
– 7.2 p値を計算するプログラム
– 7.3 組合せ数のさまざまな計算方法
– – 7.3.1 階乗を使う方法
– – 7.3.2 パスカルの三角形を使う方法
– – 7.3.3 漸化式を使う方法
– 7.4 それぞれの方法の実行時間
– 7.5 アルゴリズムの計算量と O 記法
– 7.6 再帰についてもう少し
– 7.7 シミュレーションによる確率の計算
– 7.8 モンテカルロ法
– 7.9 擬似乱数とその要件
– 7.10 [発展] 擬似乱数を使ったプログラムの正しさ
第8章 大規模データの探索
– 8.1 線形探索と二分探索
– [コラム] 二分探索とバグ
– 8.2 ヒストグラムの計算
– 8.3 併合整列法
– 8.4 [発展] 整列のアルゴリズムと空間計算量
– 8.5 さまざまなデータ構造
– 8.6 文章の分析を少しだけ
第9章 データからの情報抽出: 回帰分析
– 9.1 回帰分析とは
– 9.2 最小2乗線形回帰分析の原理
– 9.3 連立1次方程式の求解アルゴリズム
– 9.4 連立1次方程式求解アルゴリズムの正しさ
– 9.5 数値誤差とその理由
– [コラム] コンピュータでの浮動小数点数の規格
– 9.6 ピボット選択による改善
第10章 拡散のシミュレーション
– 10.1 拡散方程式
– 10.2 拡散方程式の差分化
– 10.3 拡散シミュレーションのプログラム
– 10.4 拡散シミュレーションの安定性
– 10.5 さまざまな差分化手法とその精度
– 10.6 誤差を伴うプログラムのテスト
第11章 高度な検索: ゲノムを解析する
– 11.1 特定の塩基を豊富に含む部位の検索
– 11.2 検索の高度化
– 11.3 動的計画法とメモ化
– 11.4 2種類のゲノムの共通部分を探す
第12章 データを分類する
– 12.1 クラスタリング
– 12.2 クラスタリングの単純なアルゴリズム
– 12.3 k-means 法
– 12.4 k-means 法の初期値依存性
– 12.5 コンピュータの限界
付録 A. Python 言語の簡易ガイド
– A.1 言語の基本的な構造
– A.2 名前
– A.3 文
– A.4 式
– A.5 基本的な値と型
– A.6 ライブラリ
– A.7 エラーと例外
付録 B. ita ライブラリガイド
– B.1 練習問題の解答確認プログラム excheck
– B.2 ita ライブラリ関数の詳細
– B.3 ita ライブラリの実現
索引
==========
One thought on “森畑 明昌 (2019) Python によるプログラミング入門”