スポンサーリンク

Pythonでシミュレーターを作ろう!ローン返済シミュレーター編

自動化スクリプト

1. はじめに|Pythonでリアルなシミュレーターを作ってみよう!

Pythonの文法やライブラリはひと通り学んだけど、「結局、何ができるの?」と感じたことはありませんか?

そんなときにおすすめなのが、実生活に関わるテーマを使って、動くアプリを作ってみることです。今回取り上げるのは、誰にとっても身近な話題——そう、ローン返済です。

といっても、ローンの知識を深掘りするわけではありません。あくまでテーマは「Pythonを使って、実用的なシミュレーターを作る体験をすること」。借入金、利率、返済年数などの数値をスライダーで設定し、グラフや表で結果を「見える化」していきます。

このシミュレーターでは、こんなことが学べます:

  • Streamlitを使ったWebアプリ風のUI作成
  • pandasとnumpyを使ったデータ処理や計算の実践
  • 実用的な「ボーナス支払い」「返済方式(元利・元本)」のロジックを実装
  • 結果をCSVファイルとしてエクスポートする方法もマスター!

コードはとてもシンプルで、Python初級〜中級レベルの方にぴったりの内容です。「教材」や「ドリル」では味わえない、リアルな手応えを感じられるはずですよ。




2. 使用するライブラリと環境の準備

今回のシミュレーター作成に使うのは、Pythonで人気のある以下の3つのライブラリです。

🔧 使うライブラリ

ライブラリ名役割
StreamlitPythonコードでWebアプリのようなインターフェースを作れる超便利ライブラリ。ボタンやスライダー、グラフ表示も簡単にできます。
pandas表形式のデータ(表計算みたいなやつ)を扱うためのライブラリ。データの整理やCSV出力に使います。
numpy数値の計算や処理に強いライブラリ。ローンの返済額などの計算に使います。

🖥️ 開発環境の準備

すでにPythonがインストールされていれば、以下のコマンドでライブラリをインストールできます。
ターミナル(またはコマンドプロンプト)で以下を入力してください:

pip install streamlit pandas numpy

💡Anacondaを使っている場合は、ターミナルやJupyter Notebookでも同様に実行できます。

✅ 動作確認してみよう

StreamlitはWebアプリのように動くので、次のようなテストコードを実行して確認してみましょう。

# test_app.py
import streamlit as st

st.title("テストページ")
st.write("Streamlitの動作確認です!")

保存したら、ターミナルで次のコマンドを実行します:

streamlit run test_app.py

ブラウザが開いて「テストページ」と表示されたら準備完了です!




3. シミュレーターの基本UIを作ろう(Streamlit)

ここからはいよいよ、Pythonでローン返済シミュレーターのUI(ユーザーインターフェース)を作っていく作業に入ります。

今回のゴールは、以下のようなUIをStreamlitで作ることです:

  • 借入金額、金利、返済期間、ボーナス払いの比率などをスライダーで設定
  • 返済方式(元利均等・元本均等)をラジオボタンで選択
  • 計算ボタンを押すと結果が表示される

🧪 まずは全体のコードを見てみよう

以下が、基本UIのサンプルコードです:

import streamlit as st

st.title("ローン返済シミュレーター")

# 借入金額(万円単位)
loan_amount = st.slider("借入金額(万円)", min_value=100, max_value=10000, step=100, value=3000)

# 返済期間(年)
repayment_years = st.slider("返済期間(年)", min_value=1, max_value=35, step=1, value=30)

# 金利(年利 %)
interest_rate = st.slider("金利(年利 %)", min_value=0.1, max_value=5.0, step=0.1, value=1.5)

# ボーナス返済割合(%)
bonus_ratio = st.slider("ボーナス返済割合(%)", min_value=0, max_value=50, step=5, value=20)

# 返済方式の選択
repayment_type = st.radio("返済方式を選択", ("元利均等", "元本均等"))

# 確認用の出力
st.write("### 入力内容の確認")
st.write(f"借入金額: {loan_amount} 万円")
st.write(f"返済期間: {repayment_years} 年")
st.write(f"金利: {interest_rate:.2f} %")
st.write(f"ボーナス返済割合: {bonus_ratio} %")
st.write(f"返済方式: {repayment_type}")

💡 ここがポイント!

  • st.slider()で数値を範囲指定して入力可能に。直感的で使いやすいです。
  • st.radio()で返済方式を選べるようにしています。
  • st.write()は自由にテキストや変数の値を表示できます。確認画面にぴったり。

▶️ 実行方法

上のコードを loan_simulator_ui.py などの名前で保存して、以下のコマンドで実行してみましょう。

streamlit run loan_simulator_ui.py

ブラウザが開いて、シンプルだけど使いやすいUIが表示されればOKです!




4. 元利均等 vs 元本均等の違いとは?

ローンの返済方法には、大きく分けて次の2種類があります。

方式特徴
元利均等毎月の支払額が一定。返済初期は利息が多め。
元本均等毎月の元本返済額が一定。最初の支払額が多く、徐々に減る。

では、それぞれの計算方法を、Pythonで実装してみましょう!


📐 元利均等返済の計算方法(annuity)

特徴:
毎月の返済額(元本+利息)が一定になるように計算されます。最初のうちは利息が多め、後半は元本の割合が増えていきます。

import numpy as np

def calc_equal_payment(loan_amount, annual_rate, years):
r = annual_rate / 100 / 12 # 月利率
n = years * 12 # 総返済回数
monthly_payment = loan_amount * 10000 * r * (1 + r) ** n / ((1 + r) ** n - 1)
return monthly_payment

例:3000万円を30年、年利1.5%で借りた場合:

monthly = calc_equal_payment(3000, 1.5, 30)
print(f"月々の支払額(元利均等): {monthly:.0f} 円")

📉 元本均等返済の計算方法(principal fixed)

特徴:
毎月の元本部分は一定で、残りの利息が徐々に減っていきます。そのため、初期の支払額は高く、年数が経つほど軽くなります。

def calc_principal_equal(loan_amount, annual_rate, years, month):
r = annual_rate / 100 / 12
n = years * 12
principal = loan_amount * 10000 / n
interest = (loan_amount * 10000 - principal * (month - 1)) * r
return principal + interest

例:1ヶ月目と12ヶ月目の支払い額を比較:

first = calc_principal_equal(3000, 1.5, 30, 1)
twelfth = calc_principal_equal(3000, 1.5, 30, 12)
print(f"1ヶ月目: {first:.0f} 円、12ヶ月目: {twelfth:.0f} 円")

ここまでくれば、Streamlitで折れ線グラフにして可視化することもできます。次の章で、月ごとの返済内訳を可視化していきましょう。




5. ボーナス併用の返済シミュレーション

「ボーナス併用返済」とは、毎月の返済とは別に、年2回のボーナス月に追加で返済する方法です。
これを使うことで、月々の負担を軽くしたり、トータルの返済期間を短くしたりできます。

ここでは、以下のような構成でボーナス対応の返済内訳を計算していきます:

  • ボーナス返済割合(例:20%)を全体の返済額から設定
  • ボーナス支払い月(7月・12月)に追加で支払う
  • 月ごとの支払額、利息、元本を表とグラフで可視化

🧮 元利均等返済+ボーナスの内訳を作る

以下は、元利均等返済でボーナス併用シミュレーションを行うためのコードです:

import pandas as pd
import numpy as np

def simulate_equal_with_bonus(loan_amount, annual_rate, years, bonus_ratio):
loan = loan_amount * 10000
r = annual_rate / 100 / 12
n = years * 12

total_payment = loan * r * (1 + r)**n / ((1 + r)**n - 1) * n
bonus_total = total_payment * (bonus_ratio / 100)
monthly_total = total_payment - bonus_total
monthly_payment = monthly_total / n
bonus_payment = bonus_total / (2 * years) # 年2回×年数

balance = loan
schedule = []

for i in range(1, n + 1):
interest = balance * r
principal = monthly_payment - interest
payment = monthly_payment
is_bonus = False

if i % 6 == 0: # 毎年6の倍数月(=6,12,18,...)をボーナス月とする
payment += bonus_payment
principal += bonus_payment
is_bonus = True

balance -= principal
balance = max(balance, 0)

schedule.append({
"月": i,
"支払額": round(payment),
"利息": round(interest),
"元本": round(principal),
"残高": round(balance),
"ボーナス月": is_bonus
})

