非プログラマーがPythonを学ぶために読んだ本

関連:Pythonでスペクトルのフィッティング - 最終防衛ライン3

プログラミングの経験はほとんどないのですが、最近Pythonの勉強を始めました。自分のやりたいことがそれなりにできるようになりつつあります。いろいろな本を購入したり、図書館で借りたりして勉強したので、折角なのでそれらをまとめておきます。
プログラミング未経験者ではないものの、興味のある人がぴったりのまとめだと思います。
私の目標は、業務で扱う大量のデータ処理の自動化が主で、機械学習にもつなげられたらと考えています。特に科学技術計算を自動化したい。たとえば、大量のデータを同一フォーマットのグラフとして出力するなどですが、この目標は既に達成できました。

1. 私のプログラム歴

プログラム歴はほとんどありません。ビギナーに毛の生えた程度だと思います。

ゲーマーなので、プログラム的なものの親和性は普通の人よりは高いでしょう。一応、HTMLもCSSもそれなりに書けるので、それもアドバンテージではあります。また、大学の授業で一応はC言語をやったので、整数型、浮動小数点型などがあるのも知っています。ただし、それが面倒くさすぎてプログラムを諦めた口です。

その後にウェブページを弄るために、JavaScriptなども触ってみましたが、既存のプログラムを流用するだけだったため、基本的なことが分からず、結局やめてしまいました。
Pythonもたくさんのコードが公開されているので、それらを流用すればそれなりのことができるはずですが、JavaScript に手を出した時の二の舞にならないためにも、基礎をしっかり勉強しようと考え、本を購入したり、図書館で借りたりして、独学で勉強しました。

2. 一ヶ月勉強して、できるようになったこと

基礎を勉強してから、他人のコードを流用しつつ、理解できない部分があったらwebで調べたり、本を読んだりしていたら、大体一ヶ月くらいで、最初の大きな目標に到達できました。
たとえば、スペクトルのフィット:例2 のようなスペクトルのフィッティングができるようになりました。フィッティングなら、有料ソフトを使えば可能ですが、無料かつ自動化が容易なのが Python の利点でしょう。

f:id:lastline:20180411152639p:plain
Pythonでスペクトルのフィッティング - 最終防衛ライン3

pandas で CSV ファイルを読み込み、numpy と scipy.optimize でフィッティングし、それらのデータを matplotlib で描画したグラフを示します。カーブフィッティングを含めた、グラフの描画に関しては、近いうちにエントリーを書くつもりです。

また、私が使用している3DCGソフトであるShadeのスクリプトPythonなので、それが書けるようになったのは渡りに船でした。

クラスの取り扱いがまだまだ不慣れです。自分用のプログラミングなら、そこまで必要はないですが、今後自動化を進める上でも、できるようになった方が楽ができるので、精進するつもりです。

3. 非プログラマー向けの入門書

プログラミングの経験のない人向けの本を紹介しますが、場合によってはもっと簡単な本の方が向いていることもあるでしょう。たとえば、Pythonではなく、プログラミングの概念を紹介している本など。

多くの入門書が、オブジェクトやクラスの説明をかみ砕こうとしていますが、そのほとんどは飲み込めるまでには至っていません。そもそも、それらを理解するには、プログラマー向けの本を読むべきだと思います。また、初等ならばそのような概念があることを頭に入れておく程度で充分でしょう。

どのように書くか、そして何ができるかを指し示した本が、入門書として最適だと考えます。
コードを見ながら入力することを念頭においているため、大判の本を選びました。「みんなのPython」はA5版で小さいため、このような用途には向きません。ハンドブックとして使うには丁度よいサイズではありますが。
広げて読むことを念頭に置いたので、基本的には電子版ではなく書籍を購入しました。広い画面とリッチなタブレットがあれば、電子版でも良いかも知れません。

ここで紹介していない本も、いくつか本屋で見繕ってみましたが、ゲームや会話AIを作る本などは、実践が重視されすぎていて基本が疎かになっている場合が多く、基礎を学びたい自分には適当ではないと感じました。

Pythonスタートブック

オススメ度:☆☆☆☆

Pythonスタートブック [増補改訂版]

Pythonスタートブック [増補改訂版]


プログラミングの経験がなければ、まずこれから始めると良いでしょう。ただ、Python 2をベースに書かれていたので、購入は見送りました。
最近、改訂版が出たので、そちらの購入をお勧めします。

実践力を身につける Pythonの教科書

オススメ度:☆☆☆☆☆

