Alex DeCaria & Grant Petty (2020) Python Programming and Visualization for Scientists, 2 ed.

  • Alex DeCaria & Grant Petty, (2016), 2020: Python Programming and Visualization for Scientists. 2nd Edition. Madison WI USA: Sundog Publishing, 346 pp. ISBN 978-0-9729033-5-6.

American Letter Size (A4判より幅はすこしひろく、たけはすこし短い) のペーパーバック。外見は未製本の学術論文雑誌に似ているが、一段組みで、字は論文雑誌よりも大きめだ。発行年は、本自体には2020年とある。出版もとのウェブサイトには 2021年とある。おそらく、もし直接注文したら、2021年に印刷された修正版がとどいたのだろう。実行例で参照されているデータが、出版社サイト www.sundogpublishing.com からたどれる本書のページに置かれている。(PythonErrata-5_Oct2019.pdf という正誤表もあるが、これは初版に対するものだ。)

Pythonの入門書はたくさん出ているが、時空間分布する数量を図化したり統計計算したりするための教材としてよい日本語の本がみつからなかったので、英語のものをさがすことにした。2021年6月、洋書を通信販売する日本のサイトで、キーワード検索した。検索にかかってくる本はたくさんあるが、説明を読んでもつかえそうな本かどうかはなかなかわからない。しかし、とうとう、気象への応用を念頭に置いた本が見つかった。2人めの著者の Petty さんの名まえは知っている。日本語訳も出ている大気放射学の本 [読書メモ]の著者だ。

出版もとから直接買ったほうが値段が安いのだが、日本の洋書屋さんにも生き残ってほしいので、今回はそちらから買った。(注文したときは本の寸法を気にかけなかったのだが、自宅の郵便受けにははいらなかったかもしれない。送り先を職場にしておいてよかった。)

Sundog Publishing は事実上の個人事業らしいのだが、Pettyさん自身の著書だけでなく、ほかの気象学者の本も出している。本書のばあいは、2016年の初版は DeCaria さんひとりが著者だった。ところが、Python の事実上の標準が version 2 から 3 にかわったので、書きなおす必要が生じた。その機会に Petty さんが著者にくわわった。分担はよくわからないが、HDFの利用のところで出てくる GPM (全球降水計測) のマイクロ波放射計のデータの利用は あきらかに Petty さんの研究に関連している。

初版からのもうひとつの重要な変更は、地図をかくためのモジュールを Basemap から Cartopy に変更したことだ。第13章のはじめで、Basemap は robust だったが、残念なことに、開発者グループが開発・保守をやめてしまった。Cartopy は まだ じゅうぶん robust でない、これから robust になることを期待する、と言っている。わたしは Basemap を経験していないが、Cartopy については同様に感じている。

本は大きく3部にわかれている。第1部が Python の基本的なつかいかた、第2部が データの図化、第3部が 気象などの専門で有用な雑多な知識だ。

なんらかのプログラム言語の経験があるが、Python ははじめての人を想定している。それで、第1部はけっこう長い。これでも、網羅的ではなく、著者が必要と思った機能を選んだのだろう。

Python は Linux, MS Windows, MacOS のいずれでもほぼ同様に動くことをメリットとしてのべている。OS特有の話はすくない。実行例のうちに darwin という文字列がふくまれるのがあるので、その部分の著者の実行環境は Mac のようだ。

Python 言語の特徴としては、つぎの3つの (概念レベルのちがった) ことをあげている (1.4節)。

  • 動的型つけ (dynamically-typed)。変数の型 (整数型、浮動小数点型、文字型など) の区別があるが、型はあらかじめ宣言しておくのではなく、変数を利用した命令の実行によってきまる。
  • 変数名などについてアルファベットの大文字と小文字を区別する。
  • オブジェクト指向の言語である。

Python のパッケージ集としては、Anaconda と Canopy を並列にあげているが (1.6.1)、実行例は Anaconda をつかっている。

第2章は、Python の構文(syntax)とデータ型。
第3章は文字列の操作。数値を文字列に変換するformatの書きかたの話もある。
第4章は数値の演算。Python 本体にくみこみの関数、math モジュールの関数、numpy モジュールの関数があることものべている。
第5章はプログラムの制御構造。条件判断、ループなどの書きかた、エラー処理など。
第6章はファイルの読み書き。おもにテキストファイルの読み書き。CSV形式については csv モジュールの利用を紹介している (Pandas は第16章であつかう)。インターネット上のファイルを URL でアクセスできることにも簡単にふれている。(第2部の実例では、あらかじめデータをダウンロードして、ローカルのファイルとして読むようにしている。)

第7章では、numpy の配列変数のつかいかたについて、かなりくわしい説明がある。配列をファイルに書き出し、ファイルから読む機能の説明をふくむ。人が読める形のファイルに書き出すばあいと、numpy 内部表現のまましまっておくばあいを区別して、それぞれのべている。
【numpy のつかいかたのうちに、x-y座標の2次元格子のために、座標値のはいった2つの1次元配列から、x座標、y座標それぞれのはいった2つの2次元配列をつくるやりかたが出てくる。むかしならば、そのような記憶容量のむだづかいをさけて1次元配列のままつかうようにプログラミングのくふうをしたものだが、いまではむしろ、汎用の手続きをつかうために一時的に展開するのはよいことなのだろう。】

