Pythonでcsvから貸借対照表が描けるスクリプト作ってみた
2019/11/04
Pythonで貸借対照表を描きたくなったので,スクリプトを作ってみました。
こんな感じで,金額に応じて各科目の大きさを直感的に理解することができます。
(個人的な趣味で、純資産と利益剰余金を分けています)
XBRLなんかも利用して企業の財務指標を自動で持って来れるようにできればもっとクールですよね。
なんでPythonでグラフを描きたいの?
私は大学で卒業研究をしているときに,グラフ全部Pythonにするマンになりました。
理由は,Excelでは「生データ」と「数値的な処理」と「描写」が一体化してしまうためです。
大規模なデータを資産的に扱いたい場合,いずれ以下のようなことが問題になってきます。
- ファイルが重くなりがち(≒生データに余分なモノがつく)
- 数式がセル内に埋め込まれるため,ファイルを作成した人以外は処理を追いづらい
(例:=E8*A4みたいな式よりも,変数名を定義してitem*valueみたいな式にできたほうが読みやすいですよね) - グラフの要素(色やフォントサイズ,軸の範囲など)を一括で修正したくなった場合に,逐一個別ファイルを手動で修正する必要がある
- Excelでは一部の書式を変えると全体がリセットされるなど,面倒な挙動が起きる
あと,Pythonで描写したグラフはマウスでグリグリ動かせるようになったりするので,直感的な操作がしやすくなります。
プログラミング好きな人はExcelで作られたグラフを「汚い」と表現したりしますが,それは上記のようなことを色々とひっくるめてそう言っているだけだと思います。
Excelでも,最新版に近いOfficeであればビジュアル面の美しさは本質的な問題ではないはずですし,あれはあれで使い捨てで直感を掴むようなプロットをしたい場合には便利です。
コード
読み込ませるcsvは以下のようにします。
貸方と借方で行数が合わないとカンマを置換する処理ができずエラーになるので,ずれた部分にはハイフンと0を入力しておきます。
現預金 | 2,993,041 | 流動負債 | 702,619 |
売掛金 | 487,230 | 固定負債 | 2,200 |
その他流動資産 | 111,299 | 利益剰余金 | 2,236,897 |
有形固定資産 | 51,782 | 純資産 | 1,101,094 |
無形固定資産 | 7,005 | AOCI | 7,638 |
投資その他の資産 | 400,091 | - | 0 |
コードは以下のようになります。
処理について解説
他にもっと良いライブラリがあるかもしれないのですが,描写にはmatplotlibを使いました。
下図のように,x軸が-0.5の部分と0.5の部分にそれぞれ幅1の棒グラフを置いています。
次の科目を描写するときは,ax.bar()にbottomを指定して,グラフの下にスペースを作ることで科目を持ち上げています。
あと,ax.text()で科目にラベルを付けています。
あまりに少額の科目は文字が潰れてしまうので,if文で全体の20分の1であるときのみ描写するよう条件を付けています。
科目の色については,あらかじめ手打ちで「流動資産・流動負債」と「固定資産・固定負債」のデータを用意して,比較の判定をしています。
ここらへんは,csvの並び順とか,AIチックな技術で工夫をすれば他にも色々な判別方法があると思いますが,私には手打ちが一番現実的でした。