koboriakira.com

numpy再入門

2020/04/29

2020年4月22日、水曜日。

昨日は寝れないまま過ごし、ちゃんと起きたのは16:00頃。これが最後のダラダラした一日になるかもしれない。答え合わせは1年後に。

白菜の蒸し鍋をつくったりしたあとは、CourseraでPythonのデータサイエンスをひきつづき。

最初は「Pythonに慣れよう」ってテーマなので、ある程度はもう知っていることだった。ただPythonのちょっと複雑な書き方は知らなかったので、覚えるようにした。


print(sum) # 45 ```my_list = [number for number in range(0,1000) if number % 2 == 0]print(my_list)

ジェネレータをつかった処理。後者はラムダを使った例。

print(set(1,2,3,1,3,2,3,1,2,1,3)) # {1,2,3}listから重複をのぞいたsetをつくるまたnumpyのメソッドもあらためて勉強。Pythonのlistは行列を扱うには処理速度も関数も不足しているからnumpyのarrayを利用しましょう、という理解。

2020年4月20日、月曜日。

起床後すぐに配偶者と赤ちゃんがいる病院へ。入院中に必要なものを追加で差し入れにいくため。院内での一挙一動がリスクなので、ロビーで荷物を看護婦に渡したらすぐに帰る。

この建物の中に私が強く遺伝されている人間がいるのかと思うと、すごく不思議な気持ちになった。

名前がまだ決まっていないので(候補だけ増えていくパターン)、帰りしなに再度考えた。普段のネーミングセンスには自信があるのだけれど、このブログタイトルと赤ちゃんの名前はまったく自信がない。永続的なネーミングが苦手なのかしら。


帰ってからは新生児グッズの開封と整理をちょっとしたり、ホットクックで無水カレーを作ったり、食洗機の使い方について考えをめぐらしたりした。糸底や高台のない椀を買おうかどうか迷ってるところ。

また注文していたベビー布団が予定よりも遅く届くことになりそうで、これをどうするかに頭のリソースがほとんど割かれた。ただ悩んでいるだけだったので配偶者経由で看護婦に相談してみてもらうようお願いした。

