Python実践編|資産シミュレーター開発⑥ 〜グラフの作成〜

はじめに

今回もPython初心者による資産シミュレーター開発記録です。今回はグラフを作成していきます。

正直に言うと、私はPythonもグラフ作成も最初は全く分かりませんでした。

「Pythonで資産管理ツールを作ってみたい」

という思いだけで始めましたが、分からないことだらけだったため、我が相棒チャッピーさん(ChatGPT)に一つずつ教えてもらいながら開発を進めています。

前回までの記事では、

  • 入力チェック
  • 複利計算
  • 年ごとの資産推移データ作成

まで実装しました。

今回は、その計算結果をグラフ化して見える化していきます。

数字だけを見るよりも、資産がどのように成長していくのかをグラフで確認できる方が、シミュレーターとして分かりやすくなります。


matplotlibでグラフを作成する

Pythonにはグラフを作成するためのライブラリがあります。

今回は「matplotlib」を使用しました。

まずインストールします。

python3 -m pip install matplotlib

そしてPythonで読み込みます。

import matplotlib.pyplot as plt

matplotlibを使うことで、Pythonで計算したデータを折れ線グラフなどで表示できます。


今回作成した資産シミュレーターのコード

今回完成したコードはこちらです。

import matplotlib.pyplot as plt
import mplcursors
from matplotlib import rcParams

# 日本語表示対応
rcParams['font.family'] = 'Hiragino Sans'


# 入力チェック関数
def positive_number(message):
    while True:
        try:
            value = float(input(message))

            if value > 0:
                return value
            else:
                print('0より大きい数値を入力してください')

        except ValueError:
            print('数字を入力してください')


# 入力
assets = positive_number('投資資産額を入力してください>')

rate = positive_number('想定利回りを入力してください(%)>')

period = int(positive_number('運用期間を入力してください(年)>'))


# 複利計算
growth = 1 + rate / 100

amounts = []
years = []


for i in range(1, period + 1):

    years.append(i)

    result = assets * growth ** i

    amounts.append(result)

    print(f'{i}年後:{int(result):,}円')


# 結果表示
final_amount = amounts[-1]

profit = final_amount - assets


print()
print('======================')
print('資産シミュレーション結果')
print('======================')

print(f'投資元本:{int(assets):,}円')

print(f'{period}年後の資産額:{int(final_amount):,}円')

print(f'運用益:{int(profit):,}円')


# グラフ表示(万円換算)
amounts_man = [amount / 10000 for amount in amounts]


plt.plot(years,amounts_man,marker="o")


# 元本ライン表示
principal_man = assets / 10000

plt.axhline(y=principal_man,linestyle="--")


plt.xlabel('運用年数')

plt.ylabel('資産額(万円)')

plt.title('資産シミュレーション')

plt.grid()


# 結果をグラフ内に表示
plt.text(
    0.05,
    0.95,
    f'投資元本:{assets:,.0f}円\n'
    f'{period}年後の資産額:{final_amount:,.0f}円\n'
    f'運用益:{profit:,.0f}円',
    transform=plt.gca().transAxes,
    fontsize=10,
    verticalalignment='top',
    bbox=dict(boxstyle='round')
)


# カーソル表示
cursor = mplcursors.cursor(hover=True)


@cursor.connect("add")
def on_add(sel):

    x, y = sel.target

    sel.annotation.set_text(f'{int(x)}年目\n{y:.0f}万円')


plt.show()

グラフ表示で工夫したポイント

目次

① 資産額を万円表示に変更

最初は円単位で表示していました。

しかし、

2653298円

では少し見づらいため、グラフでは万円単位に変更しました。

amounts_man = [amount / 10000 for amount in amounts]

これにより、

265万円

のように直感的に確認できます。


② 投資元本ラインを追加

資産の増加だけではなく、

「最初に投資した金額からどれだけ増えたのか」

を見るために、元本ラインを追加しました。

principal_man = assets / 10000

plt.axhline(y=principal_man,linestyle="--")

これで、

  • 投資した金額
  • 複利によって増えた金額

を比較できます。


③ 結果をグラフ内に表示

グラフを見るだけで結果が分かるように、

  • 投資元本
  • 最終資産額
  • 運用益

を表示しました。

plt.text()

を使うことで、グラフ内に文章を表示できます。


④ カーソルで資産額を確認

最後に「mplcursors」というライブラリを追加しました。

インストール:

python3 -m pip install mplcursors

これにより、グラフ上のポイントにカーソルを合わせると、

10年目
163万円

のように、その時点の資産額を確認できます。


今回完成したこと

今回で資産シミュレーターは、

✅ 投資金額入力
✅ 利回り入力
✅ 運用期間入力
✅ 複利計算
✅ 資産推移作成
✅ グラフ表示
✅ 元本との比較
✅ 結果表示
✅ カーソルによる確認

まで完成しました。

現在はターミナル上で動くPythonプログラムですが、次のステップではこれをWebアプリ化していきます。

最終的には、ブラウザから誰でも使える資産シミュレーターを作ることが目標です。


まとめ

今回はmatplotlibを使って、資産シミュレーターにグラフ機能を追加しました。

Python初心者の私でも、AIに教えてもらいながら少しずつコードを理解し、実際に動くツールを作ることができました。

最初は分からなかったコードも、少しずつ組み合わせていくことで、自分だけのツール作成につながっています。

次回は、この資産シミュレーターをWebアプリ化するため、Flaskを使った開発に挑戦していきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

FIREを目指しながら、投資・プログラミング・家庭菜園・資格勉強に取り組んでいます。試行錯誤しながら積み上げる日々を記録するブログです。

コメント

コメントする

目次