第8章は、関数 (function) と モジュール (module) の書きかたとつかいかた。
第9章は、クラス (class) と メソッド (method) について。オブジェクト指向がわかっていないわたしにはむずかしいが、本書ののこりの部分を読むのには、一般的にわからなくても、Figure と Axes さえつかえればさしつかえないようだ。

第2部がデータの図化。
第10章は「1次元のプロット」となっている。おもに折れ線グラフをかくことを想定している。散布図、棒グラフ、円グラフ、ヒストグラムも簡単に説明している。折れ線グラフを例にしながら、matplotlib の機能を紹介している。matplotlib は ひとつの図を Figure と Axes にわけて構成している。
【散布図は2次元のプロットだとわたしは思うが、著者は「1次元のプロット」だと思ったらしい。散布図であつかうのは同じ時間軸上の2種類の数量であることが多く、時間が1次元であるとはいえる。】
【本書に対してでなく matplotlib に対する不満だが。set_size_inches() という method があり、set_size_cm() はない。技術者であっても日常にインチをつかっているアメリカ社会の産物なのだ。】

第11章はひとつの画面に複数のグラフをならべる方法。

第12章は2次元格子データの図化。等値線図と、色による塗りわけがおもで、ベクトルの矢印表示、流線図、風の矢羽根表示を簡単に紹介している。

第13章は地図上のデータ表示。Cartopy をつかう。第12章であつかった等値線図や色塗りを地図上にのせる。地球を東西にひとまわりするところのつなぎかたの説明もある。
【この章はわたしがいちばん期待したところなのだが、例の数はあまり多くなく、章の長さは 9ページにすぎない。著者たちにとっても新しいソフトウェアだし、動作が期待どおりでなかったばあいもあって、まだ教科書として書けることがすくないのかもしれない。】
【Cartopy をつかうとき、地図投影法が PlateCarree (正距円筒図法) でなくても PlateCarree を指定する必要があることがあって、どうしてかと思っていたのだが、それは、(表示される地図ではなくて) 格子点データが緯度経度の格子であたえられていることをしめしているのだとわかった。】

第14章は3次元グラフィックス。mpl_toolkits.mplot3d.axes3d の応用にかぎっている。紙面だけではよくわからないが、仮想的に3次元図形をつくって、対話型操作でいろいろな向きからの2次元の透視図が見られるらしい。ここではデータは3次元ではなく1次元や2次元の例をあげている。【この理屈ならば、やはり散布図は2次元プロットだと思うのだが。】

第3部はさまざまな知識。
第15章は日付と時刻のあつかい。おもに datetime モジュールの使いかた。気象データをあつかっていると、年月日 と とおしの日付との換算とか、世界時(UTC)と地方標準時との換算とかで苦労するのだが、だいたい datetime モジュールをつかうと簡単にできる。しかしその機能の知識がいる。

第16章は Pandas モジュールについて。まず Series というオブジェクト型のつかいかた、それから DataFrame のつかいかたを説明している。

第17章は、科学用データ構造のあつかいかた。具体的には、気象データによくつかわれる NetCDF の読み書きと、地球観測衛星データによくつかわれる HDF5 を読むこと。

第18章は「正規表現」による文字列の検索や加工。

第19章は線形代数。行列表現による連立1次方程式をとく。numpy.linalg と scipy.linalg の利用。

第20章はフーリエ変換。実際につかう変換は離散フーリエ変換で、複素数表現と実数表現がある。実数型のほうの FFT をつかってパワースペクトルを計算する例が出てくる。(実際に応用するにはパワースペクトルの概念について別のものを読む必要があるが、そちらはプログラム例がないものでよいだろう。)

第21章はさまざまな話題。内挿・リサンプリング、回帰、数値微分・数値積分、Pythonのオブジェクトをファイルにしまって再利用する方法、物理定数 (scipyでわかるもの)、物理量とその単位 (pintやunytというモジュールがある)、計算効率をあげるためのいろいろな方法(の入り口となる情報)など。

付録A として「Jupyter Notebook」という、プログラムと文書をあわせて管理する実行環境の紹介。(Jupyter Notebook [Nは大文字] のあたらしいバージョンにあたるものを Jupyter Lab といい、そのなかで利用者がつくるものが Jupyter notebook [nは小文字] なのだそうだ。)

付録B として LaTeX の機能の簡単な紹介。matplotlib の中の文字列として数式などをしめすところに、LaTeX にあわせた (むしろ TeX にあわせたというべきだと思うが) 表現がつかえるので、そこでつかいそうなものにかぎったものだ。
【わたしは、むかし LaTeX の勉強にだいぶ時間をかけたから、この短い記述でわかるが、はじめての人のためには、もうすこしくわしく、しかし LaTeX の教科書よりは簡単に書いた教材をつくる必要がありそうだ。】

[2021-06-16] [目次の書きぬきは、別ページに移動した。]

[2021-06-17] [目次の日本語訳 (作業中)]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください