職場内で投資の話になったことがありました
ちょうどその頃、会社内のLTで話すために、僕はPythonでグラフを描いていました
何となく気が向いたので、投資をした時の資産額の推移を遊びでグラフ化してみました
固定収入と複利運用はどちらが得なのかをPythonで計算して、グラフ化はmatplotlibというライブラリを使いました
資産額を数式で表す
- 初期費用が50万円で毎月の固定収入が1万円
- 50万円を年利回り5%で運用
1と2でどちらが得かを計算します
※固定収入は一定とします
※複利運用のときの元の資産自体の価値は一定で、資産額は利息だけで増えるとします
※複利運用は利息を全額再投資するとします
※税金やその他諸々の経費は考えないとします
yを資産額、xを年数とします
1は$y=12x-50$で表せます
2は$y=50×(1.05)^x$
固定収入は直線、複利運用は指数関数のグラフになります
動作環境
Mac OS Mojave 10.14.5
Python 2.7.10
準備
デフォルトだとmatplotlibではグラフに日本語を表示できないので、準備しておきます
IPAフォントのダウンロード
このサイトから.ttfファイルをダウンロードして、~/Library/Fonts/に移動させます
import matplotlib.font_manager
font = {'family': 'IPAGothic'}
matplotlib.rc('font', **font)
これをコードに入れて、
rm ~/.matplotlib/fontList*.cache
これでcacheを消しておきます
コード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# matplotlib.pyplotを、ファイルの中でpltと書いて使えるようにする
import matplotlib.pyplot as plt
# グラフで日本語を使えるようにする
import matplotlib.font_manager
font = {'family': 'IPAGothic'}
matplotlib.rc('font', **font)
# 年数、固定収入の資産額、複利運用の資産額を入れる空配列を準備
year = []
regular_income = []
composed_interest = []
print "年数[年] |", "固定収入の資産額[万円] |", "複利運用の資産額[万円]"
for n in range(60):
# 資産額の単位は万円
print n, "|", (12 * n - 50), "|", (50 * (1.05) ** n)
# 年数、固定収入の資産額、複利運用の資産額の配列に追加
year.append(n)
regular_income.append(12 * n - 50)
composed_interest.append(50 * (1.05) ** n)
if (12 * (n - 1) - 50) < (50 * (1.05) ** (n - 1)) and (12 * n - 50) > (50 * (1.05) ** n):
print "↑固定収入が複利運用を超えた!"
if (12 * (n - 1) - 50) > (50 * (1.05) ** (n - 1)) and (12 * n - 50) < (50 * (1.05) ** n):
print "↑複利運用が固定収入を超えた!"
# x軸が年数、y軸が固定収入の資産額のグラフを出力
plt.plot(year, regular_income)
# x軸が年数、y軸が複利運用の資産額のグラフを出力
plt.plot(year, composed_interest)
# グラフの凡例を表示
plt.legend([u'固定収入',u'複利運用'], loc='best')
# グラフタイトルとx,y軸の軸ラベルを表示
plt.title(u"50万円を払って毎月1万円の収益があるのと、\n 50万円を年利5%で運用するのはどちらが良いか")
plt.xlabel(u"年")
plt.ylabel(u"資産 [万円]")
# ファイルに保存して、グラフを出力
plt.savefig('composed_interest.png')
plt.show()
上のファイルを作って、
python composed_interest.py
このコマンドをターミナルで実行すると、composed_interest.pyが実行されます
下は固定収入が複利運用を超える年数と、複利運用が固定収入を超える年数を見つける部分です
if (12 * (n - 1) - 50) < (50 * (1.05) ** (n - 1)) and (12 * n - 50) > (50 * (1.05) ** n):
print "↑固定収入が複利運用を超えた!"
if (12 * (n - 1) - 50) > (50 * (1.05) ** (n - 1)) and (12 * n - 50) < (50 * (1.05) ** n):
print "↑複利運用が固定収入を超えた!"
ここはもっといい書き方があれば、教えてください!
出力結果
年数[年] | 固定収入の資産額[万円] | 複利運用の資産額[万円]
0 | -50 | 50.0
1 | -38 | 52.5
2 | -26 | 55.125
3 | -14 | 57.88125
4 | -2 | 60.7753125
5 | 10 | 63.814078125
6 | 22 | 67.0047820313
7 | 34 | 70.3550211328
8 | 46 | 73.8727721895
9 | 58 | 77.5664107989
10 | 70 | 81.4447313389
11 | 82 | 85.5169679058
12 | 94 | 89.7928163011
↑固定収入が複利運用を超えた!
13 | 106 | 94.2824571162
14 | 118 | 98.996579972
15 | 130 | 103.946408971
16 | 142 | 109.143729419
17 | 154 | 114.60091589
18 | 166 | 120.330961685
19 | 178 | 126.347509769
20 | 190 | 132.664885257
21 | 202 | 139.29812952
22 | 214 | 146.263035996
23 | 226 | 153.576187796
24 | 238 | 161.254997186
25 | 250 | 169.317747045
26 | 262 | 177.783634397
27 | 274 | 186.672816117
28 | 286 | 196.006456923
29 | 298 | 205.806779769
30 | 310 | 216.097118758
31 | 322 | 226.901974695
32 | 334 | 238.24707343
33 | 346 | 250.159427102
34 | 358 | 262.667398457
35 | 370 | 275.80076838
36 | 382 | 289.590806799
37 | 394 | 304.070347139
38 | 406 | 319.273864495
39 | 418 | 335.23755772
40 | 430 | 351.999435606
41 | 442 | 369.599407387
42 | 454 | 388.079377756
43 | 466 | 407.483346644
44 | 478 | 427.857513976
45 | 490 | 449.250389675
46 | 502 | 471.712909158
47 | 514 | 495.298554616
48 | 526 | 520.063482347
49 | 538 | 546.066656464
↑複利運用が固定収入を超えた!
50 | 550 | 573.369989288
51 | 562 | 602.038488752
52 | 574 | 632.14041319
53 | 586 | 663.747433849
54 | 598 | 696.934805542
55 | 610 | 731.781545819
56 | 622 | 768.37062311
57 | 634 | 806.789154265
58 | 646 | 847.128611978
59 | 658 | 889.485042577
12年目に、固定収入の資産額が複利運用の資産額を超えます
49年目に、複利運用の資産額が固定収入の資産額を超えます
複利運用は加速度的に増えていくので、その後は固定収入が複利運用を超えることはありません
グラフ
理論通り、固定収入は直線、複利運用は指数関数のグラフになっています
結論
0~11年目は複利運用の方が資産額が多い
12~48年目は固定収入の方が資産額が多い
それ以降は複利運用の方が資産額が多い
となります
※元手がいくらか、固定収入がいくらか、年利回りがいくらかなど色々な前提条件によって結果は異なります
参考
Scipy Lecture Notes
matplotlib入門
おわりに
たまに計算とかグラフ化とかすると楽しいですね笑
単に技術的な記事も読んでて役に立つからありがたいんだけど、実際に技術を使って何かをしてみる方が記事を書くのは面白いね
最後まで読んでいただきありがとうございました。
QiitaやTwitterなどにコメントをしてもらったり、SNSでシェアしてもらえるとうれしいです!
Pythonを使ってグラフを描いて遊んでみました!
— ITのんびり@V字回復エンジニア (@it31415) 2019年6月16日
Macを使っている人ならPythonを1秒も触ったことない人でも、この記事の内容をコピペすれば10分くらいで綺麗なグラフが書けるようになると思います!
固定収入と複利運用はどちらが得か、Pythonでグラフ化してみた https://t.co/kPLvCB1wK0 #Qiita