プログラマー向けの入門書として、非常によくまとまっています。基本から、少し発展的なことまでできる構成になっているので、次へとつなげることもできます。
説明も過不足なくなされており、初心者がつまずきやすい「なぜ」を解消できるので、プログラミングの入門書としてもオススメです。

詳細! Python 3 入門ノート

詳細! Python 3 入門ノート

詳細! Python 3 入門ノート

オススメ度:☆☆☆☆
コードやその結果を対比しやすいレイアウトが特徴。余計な図がなく淡々としています。各ライブラリについて、一通りの結果が示されており、割と細かいことまで明示されているので、レシピブックとしても有用です。

本書のコードを一通り書き写せば、基本的なことは身につきますが、淡々としているので、なかなかつらい作業です。Pythonでやりたいことが明確でないと、挫折するかも知れません。

行列を扱う Numpy や グラフ描画のための matplotlib にも軽く触れられており、科学技術計算を目標としている自分としては、役に立ちました。

確かな力が身につくPython「超」入門

オススメ度:☆☆☆

前半は非常に分かりやすく、丁寧に説明されています。図がイラストレーターの方によるものなので、プログラミングの本としては分かりやすいのが特徴です。むしろ、プログラミングの本の図はなぜ分かりづらいのが多いのか。
入門書の中では、オブジェクトやクラスの説明が比較的分かりやすかったです。ただ、後半の実践は「何ができるか」は示される者の、前半で散々説明された「なぜそうするのか」が皆無のため、自分が何をやっているのかが分かりづらいです。つまり、前半と後半のギャップが非常に大きいです。
後半は、Pythonでできることの例示と割り切って読むのもありでしょう。

特に、Webスクレイピングとして Amazon を扱うのはいただけないです。先ず、本書の通りにコードを書いて実行しても同じ結果が得られません。それは、本書の執筆時から、AmazonのHTMLの構成が変更されているため。また、本書を元に書き換えるにしても、 AmazonのHTMLの構成は、非常に解析しづらいです。そもそも、規約上は禁止されていますし。

学生のためのPython

オススメ度:☆☆☆

学生のためのPython

学生のためのPython

学生のためと銘打っているだけあって、他の入門書よりも簡単でした。説明も分かりやすいですが、少々かみ砕きすぎで、正確性に欠ける向きもあります。基本的なことは理解できますが、発展には弱いので、きちんと勉強したい人には物足りないかも知れません。
turtle での描画を軸にコードが例示されるので、結果が見た目でわかりやすいのも初学者向きかなと感じました。

簡単なフラクタルを描画するため、高階関数まで扱っているのが他の入門書にはない特徴で印象に残りました。

Pythonプログラミングのツボとコツがゼッタイにわかる本

オススメ度:☆

Pythonプログラミングのツボとコツがゼッタイにわかる本

Pythonプログラミングのツボとコツがゼッタイにわかる本

ブラックジャックのゲームプログラムを作成し、それをウェブで対戦できるようにしたり、また対戦AIなどを作ったりします。
とりあえず Python で動くプログラムをを作ってみたい!って人には向いていると思いますが、書籍の完成度としてレベルが低いので、個人的にはオススメしません。

著者代表は人工知能の専門家で、人工知能のパートはその方によるものですが、その他の部分は大学生が執筆してるようです。大学生が執筆したパートを著者代表がきちんと監修しているように思えません。文章は平易ではありますが、構成がよくありません。図などを見れば分かりますが、非常に理解しづらいです。

4. 非プログラマーPythonビギナー向き

コードは読めるし、書き方は分かるけど、何ができるか分からない人向けの本を紹介します。
自分のためにプログラムを書くのに適した本を紹介します。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

オススメ度:☆☆☆☆

「何ができるか」の特化した本です。初心者向きではありますが、それなりにPCに詳しくないと躓く部分が多々あります。Pythonを体系的に学ぶには向いていません。
色々な演習も用意されており、O'Reilly Japan - 退屈なことはPythonにやらせよう に回答が用意されているので、基礎を学んでチャレンジすると、それなりの歯ごたえがあります。

Webスクレイピングだけでなく、CSVExcel、PDF、Wordの操作など、主に事務作業の自動化に特化しています。Word や PDF の処理などは、他の本ではあまり取り扱っていない話題なので、その辺に興味のある人にもオススメです。

速習 Python 3

オススメ度:☆☆☆☆

上編を読めば、Pythonの基礎は身につきますが、非プログラマーには説明が不十分な箇所もあります。また、プログラミング経験者には優しすぎるかもしれません。Python にどんな特長があるのかをさっと読むには適していますが、それなら公式ドキュメントを読むべきでしょう。

