1. はじめに|Pythonでリアルなシミュレーターを作ってみよう!
Pythonの文法やライブラリはひと通り学んだけど、「結局、何ができるの?」と感じたことはありませんか?
そんなときにおすすめなのが、実生活に関わるテーマを使って、動くアプリを作ってみることです。今回取り上げるのは、誰にとっても身近な話題——そう、ローン返済です。
といっても、ローンの知識を深掘りするわけではありません。あくまでテーマは「Pythonを使って、実用的なシミュレーターを作る体験をすること」。借入金、利率、返済年数などの数値をスライダーで設定し、グラフや表で結果を「見える化」していきます。
このシミュレーターでは、こんなことが学べます:
- Streamlitを使ったWebアプリ風のUI作成
- pandasとnumpyを使ったデータ処理や計算の実践
- 実用的な「ボーナス支払い」「返済方式(元利・元本)」のロジックを実装
- 結果をCSVファイルとしてエクスポートする方法もマスター!
コードはとてもシンプルで、Python初級〜中級レベルの方にぴったりの内容です。「教材」や「ドリル」では味わえない、リアルな手応えを感じられるはずですよ。
2. 使用するライブラリと環境の準備
今回のシミュレーター作成に使うのは、Pythonで人気のある以下の3つのライブラリです。
🔧 使うライブラリ
| ライブラリ名 | 役割 |
|---|---|
| Streamlit | Pythonコードで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の世界が一気に広がりますよ。
🔗あわせて読みたい
- 🏠 Pythonでシミュレーターを作ってみよう!住宅ローンシミュレーター編
→numpy.pmt()を使った月額返済計算が簡単に!住宅ローンに特化した計算方法を解説。 - 📊 【お金の可視化】PythonとExcelで家計診断ツールを作ってみよう|グラフで支出が丸わかり!
→ 家計データをグラフで視覚化するPythonスクリプトを紹介。ローン返済と合わせて使うと効果的! - 💰 Pythonでシミュレーターを作ってみよう!老後資金シミュレーション編
→ 将来の生活費に不安がある方へ。年金・運用を考慮した資金シミュレーターの作り方を紹介。 - 🧾 Pythonで家計簿アプリを作ろう!初心者でもできるおこづかい帳の作り方
→tkinterを使って簡単に作れるGUIアプリ。日々の支出とローン返済の記録に最適です。 - 📉 Pythonで為替レートを自動取得してExcelに保存する方法【初心者向け】
→ ローンや資産運用を海外通貨で考える場合に便利な、為替レート自動取得スクリプトを紹介。
よくある質問(Q&A)
- Qこのシミュレーターは住宅ローン以外にも使えますか?
- A
はい、使えます。
教育ローンやマイカーローン、フリーローンなど、元利均等や元本均等の返済方式を採用しているものであれば、同じ仕組みで返済シミュレーションが可能です。
- Q「元利均等」と「元本均等」は何が違うんですか?
- A
返済の仕方に違いがあります。
- 元利均等:毎月の返済額(元本+利息)が一定。計画が立てやすい。
- 元本均等:毎月の元本返済額が一定。利息が徐々に減るため、総支払額は少なめになる傾向があります。
- QシミュレーターをWebアプリとして公開するにはどうしたらいいですか?
- A
Streamlit Cloudを使えば簡単に公開できます。
無料で利用できる「Streamlit Community Cloud」にコードをアップロードすれば、誰でもブラウザから使えるWebアプリとして公開可能です。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。