スポンサーリンク

Pythonでシミュレーターを作ってみよう!住宅ローンシミュレーター編

自動化スクリプト

1. はじめに

プログラミングを勉強し始めたとき、「文法はなんとなく分かったけど、次に何を作ればいいんだろう?」と感じたことはありませんか?

そんなときにおすすめなのが、「身近なお金の計算」をテーマにすること。今回はその中でも多くの人に関わる住宅ローンのシミュレーションを、Pythonでやってみましょう!

たとえばこんな疑問に、プログラムで答えられるようになります:

  • 月々の住宅ローン、いくら払うことになるの?
  • 総額ではどれくらい払うの?
  • 元金と利息ってどう分かれてるの?

これを手計算でやるのはなかなか大変ですが、Pythonを使えば一発で計算できます。しかも、条件を変えて何度でもシミュレーションできるので、住宅ローンを考えている人にとっても便利なツールになります。

この記事では、PythonのNumPyというライブラリを使って、住宅ローンの支払額や内訳(元金と利息)を計算する方法をやさしく解説していきます。

「プログラミングって、難しそう…」と思っている方でも大丈夫。数字とちょっとのコードで、生活に役立つツールを作っていきましょう!




2. 住宅ローンってどうやって決まるの?

まずは、住宅ローンの仕組みを簡単におさらいしておきましょう。

家を買うとき、多くの人は銀行などからお金を借りて購入しますよね。この借りたお金を、毎月少しずつ返していくのが住宅ローンです。

ローンの返済額は、次の3つの条件で大きく変わります。


💰1. 金利(利率)

お金を借りるときには「利息(りそく)」が付きます。この利息の割合を「金利(きんり)」といいます。

たとえば「年利1%」なら、1年で借りたお金の1%を余分に返すことになります。金利が高ければ高いほど、返済額も大きくなるわけです。


📅2. 返済期間(年数)

返済する期間が長いと、毎月の支払いは少なくなりますが、利息を払う期間も長くなるため、最終的な支払総額は大きくなります。

日本では「30年ローン」や「35年ローン」が一般的です。


🏠3. 借入額(ローンの元金)

もちろん、借りる金額が大きければ、それに比例して支払うお金も増えます。たとえば、2,000万円のローンよりも、3,000万円のローンのほうが月々の支払いも利息も増えます。

このように、**「金利 × 期間 × 借入額」**の3つの要素がそろって、住宅ローンの支払額が決まります。

これらの計算はちょっとややこしいですが、Pythonを使えばすぐに答えが出せます!
次の章では、実際にPythonで住宅ローンの月々の支払額を計算してみましょう!




3. Pythonで月々の支払額を計算しよう(NumPyのpmt関数)

いよいよ、Pythonを使って住宅ローンの月々の支払額を計算してみましょう!

Pythonには、金融計算に便利なNumPyの関数が用意されています。今回はその中の一つ、pmt関数を使います。


🛠 NumPyのpmt関数ってなに?

pmt関数は、ローンなどの定額返済での毎月の支払金額を計算してくれる便利な関数です。
Excelにも同じ名前の関数があります。

書き方はこんな感じです:

numpy.pmt(rate, nper, pv)

それぞれの引数の意味は次のとおりです:

引数意味単位
rate利率(1回あたり)月利(年利÷12)
nper返済回数(期間)月数(年×12)
pv現在価値(借入額)借りる金額(マイナス)

🧮 実際に計算してみよう!

では、以下の条件で住宅ローンの毎月の支払額を計算してみましょう:

  • 年利:1.0%
  • 借入額:3,000万円
  • 返済期間:30年
import numpy_financial as npf  # numpy-financialを使います

# 条件設定
rate = 0.01 / 12 # 年利1% → 月利
nper = 30 * 12 # 30年ローン → 月数
pv = -30000000 # 借入額(マイナスで指定)

# 月々の支払額を計算
monthly_payment = npf.pmt(rate, nper, pv)

print(f"月々の支払額:{round(monthly_payment):,}円")

✅ 実行結果(概算):

月々の支払額:96,491円

💡 総支払額と金利の負担も見てみよう!

total_payment = monthly_payment * nper
interest = total_payment + pv # pvはマイナスなので加算でOK