---PyCaretはとりあえずチュートリアルのソースは利用できたのだが(Jupyter NotebookをDockerで実行して遊んでみた。2年ぐらい前はローカルでやってたっけな)、何をやってるのかサッパリわからなかった。 ローコードではあるがデータ分析の知識は必須なのだと理解し、その初歩としてKaggleの入門を試してみた。とりあえず結果のサンプルを提出してコンペにランクされたところまでは確認。明日はチュートリアル(https://www.kaggle.com/alexisbcook/titanic-tutorial)を確認しながらMLの自動化に取り組んでみる。


2020年4月21日、火曜日。Faye Websterの新曲「In A Good Way」がリリースされていた。相変わらず良い声。歌い出しの声色は、何をやろうとしていたか一瞬で忘れさせてしまうぐらいの魅力がある。


体温計の電池が切れていたので買いに出かけたら売り切れていた。世界中にある体温計は、のきなみ電池切れのまま家に居座っていたのだろう。「トーストは、ピーナッツバターを塗った面がかならずカーペットに落ちる」みたいな、新しい摂理を発見した。


Kaggleはチュートリアルの最初を終えた。MLについての知識はまったく得られていないが、とりあえず動かすことを覚えたので、コンペティションに参加する前にさっそく実データを使って勉強することにした。

テーマは「日経平均ダブルインバース・インデックス連動型上場投信から日経平均株価の上昇/下降を予測できるか」ということで、直近5年間のインデックスの信用売買残を学習させてみようと思う。

ためしにランダムフォレスト法(?)でやってみたところ(そもそもこれがClassifyのテーマなのかも自信がない)、なんだかよくわからない結果が出てきた。そこまで的外れではないけれど「信頼できるか?」と言われたら絶対に無理なタイプ(ちなみに今週は「ニュートラル」とのこと。売買せず黙っておけ、ということ)。

その後いくつか学習の方法を考えながら、たどり着いたのがCoursera。無料トライアルを使って試しに受講してみることにした。修了証も発行できるし、英語のハードルを感じないのであればこれにしようかと考えているところ。ベビーを抱っこしながら視聴できるかはかなり怪しいけれど。


2020年4月19日、日曜日。

コロナウイルスの影響が私のようなハグレモノにもあるとすれば、昨日産まれた赤と対面できないことだろう。

23日の木曜日に退院したあとでようやく出会えるようだが、それまではデジタルなメディアを通してしか知ることができない。こうして奇妙な5日間が始まった。


とりあえず妊娠に最適化された部屋を解体しながら、太郎を迎え入れる準備をすすめる。部屋の掃除を終えて、グッズを配置。そう書くと色々と物事を進めているように見えるが、実際は一日の大半を「何をすればいいか分からずにsオロオロする」ことに費やした。

オロオロするなかで、食洗機に食器を依存させるべく食洗機の中のサイズや食器のサイズを測ってまわったりもした。グラスは高さ11cmが限界になった。ただその場合はビールグラスが選択肢から消えることになるため、さっそく計画が正念場を迎えている。

両親や親戚にも報告。配偶者の身体を考えて、親戚たちとのやりとりを自分に一元化してみたけれど、これはなかなか上手い工夫だったように思う。配偶者と親戚の間にファイアウォールを設置したかたちだ。

---気持ちを落ち着ける意味も込めて、Pythonの勉強。そのなかでPyCaretという機械学習ライブラリを見つけた。通常の機械学習は初歩までやったことがあったのだけれどすべて忘れてしまっていた。それでも使えるがどうかテストしてみよう。


2020年4月18日、土曜日。

昨日は寝れずに『Clean Architecture』を読んでいたため寝るのが朝6:00頃だった。それでも眠れなかったので、なにかを聴きながら寝ようと思ってAmazon Audibleに契約。DaiGoの音読本ばかりが売れているなか、『サピエンス全史・上』を買ってみた。

歴史とくに人類史に疎いので、布団のなかで第1章の「認知革命」を聴いているだけでも知らないことばかりだった。たとえばホモ・サピエンスの「前」にホモ・ネアンデルターレンシスがいると思っていたが、そうではなく複数種類の人類がいること(こんなの当たり前の知識なのだと思う。たとえば「2001年のM-1には一般審査があった」とかは、私にとって当たり前の知識だ)。

聴きながら寝落ちしたので他は忘れてしまったけれど、寝る前の感覚はよく覚えている。「135億年前から2020年に生きる自分」を見ていた。正確に言えば「2020年に死ぬ自分」を想像していた。ワニの話?


そんなままダラダラ寝ていた13:00頃。唐突に配偶者が自分を呼んだ。向かってみると、どうやら破水が始まったらしい(このブログには明示していなかったけれど、無事に産まれたので以降は書ける。4月から有給をとっていた。このあとは育休が1年ある)。

昨日も破水のような出来事があって通院したため、なんとなく準備はできていた。とりあえず荷物を入れて、タクシーで病院へ。本来であれば一緒に院内に付き添いたかったのだけれど、緊急事態宣言中なので妊婦以外は院内にも入れない。送り届けて、そのまま自宅へ戻った。

雨風が強く、人通りの少ない日だ。帰りしな食洗機の洗剤と浴槽の洗剤を買って戻ったが、すぐにどこかに失くしてしまった。それなりに動揺している証拠。

戻ってからはしばらく部屋の掃除をしたり、買っておいた新生児用の道具を準備したりした。本来であれば5月に生まれる予定だったのが2週ほど早まったので、まだ準備のできていないもの多い。

しばらくすると配偶者からLINEが届いた。陣痛がひどく痛かったようで、麻酔をしてからは落ち着いたこと、出産中に聴きたい音楽リストを作っていることなどを話す。

22:00頃から出産が本格化することを伝えてもらい、22:25を境目に連絡が途切れた。テレビで観る出産シーンが繰り広げられているだろう。

---落ち着かないので、はじめて自宅待機の指示を破って外へ。すこし散歩をして帰ってきた23:00頃、配偶者からLINEが届いた。 40秒ほどの動画の中には、新生児が映っていた。息子がモニターの向こうにいる。スピーカーを割るような産声だった。


2020年4月17日、金曜日。結局「城之内死す」まで見てた。これも「何度見ても笑っちゃう」映像のひとつかも。フリが効いてるんだよな。

VSCodeのExtensionの管理をちゃんとやろうと思って調べてみた。 ~/.vscode/extensionsに拡張ファイルたちが入っていることがわかった。ただファイル容量が大きくなってしまうので、一覧を管理したいのが本音。

あわせてsettings.jsonもちょっと手入れ。Pythonをもうすこし極める気になったので明日もうすこしやってみようと思う。


食洗機を買ったことで、食洗機に依存した食器を揃えたほうがいいかなと計画していた。食洗機は安定度が高いので、食器や生活を食洗機に依存させるべきなんだろう。

というかもしかして生活全般を依存制御すべきなのでは。なんてちょっとダーティーなエンジニアすぎるかも。だけれど「私」について「安定している(依存される、変更できない)」とするか「安定していない(依存する、変わりやすい)」とするかは、とても哲学的というか、意外と人生教訓みたいになっちゃったな。「依存することは固着ではなくて、むしろ自分の可能性をどんどん変えられるチャンスなんだ」みたいな。自己啓発本が一冊かけそう。

---ひきつづき、『clean architecture 達人に学ぶソフトウェアの構造と設計』の第Ⅴ部。

  • 第15章: アーキテクチャとは?

  • アーキテクチャの「形状」の目的は、 ソフトウェアシステムの適切な動作ではなく 、開発・デプロイ・運用・保守を容易にすることである* それらを容易にするための戦略は、 できるだけ長い期間、できるだけ多く選択肢を残すこと である* 「残すべき選択肢」とは、重要でない詳細である* (開発初期の)データベースシステム* (開発初期の)ウェブサーバー(ウェブ経由で配信するかも決めなくていい)

  • (開発初期の)RESTなど、外の世界に対するインターフェース* (開発初期の)DIフレームワーク* 決定を遅延させることで、システムを適切につくるための情報が数多く手に入る* 優れたアーキテクトは、「方針」と「詳細」を慎重に区別して、詳細の決定を保留できるように方針をデザインする* 第16章: 独立性* ソースコードを変更から保護するために、システムの切り離し方式(の選択肢)をシステムの成長にあわせて検討しなければいけない* レイヤーやユースケースを切り離す方法として、次のようなレベルがある* ソースレベル: モジュールの変更が他モジュールの再コンパイルにつながらないよう、モジュール間の依存性を管理* デプロイレベル: モジュールの変更が他モジュールの再ビルドにつながらないよう、デプロイ可能な単位の依存性を管理* サービスレベル: 依存性をデータ構造のレベルにまで下げて、ネットワークパケットだけで通信する* たとえば最初からサービスレベルで切り離すこともできるが、そのためのリソースは高くつく* サービスを「作れそう」なところまで切り離すのが良いのではないだろうか* 第17章:バウンダリー:境界線を引く* アーキテクトはシステムの構築・運用リソースを最小限に抑えるため、早すぎる決定との「結合」を防がなければならない。

  • 早すぎる決定を延期・保留するには、「境界線を引く」ことだ。

  • 境界線は「重要なもの」と「重要でないもの」の間に引く* 入出力はモデル・ビジネスルールにとって「重要でない」

  • 境界線を引くためには、システムをコンポーネントに分割し、必要な機能が含まれるコアなコンポーネント以外をプラグインにする* 依存関係逆転の原則(DIP)、安定度・抽象度等価の原則(SAP)の適用* 第18章:境界の解剖学* モノリシックな実行ファイルであれば、下位レベルから上位レベルへ依存するように分割する* 最も強い境界はサービスであり、あらゆる通信はネットワークを介して行われる* (感想)通信の情報量は境界の強さと相関関係にある* 第19章:レベル* レベルとは「入出力からの距離」である* 入出力を管理する方針はレベルが最も低くなる* 上位レベルの方針は、変更の頻度は低いが、変更の理由は重要となる* 下位レベルの方針は、変更の頻度は高いが、(緊急性は高いものの)変更の理由は重要でないだんだん内容が大きく、抽象的になっていくので理解するのになかなか時間がかかる。クリーンアーキテクチャを示す同心円の図がシェアされて終わり、というのが本書のよくある読まれ方なのだが、精読すると「選択の保留」がもっとも重要であることにあらためて気づく(このあともっと重要なものが出たりして)。

読みながら感じたのは、よく「設計に”失敗した”からプロダクト開発も失敗した」と聞くけど、実際は「設計を”続けなかった”からプロダクト開発が失敗した」というのが正しいのかもしれない。言い換えれば「レジェンドコード」(下記参照)が生まれるのは当然であり、これをレジェンドにしない試みをプロダクトが存続するかぎり続ける必要があるのかなと思った。