Python金融数据分析(一)房贷计算问题

  • 案例详情

        王先生是一家高科技公司高级工程师,近期计划在广州购置一套总价为1000万元的住房,由于自有资金有限无法全额付款,拟向当地C银行申请住房按揭贷款。

        假定你是C银行负责拓展住房按揭贷款业务的客户经理,在评估了王先生的还款能力后,制定了如下的贷款方案:贷款本金为600万元,贷款期限是30年,贷款利率是按照5年期以上贷款市场报价利率(LPR)上浮5个基点,即是贷款利率是4.9%。但是,针对该贷款有以下两种还款方式可供王先生选择:

        1. 等额本息还款,具体是指在贷款利率水平不变的情况下,王先生作为借款人每月还款的本金和利息之和保持不变。

        2. 等额本金还款,具体是指在贷款利率水平不变的情况下,王先生每月还款的本金固定不变,支付的利息则是逐月递减。

        为了让王先生清楚了解这两种还款方式的差异性,并且借助图形展示贷款还款情况,你需要运用Python完成3项编程任务。

  • 编程任务

  1. 假定选择了等额本息还款,请计算王先生需要每月偿还的金额,以及每月偿还金额中的本金额和利息额,并且对相关数据可视化。
  2. 为了能够让王先生知道在等额本息的规则下贷款利率变动对每月还款金额的影响,你采用了如下的敏感性分析:即是模拟出当贷款利率从2%/年增加至8%/年时,王先生每月偿还金额的变化情况,并且进行可视化展示。
  3. 假定采用等额本金还款规则,贷款利率依然是4.9%/年,分别计算王先生每月偿还金额中的本金部分和利息部分,并且对结果进行可视化展示。

提示:等额本息还款规则下,可以运用Numpy包中的函数pmt计算按揭贷款每月固定还款金额,函数ipmt和ppmt分别计算每月还款金额中的利息部分与本金部分。

  • 代码实现

import numpy as np
import matplotlib.pyplot as plt
import numpy_financial as npf

 安装numpy-financial包:pip install numpy-financial

plt.rcParams['font.sans-serif'] = ['SimSun']  # 设置中文显示字体为宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

(1)假定选择了等额本息还款

计算王先生需要每月偿还的金额,以及每月偿还金额中的本金额和利息额。

# 贷款本金
loan_principal = 6000000  # 单位:元

# 贷款期限(月)
loan_term = 30 * 12  

# 贷款利率(年)
annual_interest_rate = 0.049  

# 计算每月偿还金额
monthly_interest_rate = annual_interest_rate / 12
monthly_payment = loan_principal * monthly_interest_rate * (1 + monthly_interest_rate) ** loan_term / ((1 + monthly_interest_rate) ** loan_term - 1)

print("每月偿还金额:", round(monthly_payment, 2))

# 计算每月本金和利息部分
interest_paid = []
principal_paid = []
total_payment = []
remaining_loan = loan_principal

for month in range(1, loan_term + 1):
    interest = remaining_loan * monthly_interest_rate
    principal = monthly_payment - interest
    total = monthly_payment
    interest_paid.append(interest)
    principal_paid.append(principal)
    total_payment.append(total)
    remaining_loan -= principal

# 可视化
import matplotlib.pyplot as plt

months = list(range(1, loan_term + 1))

plt.figure(figsize=(10, 6))
plt.plot(months, interest_paid, label='利息')
plt.plot(months, principal_paid, label='本金')
plt.plot(months, total_payment, label='总金额', linestyle='--')
plt.xlabel('月份')
plt.ylabel('金额(元)')
plt.title('等额本息还款每月本金、利息和总金额')
plt.legend()
plt.grid(True)
plt.show()

 

(2) 敏感性分析

模拟出当贷款利率从2%/年增加至8%/年时,王先生每月偿还金额的变化情况。

# 贷款本金
loan_principal = 6000000  # 单位:元

# 贷款期限(月)
loan_term = 30 * 12  

# 贷款利率范围(年)
interest_rates = np.linspace(0.02, 0.08, 100)

# 计算每月偿还金额
monthly_payments = []
for rate in interest_rates:
    monthly_interest_rate = rate / 12
    monthly_payment = npf.pmt(monthly_interest_rate, loan_term, -loan_principal)
    monthly_payments.append(monthly_payment)

# 贷款利率为4.9%时的每月偿还金额
annual_interest_rate_4_9 = 0.049
monthly_interest_rate_4_9 = annual_interest_rate_4_9 / 12
monthly_payment_4_9 = npf.pmt(monthly_interest_rate_4_9, loan_term, -loan_principal)

# 可视化
plt.plot(interest_rates * 100, monthly_payments, color='red',label='贷款利率变动')
plt.scatter(4.9, monthly_payment_4_9, color='blue', label='4.9%利率', marker='o')
plt.xlabel('贷款利率(%)')
plt.ylabel('每月还款金额(元)')
plt.title('贷款利率变动对每月还款金额的影响')
plt.legend()
plt.grid(True)
plt.show()

(3)假定采用等额本金还款规则

贷款利率依然是4.9%/年,分别计算王先生每月偿还金额中的本金部分和利息部分。

# 贷款本金
loan_principal = 6000000  # 单位:元

# 贷款期限(月)
loan_term = 30 * 12  

# 贷款利率(年)
annual_interest_rate = 0.049  

# 计算每月偿还金额
monthly_interest_rate = annual_interest_rate / 12

# 每月偿还本金部分和利息部分
monthly_payment = loan_principal / loan_term
remaining_loan = loan_principal

principal_paid = []
interest_paid = []
total_payment = []

for month in range(1, loan_term + 1):
    interest = remaining_loan * monthly_interest_rate
    principal = monthly_payment
    total = principal + interest
    principal_paid.append(principal)
    interest_paid.append(interest)
    total_payment.append(total)
    remaining_loan -= principal

# 可视化
months = list(range(1, loan_term + 1))

plt.figure(figsize=(10, 6))
plt.plot(months, interest_paid, label='利息')
plt.plot(months, principal_paid, label='本金')
plt.plot(months, total_payment, label='总金额', linestyle='--')
plt.xlabel('月份')
plt.ylabel('金额(元)')
plt.title('等额本金还款每月本金、利息和总金额')
plt.legend()
plt.grid(True)
plt.show()

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值