print(f"総支払額:{round(total_payment):,}円")
print(f"金利の負担:約{round(interest):,}円")

✅ 結果(概算):

総支払額:34,736,760円
金利の負担:約4,736,760円

rate(利率)やnper(期間)を変えれば、いろんなシナリオでシミュレーションできます。

たとえば、金利が2%だったら?25年ローンにしたら?そういったケースもすぐに試せます。これがPythonの強みですね!




4. 元金と利息の内訳を出してみよう(ppmt関数)

前の章では、住宅ローンの「月々の支払額」がわかりましたね。

でもそのお金、毎月どれくらいが元金(借りたお金)で、どれくらいが利息(手数料)なのか気になりませんか?

これを調べるのに便利なのが、NumPy-financialの ppmt関数 です!


🔍 ppmt関数とは?

ppmtは、指定した月の**元金返済額(Principal Payment)**を計算してくれる関数です。

使い方は pmt とよく似ていて、こんな形で使います:

numpy.ppmt(rate, per, nper, pv)
引数意味
rate月利(年利 ÷ 12)
per何回目の支払いか(1から)
nper支払回数(月数)
pv現在価値(借入額・マイナス)

🧾 1回目の元金と利息を計算してみよう!

import numpy_financial as npf

rate = 0.01 / 12
nper = 30 * 12
pv = -30000000

# 1回目の支払いについて計算
monthly_payment = npf.pmt(rate, nper, pv)
principal_payment = npf.ppmt(rate, 1, nper, pv)
interest_payment = monthly_payment - principal_payment

print(f"1回目の支払い内訳:")
print(f"元金:{round(principal_payment):,}円")
print(f"利息:{round(interest_payment):,}円")

✅ 出力例:

1回目の支払い内訳:
元金:71,241円
利息:25,250円

つまり、最初の月は約96,491円のうち約71,000円が借金の返済、残りの約25,000円が利息なんです!


📈 毎月の元金と利息をグラフにしてみよう(任意)

「だんだん利息が減って、元金の比率が増える」というローンの特徴は、グラフにするととてもわかりやすくなります。

import matplotlib.pyplot as plt

months = list(range(1, nper + 1))
principal_list = [npf.ppmt(rate, m, nper, pv) for m in months]
interest_list = [npf.ipmt(rate, m, nper, pv) for m in months]

