Divide and Conquer 処理を分割してPython家計簿を改善

2024年7月7日家計Python

最近,勤務時間中での個人作業の時間はもっぱらポッドキャストを聞くことが多いのですが,特に最近は「ゆるコンピュータ科学ラジオ」というチャンネルにはまっています.

パーソナリティの堀元さんと水野さんのウィットに富んだかけ合いが面白くて,電車に乗っている時や趣味のランニングの時に聞いているのですが,二人のやり取りが面白くてしばしばニヤニヤしてしまうため,周りから危ない人と思われていないか心配です.

堀元さんはコンピュータ科学,水野さんは言語学がそれぞれ専門にも関わらず,二人とも幅広い知識を持っていて,そこから繰り広げられる会話を聞いていると,これこそ教養だよなぁ,と思って感心して聞いています.

そんなゆるコンピュータ科学ラジオによく出る概念にDivide and Conquerという概念があるのですが,その概念に則ってPython家計簿をさらに使いやすくするプロジェクトに取り組んでいて,今日はそれについて書いてみました.

Pythonで家計や資産運用の管理をしているというマニアックな人がどれだけいるか未知数ですが,ご笑覧ください.

Divide and Conquerとは

Python家計簿の最適化プロジェクトに入る前に,前提知識としてDivide and Conquerについて簡単に説明します.

Divide and Conquerのコンセプトは「そのままでは取り組むことが困難な大きな問題を,解決可能なレベルに小さく細分化し,それらを再統合することで全体の問題を解決する」というもので,数学やコンピュータ科学の分野でよく用いられる概念ですが,私はDivide and Conquerは人間の,ひいては生物の営みの礎になってると感じます.

個人レベルなら仕事でも受験勉強,もっとマクロな次元なら会社・街・国作りでさえもDivide and Conquerの考えが必要になってきます.

私の勤務する会社は自社製品をグローバルにお客さまに届けていますが,それを実現するには膨大なプロセスがあり,それを個人で行うのは大変ですが,会社という組織の中で各自が割り当てられた仕事をこなし,その集大成として事業が成り立っているんだと思うとしみじみしますね.

Python家計簿でのグラフ

家計や資産運用の管理をしていると,色々なグラフを作って様々な側面から家計や資産の状況を分析したくなるのが人の性です.

たとえば,ほんの一例ですが,私は

  • 資産額
  • アセットアロケーション
  • 投資額
  • 配当

などをグラフで可視化していますが,いずれも全期間と直近1年間のグラフが必要になってきます.

というのも,たとえば棒グラフで作った資産額の全期間グラフは,長期的な変化を見るのには役立ちますが,見ておわかりのように単月の棒グラフが細すぎて月ごとの比較には向いていません.

総資産グラフ

しかし,今年の始めからどれくらい資産が増えたかな?という比較をしたくなることはしょっちゅうで,そのためには下のグラフのような,直近1年間の資産額グラフも別に用意しています.

直近1年間の資産グラフ

Devide and Conquerの適用

上のようなグラフをPythonで作る時

  1. Pandasというライブラリ(モジュール、パッケージをまとめたもの)でデータフレームを適切な形に加工
  2. Seaborn または Matplotlibで加工したデータフレームをチャート化

というのが大まかな流れです.

たとえば資産額のグラフでは,一つのPythonモジュールで全期間と直近1年間のグラフを作っていましたが,これを分割することにしました.

具体的には,今まで一つのPythonファイルに書き込んでいたものを,共通部分のデータフレーム加工を切り出し,また全期間のグラフと直近1年間のグラフを描く処理もそれぞれ別モジュールで持たせることにしました.

これは資産額の例ですが,アセットアロケーション,投資額,配当も同じようにモジュールを分割して,一つのモジュールで行う処理を少なくしています.

一見するとモジュールが増えて煩雑化しているように見えますが,コーディングしたことのある人ならわかると思いますが,一つのモジュールに長いソースコードを書くとメンテナンスやデバッグが大変になり,それに比べたらモジュールが増えるなんて可愛いもんです(それぞれのモジュールに適切な命名をする,というのもこれはこれで悩ましい問題ですが).

また,直近1年間のグラフが見たいけど全期間のはいらない,というような時も必要なモジュールだけを動かせばいいので運用面でも簡素化しています.

まぁ,厳密にはDevideしただけでConquerしていないのかもしれませんが,家計簿パッケージという全体で見た時により使いやすく,かつメンテナンスも楽になっています.

Divide and ConquerでPython家計簿が改善したので,その流れを受けて家計改善が進み,資産がガンガン増えていくという未来を思い描いてますが,まぁ,そんなに上手くいかないでしょうねぇ.


では,また.

Posted by Econ