中編では、プログラミングの概念や哲学について書かれており、関数型、オブジェクト指向、クラスなどが理解できない自分は、とても役に立ちました。
初学者向きとしては、クラスなどを使う利点がわかりやすい事例で丁寧に説明されています。

世界標準MIT教科書 Python言語によるプログラミングイントロダクション第2版

オススメ度:☆☆☆

プログラムを学ぶ大学生のための教科書です。プログラミング経験のない人には少々難しいかもしれません。
実践向けのプログラミング例もありますが、例示の内容が限界利益率の計算などやや古典的です。レイアウトや配色も、少々読みづらいです。

5. プログラマー向けの入門書

プログラミングの経験のある人向け、あるいは初心者向きの入門書を読破した人向けの本を紹介します。中級者向けと思われる本も含めています。結局、オライリーになっちゃうよね。

入門 Python 3

オススメ度:☆☆☆☆☆

入門 Python 3

入門 Python 3

例示が小粋で面白く、それでいて細かな点も過不足無く説明されています。。
章ごとにステップアップしていき、また少しだけ先の章を先取りするなど、理解のしやすい構成になっています。
プログラマーには少々難しいですが、これから挑戦するのもありでしょう

Python 3 プログラミング徹底入門

オススメ度:☆☆☆☆

Python 3 プログラミング徹底入門

Python 3 プログラミング徹底入門

  • 作者: マーク・サマーフィールド,Mark Summerfield,長尾高弘
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2009/12/01
  • メディア: 単行本
  • 購入: 1人 クリック: 61回
  • この商品を含むブログ (21件) を見る

私は三冊目に手を出したのですが、「なせそうしなければならないか」を理解する上で役に立ちました。たとえばメソッドや関数の実行方法。なぜメソッドを「ドット」でつなげるのか。なぜ import文には、色々な書き方があるのか。そして、どのような書き方が推奨されるかも。

初学者向けの本でも「なぜそうしなければならないか」は書かれていますが、ツッコんだ説明まではなされていません。プログラムを本格的に学ぶ人に書かれているため、その点もきちんと書かれています。演習問題も適度に難しく作られているので、力がつきやすいです。

Python3の本ではありますが、2009年に出版されたため内容が古いのが残念です。原本の第二版が出版されていますが、日本語訳はないようです。プログラミングの知識がない人が英語で読むには難しい内容だと思います。

Effective PythonPythonプログラムを改良する59項目

オススメ度:☆☆☆☆☆

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

より読みやすいPtyhonのコードを書くための本。見た目は薄いですが、内容は濃いです。どのように書くべきに留まらず、なぜそう書かなければならないかがきちんと示されています。
基礎が固まってきたら、変なクセが付く前に読んでおくと独りよがりなコードを書かなくてすみそうです。
邦訳がやや残念なので、英語が読めるなら英語版の購入をお勧めします。

6. レシピ集

組み込み関数やモジュールをいちいち覚えられないので、リファレンが手元にあると便利です。
プログラマー向けの入門書がレシピブックとしても流用できるので、それらを持っているなら購入する必要はないかなぁと思います。

pythonライブラリ厳選レシピ

オススメ度:☆☆☆

Python ライブラリ厳選レシピ

Python ライブラリ厳選レシピ

一通りは載っていますが、多くのビギナー向けの本がレシピブック集としても機能するので、それを所有していると、かゆい所に手が届かないと感じました。著者が日本人なので、日本語の取り扱いについても書かれているのが利点でしょうか。

逆引きPython標準ライブラリ 目的別の基本レシピ180+!

オススメ度:☆☆☆☆

逆引きPython標準ライブラリ 目的別の基本レシピ180+! (impress top gear)

逆引きPython標準ライブラリ 目的別の基本レシピ180+! (impress top gear)

評判が良かったので購入しましたが、やはりビギナー向けの書籍を持っていると少々物足りなさを感じました。
A5版は手に取りやすいのでレシピブックとしては最適な大きさだと感じました。

7. 科学技術計算、データサイエンス、ディープラーニング

私が科学技術計算を目標としているので、そのために読んだり、購入したりした本を紹介します。

これ一冊あれば大丈夫!という本がありません。特に、グラフを描画するための Matplotlib がなかなかのじゃじゃ馬で、これに特化した専門書が欲しかったのですが、見つけられませんでした。最近、公式ドキュメント*1が改定され、読みやすくなったそうですが、初心者が読むにはハード。お陰で、関数やクラスの勉強にはなりましたが。

科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

オススメ度:☆☆☆

科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

どのような対象に向けて書かれているのかがよく分からない本でした。
Numpy, Scipy, Matplotlib, pandas などが紹介されているものの、簡単なメソッドしか紹介されていません。これは高速化も同様で、この本を読んだからといって科学技術計算ができるようになるわけでも、コードを高速化できるようになるわけでもありません。

私にとっては、Pythonが科学技術計算に向いていることを再確認するためのアリバイ作りのような本でした。科学技術計算をPythonで始めようと思っている人を後押しする本と考えると最適化も。

巻末にPythonの組み込み関数と標準ライブラリ、およびNumpyの関数リファレンスがまとめっているのは便利でした。

Pythonによるデータ分析入門 : NumPy、pandasを使ったデータ処理

オススメ度:☆☆

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

pandas や Numpy およびそれをIPyhonで扱うための本です。評判は良いのですが、残念ながらPython2ベースのため、Python3と互換性のないコードで書かれている箇所が多々あります。

第二版が出版されましたが、邦訳版はまだ発売されていません。

Python for Data Analysis: Data Wrangling with Pandas, Numpy, and IPython

オススメ度:☆☆☆☆

Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

というわけで、英語版を購入しました。レシピブックなので、英語が分からなくてもそんなに困らないと思います。

ただし、そのまま利用すると、日本語ファイルを取り扱う場合にエラーが起こる可能性があります。自分で解決策を見つける力が必要です。
日本語を扱わない手もありますが、それじゃあクールじゃないですよね。

Pythonによる科学技術計算 基礎編

オススメ度:☆☆☆☆☆

早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 - Qiitaはてなブックマークのコメントで紹介されていたので読んでみたのですが、説明が丁寧で分かりやすかったです。

Matplotlib の記述法として、MATLAB準拠とオブジェクト指向の違いがきちんと説明されているのがすばらしいです。多くのデータサイエンスの本では、その点が全然書かれていないんですよねぇ。

Scipy Lecture Notes

オススメ度:☆☆☆☆☆

書籍ではありませんが、非常によくまとまっています。残念ながら日本語版は2015年で更新が止まっていますが、それでも十分に役に立ちます。SciPyを中心としたガイドではありますが、Matplotlib のレシピ集やクイックリファレンスが大いに役に立ちました。
その他に、SciPyによる画像処理などもまとまっており、一度目を通しておくのをオススメします。

IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集

オススメ度:☆☆☆

IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集

IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集

データ処理のレシピが一通りまとまっており、何ができるのかをざっくりと見渡せますが、コードに関しても理論に関しても、紹介に留まっており、ツッコんだ説明がありません。たとえば、なぜそうするのか、関数を実行した際に何が返ってくるのは書かれていません。
入門書としては微妙だと感じました。統計処理を中心に学びたいのなら役に立つのかも。

ゼロから作るDeep LearningPythonで学ぶディープラーニングの理論と実装

評判が良いので購入してみましたが、まだ読めていません。

8. 私の勉強方法

最後に、私の勉強変遷をまとめておきます。

先ず「詳細! Python 3 入門ノート」を一通りやって、基本的なことを身につけました。次に、目に見える実践的なことをやりたかったので「退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング」を6章くらいまで演習をやりながら、進めました。
「退屈なことはPythonにやらせよう」の演習問題はプログラミング的な思考の勉強にはなりましたが、関数、メソッド、オブジェクト、クラスなどが今一つ把握できませでした。裏を返せば、それらを意識する必要があまりないので、初心者の演習としては丁度良かったかも知れません。

クラスを理解したかったので、内容は難しかったのですが「Python 3 プログラミング徹底入門」に挑戦してみました。その合間に「確かな力が身につくPython「超」入門」や「学生のためのPython」を読みつつ、図書館や本屋でPythonの本を漁っていました。
それと並行して、matplotlib や pandas などを利用してグラフの作図などを始めました。できる範囲でやりたいことを実現させた方がモチベーションを維持しやすいです。その際に「Pythonによる科学技術計算 基礎編」が役に立ちました。
これを読むために、Kindle Unlimited を再契約したのですが、「速習 Python 3」もKindle Unlimitedだったので試しに読んでみたら、中編がちょうど知りたかった、関数、メソッド、オブジェクト、クラスを取り扱う内容で、理解が深まりました。合わせて「Python 3 プログラミング徹底入門」もそれらの理解を助けてくれました。
さらに、Shadeのスクリプトも書いていました。こちらは、結果が見えやすく、実践につながるため、Pythonを勉強するモチベーションにもなりました。

現在は、「入門 Python 3」や「Effective PythonPythonプログラムを改良する59項目」などを読み進めています。