plt.figure(figsize=(10, 5))
plt.plot(months, principal_list, label="元金(Principal)")
plt.plot(months, interest_list, label="利息(Interest)")
plt.title("月々の支払い内訳(元金と利息)")
plt.xlabel("支払い月")
plt.ylabel("金額(円)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

このグラフを見ると、ローン初期は利息が多く、後半になるにつれて元金の割合が増える様子が一目でわかります!

Pythonなら、こうした「毎月の内訳」や「支払総額の推移」まで自分で計算&確認できるので、将来の計画も立てやすくなりますね。




5. いろいろな条件でシミュレーションしよう!

前の章までで、「月々の支払額」や「元金と利息の内訳」を計算する方法が分かりましたね。
ここからは、いろんな条件を変えてシミュレーションしてみましょう!

たとえばこんな疑問に、すぐに答えられるようになります:

  • 金利が1%から2%に上がったらどうなる?
  • 30年ローンと35年ローンで、どれくらい差があるの?
  • 借入金額を2,500万円から3,500万円にしたら?

🧪 条件を変えて比較してみよう!

まずは、複数のパターンで月々の支払いを比べてみるコードを作ります。

import numpy_financial as npf

def simulate_loan(rate_annual, years, amount):
rate = rate_annual / 100 / 12 # 年利 → 月利
nper = years * 12 # 返済年数 → 月数
pv = -amount # 借入金額(マイナス)

monthly = npf.pmt(rate, nper, pv)
total = monthly * nper
interest = total + pv

print(f"\n💡 {years}年ローン / 年利 {rate_annual}% / 借入金額:{amount:,}円")
print(f" 月々の支払い額:{round(monthly):,}円")
print(f" 総支払額:{round(total):,}円")
print(f" 金利の負担:{round(interest):,}円")

# シミュレーション:3パターン比較
simulate_loan(1.0, 30, 30000000)
simulate_loan(1.5, 35, 30000000)
simulate_loan(2.0, 30, 25000000)

✅ 出力例(概算):

💡 30年ローン / 年利 1.0% / 借入金額:30,000,000円
 月々の支払い額:96,491円
 総支払額:34,736,760円
 金利の負担:4,736,760円

💡 35年ローン / 年利 1.5% / 借入金額:30,000,000円
 月々の支払い額:92,904円
 総支払額:39,019,680円
 金利の負担:9,019,680円

💡 30年ローン / 年利 2.0% / 借入金額:25,000,000円
 月々の支払い額:92,482円
 総支払額:33,293,520円
 金利の負担:8,293,520円

🧠 条件を変えるだけで「見える化」できる!

このように、金利・期間・借入額を少し変えるだけで、月々の支払額や総支払額に大きな違いが出てくるのがよく分かりますね。

プログラムなら、何回でも、どんな条件でも、すぐに答えを出せるのが最大の魅力です!

このシミュレーション関数に matplotlibpandas を組み合わせると、グラフや一覧表として出力することもできます。
例えば、金利別や年数別の棒グラフで比べるのもわかりやすくておすすめです。




6. まとめ|プログラミングは生活にも役立つ!

ここまで、Pythonを使って住宅ローンのシミュレーションを行う方法を見てきました。

いかがでしたか?

最初はちょっと難しそうに見えるかもしれませんが、実際にコードを書いてみると意外とシンプル。
しかも、「これから何千万円も支払うかもしれないお金の流れ」を自分で数秒で計算できるというのは、すごく心強いことですよね。


💡 この記事で学んだこと

  • 住宅ローンの支払額は「金利・期間・借入額」で決まる
  • Pythonのpmt関数で月々の支払額がすぐに計算できる
  • ppmt関数を使えば、元金と利息の内訳も分かる
  • シミュレーション関数で、条件を変えた比較も簡単!

🧰 実生活 × プログラミング = 最高の学び

今回のように、日常の「ちょっと気になること」をプログラムで解決するのは、学習にも役立つし、生活にもすぐに役立ちます。

「プログラミングって仕事のためのスキルでしょ?」
そう思っていた方も、お金の計算やシミュレーションを通して、生活に寄り添う技術だと感じてもらえたのではないでしょうか?


あわせて読みたい

以下の記事も、Pythonでお金を見える化・管理するというテーマにぴったりです!
住宅ローンだけでなく、家計・老後資金・投資など、さまざまなシミュレーションに挑戦してみましょう!


🔸Pythonでシミュレーターを作ってみよう!老後資金シミュレーション編
将来の生活資金、足りる?Pythonで複利やインフレも考慮したリアルな資金計算!

🔸 【お金の可視化】PythonとExcelで家計診断ツールを作ってみよう|グラフで支出が丸わかり!
支出が多いのは「いつ・どこ・なに」?Pythonで視覚的にチェックできます!

🔸 Pythonで仮想通貨の価格をリアルタイム取得&グラフ表示する方法【Coincheck API】
将来的な資産設計に向けて、仮想通貨の動きをPythonでウォッチしよう!

🔸 NumPyの基本と使い方をやさしく解説|配列・計算・統計処理がこれ1本で!
今回使ったNumPyの知識を、もっとしっかり身につけたい人はこちら!


よくある質問(Q&A)

Q
NumPyのpmt関数って標準で使えますか?
A

いいえ。 pmt関数は現在「NumPy-financial」という別のライブラリに分離されています。
使うにはまず、以下のコマンドでインストールしてください。

pip install numpy-financial

その後は、import numpy_financial as npf で使えるようになります。

Q
pmtppmtってExcelと同じですか?
A

基本は同じです。
Excelでも「=PMT(利率, 期間, 金額)」のようにして使います。Pythonでは引数の順番や扱い方がほぼ同じなので、Excelユーザーにもなじみやすいです。

Q
金利が途中で変わる(変動金利)の場合にも使えますか?
A

基本のpmt関数は固定金利向けです。
変動金利に対応するには、月ごとの金利をリストで管理したり、シミュレーションを1ヶ月ずつ行うロジックにする必要があります。カスタム関数を作ることで対応可能です。

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

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

スポンサーリンク