趣味プロ

銀行等の口座をいくつか持っている。給与の振込に使うものもあれば、日頃の支出で頻繁にお金が出入りするものもある。場合によっては口座でない資産もあったり、これらの口座間でお金が移動することもあるので余計にややこしい。自分の持ってる預金残高をわかりやすい形で管理したい。持っている複数の通帳の残高の履歴を積み上げグラフ化すれば、今自分が持っているお金の総額もわかるし、もちろん個別の残高も一目瞭然に傾向が把握できる。
これを使うのにエクセルを使えるとか思うわけだが、データの表示形式と順序などのデータ構造が結びついているというのはやりづらい。VBAを使えば実現可能、というかVBAでできない操作はほぼないとは思うけれど、エクセルはあまり気が進まない…という主観的な理由で、今回はpython + matplotlibでこれをやってみた。pythonの訓練にもなるし。

とりあえず口座ごとに(日付, 残高)という対データがあるとし、これを処理して(日付, 残高1, 残高2, 残高3)みたいな感じの時系列データとしたい。入力データはそれぞれの口座について独立に準備されるので、必ずしも同じ日付のデータが全てのファイルに見つけられるわけではない。まばらなデータ入力でも適当にデータを保管してそれらしい値を出してくれないと困る、というわけで該当する日付に該当する残高データが存在しない場合は、その口座の最も直近のデータでパディングすることとした。たとえば銀行口座が3つあるとして、以下のようなテストデータを入力したとする。

Date Account1 Date Account2 Date Account3
2019/1/1 10000 2019/1/15 20000 2019/1/1 10000
2019/2/1 20000 2019/2/1 5000 2019/2/15 35000
2019/2/18 45000

matplotlibでplt, ax = plt.subplots()としてax.stackplotで、例えばこんな風なグラフをgetできる。

f:id:ttrr:20190218012449p:plain
stackplot

これを使って実際に自分の残高データを処理してみたのだけど…まあ去年今年は色々お金がかかったからな…という結果になった。しょうがないな。