return pd.DataFrame(schedule)

📈 Streamlitでグラフ表示してみよう

import streamlit as st

# 入力値を仮定(本番ではUIから取得)
df = simulate_equal_with_bonus(3000, 1.5, 30, 20)

st.line_chart(df[["支払額", "利息", "元本"]])
st.dataframe(df)

💡 補足ポイント

  • ボーナス月の追加返済は、i % 6 == 0 でチェックしています(6の倍数月を想定)
  • 支払額の推移、利息の減少、残高の減り具合がグラフで直感的に理解できるのがStreamlitの強み!



6. CSV形式でエクスポートする方法

シミュレーション結果は画面上で確認するだけでなく、手元に保存しておきたいこともありますよね。たとえば以下のようなシーンで活用できます:

  • 家計相談時に資料として使う
  • 家族に説明するときに渡す
  • 毎月の返済プランをエクセルでカスタマイズしたい

そこで今回は、Streamlitのst.download_button()を使って、CSV形式でエクスポートできるようにします。


🧪 実装方法

以下のコードを、シミュレーターの最後に追加してみてください:

import io

# CSVをバイナリ形式で保存する
csv = df.to_csv(index=False).encode("utf-8")
buffer = io.BytesIO(csv)

# Streamlitのダウンロードボタン
st.download_button(
label="📥 結果をCSVでダウンロード",
data=buffer,
file_name="loan_simulation.csv",
mime="text/csv"
)

✅ 解説ポイント

  • df.to_csv(index=False):DataFrameをCSVに変換。インデックスは不要なので非表示。
  • .encode("utf-8"):文字化けしないようにエンコード
  • io.BytesIO():Streamlitが読み取れる形に変換
  • download_button():ボタン一つでダウンロード可能!

💡補足:Excelで開くときの注意

CSVファイルは多くの表計算ソフト(Excelなど)でそのまま開けます。ただし、日本語環境では「UTF-8 BOM付き」形式で保存すると文字化けしにくくなるため、必要に応じて以下のようにして保存することも検討してください:

csv = df.to_csv(index=False, encoding="utf-8-sig").encode("utf-8-sig")

これで、Python×Streamlitによる実用的なローン返済シミュレーターが完成しました!




7. まとめ|Pythonで家計の見通しが変わる!

今回は、PythonとStreamlitを使ってローン返済シミュレーターを作成してきました。

このプロジェクトでは、単に「数字を計算する」だけでなく、

  • 入力フォームやスライダーで直感的な操作ができるUIを作る
  • 元利均等・元本均等など、実務的な計算ロジックを実装する
  • pandasとnumpyでデータを整理し、視覚的な表やグラフにする
  • 結果をCSVとしてデータ出力する

といった、実用性の高いスキルをたくさん身につけることができました。

しかもテーマは「ローン返済」という、生活に直結する内容。身近な題材だからこそ、学んだことがしっかりと頭に残ります。


💡 学びを応用してみよう!

このスキルを応用すれば、たとえば次のようなツールも作れます:

  • 教育資金や老後資金のライフプランシミュレーター
  • Excelベースの家計診断アプリ
  • 住宅ローン比較のWebアプリ(Flaskなどと組み合わせて)

「勉強のためのコード」から一歩踏み出して、実際に使えるツールを自分で作れるようになると、Pythonの世界が一気に広がりますよ。


🔗あわせて読みたい


よくある質問(Q&A)

Q
このシミュレーターは住宅ローン以外にも使えますか?
A

はい、使えます。
教育ローンやマイカーローン、フリーローンなど、元利均等や元本均等の返済方式を採用しているものであれば、同じ仕組みで返済シミュレーションが可能です。

Q
「元利均等」と「元本均等」は何が違うんですか?
A

返済の仕方に違いがあります。

  • 元利均等:毎月の返済額(元本+利息)が一定。計画が立てやすい。
  • 元本均等:毎月の元本返済額が一定。利息が徐々に減るため、総支払額は少なめになる傾向があります。
Q
シミュレーターをWebアプリとして公開するにはどうしたらいいですか?
A

Streamlit Cloudを使えば簡単に公開できます。
無料で利用できる「Streamlit Community Cloud」にコードをアップロードすれば、誰でもブラウザから使えるWebアプリとして公開可能です。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク