くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

【書評】実用的でないPythonプログラミング

先日手に入った「実用的でないPythonプログラミング」を読んだので、感想。実際にコードにも触れて感触を確かめた。Colabである程度はいじれるようにしたほうが都合がよかったので、かなりボリュームがあったので全てではないが、一部Colabでも動かせるようにした。 感触としてはめっちゃ「実用的」だった。


感想

  • 今回の書籍はPython初心者には少し難しいかもしれないが、題材としては面白いし、PEP8とか守ろうよとか基本的なことも書かれているので目次を見て面白そうと思ったら買いです。個人的には遺伝的アルゴリズムで鍵を開けるあたりの実装はアルゴリズム的にも面白いと思った。
  • 練習問題と挑戦プロジェクトというのがあって、挑戦プロジェクトは解答ので自力でがんばれっていう感じ。でも結構コードは書籍に充実しているので、真似てやればできる。
  • あとは画面とかGUIのアプリケーション作るときに使うtkinterを触ったことなかったのでいい機会になった。Colabではただの描画だったのでPILで代用した。

本書の概要

とりあえず、めちゃくちゃ盛りだくさんすぎて全部書けないけど

1章-9章

文字列や数列をつかった興味深い内容が盛り込まれている。例えば、
* 回文
* アナグラムを解く
* 暗号解読 * 暗号の生成
* 遺伝的アルゴリズムででかいマウス作る!
* 遺伝的アルゴリズムで金庫破り
* マルコフ連鎖解析
個人的には、遺伝的アルゴリズムで金庫破りするのと、マルコフ連鎖解析で俳句生成は非常に面白い内容だった。(詳細はColabで)

10章-16章

ここからは、GUIのツールも込みで実装していくので目で見てわかりやすい結果が見えて、結構楽しい。 10章では、tkinterをつかって、実際に描画した(結果的にColabでは画面がなくPILで対応した)。

f:id:black_tank_top:20200820151308j:plain
コードから作成した銀河をイメージした図(10章)

11章では、誕生日のパラッドクスのように直感と反する問題がある。これは学校などで30人程度のクラスに同じ誕生日人がいる確率はどのくらいだろうかという問題で、だいたい70%くらいなんだけどそれがイメージできるだろうか?実際にコードを組んで見るとよくわかる。

12章では、

  • 投資する資産の種類(株式・債権・ブレンド
  • 退職時の資金
  • 年間支出
  • 引退後の生活年数(最小・最頻・最大)
  • 実行回数
    などがパラメータとして設定して モンテカルロシミュレーションで破産しないかどうかをシミュレーションすることができる。 デフォルト値が超絶リッチで、あーってなった。

13章では、衛星イオの粒子の描画にチャレンジする。これめっちゃ面白い。やっぱり動きが出るのはいいね。

f:id:black_tank_top:20200820183117g:plain
粒子が噴出しているイメージ(13章)

14章は火星の周りを回る衛星の軌跡をえがくんだけど、あんまりおもろくなかったので省略 15章は画像処理という感じで、最後のステップを行うのに前段階の処理が必要で、今回は手をつけてないが面白そうではある。 16章は、ベンフォードの法則と2016年のアメリカ代と両選挙を絡めた内容で、不正を見つけるっていう内容。これはかなり面白くて、なるほどなという感じ。自分もベンフォードの法則は完全には理解していなかったが、この本の解説と実装で理解できた。具体例で実際の選挙を使うあたりは、さすがだなと思った。

終わりに

Colabで画面系を扱うのが久しぶりでトラブルもあったが無事一通り読みながらすすめられた。実用的でないと言ってても、アルゴリズムGUIモジュールなどを駆使してサンプルがあるので結構勉強になった。

挑戦プロジェクトはまだ公開していないが、そのうち時間があれば公開しようかな。

Colab

Open In Colab

↑これをぽちると、Colab上で動くようにしてある参考コードが見られる。さらに、書き換えても大丈夫なので、気になるところはその場で自分で書き換えてもよし、ダウンロードして手元でやってもよし。 GitHubからいくと重すぎて見らないが、nbviewerなら見られた。


お願い(欲しい書籍リスト)

ずうずうしいのですが、ブログを続けるのも大変で、基本自分の学習メモのためですが、サポーター募集です。ポチッとしてくれると嬉しいです。

https://www.amazon.jp/hz/wishlist/ls/2EDNNTYRW2BJE?ref_=wl_share

もしくは、レビューなど書くので、献本していただけたらものすごく喜びます(お問い合わせ or TwitterのDMからお問い合わせ下さい。)