更多课程 选择中心


Python培训

400-111-8989

用Python解读房贷利率,要不要看随你

  • 发布:Python培训
  • 来源:Python专栏
  • 时间:2019-08-01 15:02

可能很多买过房、贷过款的朋友大概都知道怎么回事,但是我相信大部分人也没细研究过,而绝大部分人买房时更是任由房屋中介摆布,因为给了中介费相信他们可以算的明明白白,自己也就不过多深究了。但我觉得买房不是小事,真的有必要花些时间弄明白,尤其是贷款利率。

要说算利率,很简单。网上有很多现成的计算工具可以直接用,不过就像学机器学习一样,我不甘心只做个调包侠,所以对于利率的底层算法我还是想和大家分享一下,最后通过手撸Python完成计算,让大家彻底明白房贷到底是怎么回事。

房贷利率

我们买房贷款时银行通常会提供两种还款方式:等额本息,等额本金。我们就以在商业贷款的背景下,分别介绍这两种还款方式,然后再进行对比和验证。

等额本金

等额本金指每个月还的本金都是一样的,但是利息是动态变化的,随着我们每期归还本金而不断递减。

比如我要在北京买一套房,商业贷款200万不过分吧!假设贷款年利率为6%,期限30年,那么等额本金情况下每个月需还款200万/360月,即约0.55万/月。刚才说了,利息是动态变化的,也就是说银行每月会在剩余应还本金的基础上去计算利率,是一个动态的过程。公式如下:

用Python解读房贷利率,要不要看随你

有的朋友说了觉得这样说也不是很直观,那我直接来撸一段代码以表我的respect。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

plt.style.use("fivethirtyeight")

sns.set_style({'font.sans-serif':['simhei','Arial']})

%matplotlib inline

loan = 2000000 # 贷款金额

annualRate = 0.06 # 贷款年利率

monthRate = annualRate/12 # 贷款月利率

period = 30 # 贷款期限30年

# 每月应还本金

monthPrincipalPayment = [loan/(period*12)]*period*12

# 每月应还利息

monthInterestPayment = [(loan - loan*n/(period*12))*monthRate+loan/(period*12) for n in range(1,period*12+1)]

# 还款期数

month = [n for n in range(1,period*12+1)]

f,ax=plt.subplots(figsize=(20,8))

l1 = plt.bar(month,monthInterestPayment,color='b',width=0.4)

l2 = plt.bar(month,monthPrincipalPayment,color='r',width=0.4)

plt.xlabel(u'还款期数(月)', size=20)

# 设置y轴标签

plt.ylabel('还款金额(元)', size=20)

# 设置标题

plt.title(u'等额本金', size=20)

#刻度字体大小20

plt.tick_params(labelsize=20)

# 设置注解狂

plt.legend(handles = [l1, l2,], labels = ['利息', '本金'], loc = 'best',fontsize=20)

plt.show()
等额本金方式下的利息总和为 1795000元。以下是运行出来的结果,蓝色代表利息红色代表本金。每月应还本金不变,应还利息逐渐较少。

用Python解读房贷利率,要不要看随你

等额本息

等额本息是指还款总额(本金+利息)均等地分摊到每个月,即每个月的本息还款额都是一样的。

那么分摊的每这种方式下,每个月的剩余还款额都是在上个月剩余应还本息和的基础上计算当月产生的本息和,再减掉每月应还等额款X而完成的。用Python计算结果如下:月还款额是怎么计算的呢?计算稍微有点复杂,但也不难,就是把均摊还款额作为一个未知参数,然后通过公式推导法推导出它的表达式,如下:

用Python解读房贷利率,要不要看随你

这种方式下,每个月的剩余还款额都是在上个月剩余应还本息和的基础上计算当月产生的本息和,再减掉每月应还等额款X而完成的。用Python计算结果如下:

# 首月应还利息

firstMonthInterest = loan*monthRate

# 每月应还本息

monthPayment = (loan*monthRate*(1+monthRate)**360)/((1+monthRate)**360-1)

print("等额本息每月应还{}".format(round(monthPayment,2)))

根据上面公式可以计算出等额本息下每月应还本息金额(X):11991.01元

这11991.01元当中包括了本金和利息,那么我想知道利息到底是怎么收的,每月都是多少?该怎么算?

很简单,迭代肯定是有一个初始值的,因此我们就以第一个月的应付利率为基准计算并往后迭代就可以了,这样之后每月的本金和利息都可以迎刃而解。

第一个月应还利息为:2000000 x 0.06 / 12 = 10000元,因此第一个月应还本金为11991.01-10000 = 1991.01元。

第二个月应还利息为:(2000000-11991.01)x0.06/12=9940.04元,因此第二个月应还本金为11991.01-9940.04=2050.97元。后面循环迭代即可。

找到了这个规律,我们同样用Python计算,代码如下:

loanPI = [loan*(1+monthRate)-monthPayment]

# 每期应还利息

loanInterest = [loan*monthRate]

for n in range(1, period*12):

loanPI.append((loanPI[n-1]*(1+monthRate)-monthPayment))

loanInterest.append(round(loanPI[n-1]*monthRate,2))

# 每期应还本金

loanPrincipal = [monthPayment-loanInterest[n] for n in range(0,len(loanInterest))]

f,ax=plt.subplots(figsize=(20,8))

l1 = plt.bar(month,monthPaymentList,color='b',width=0.4)

l2 = plt.bar(month,loanPrincipal,color='r',width=0.4)

plt.xlabel(u'还款期数(月)', size=20)

# 设置y轴标签

plt.ylabel('还款金额(元)', size=20)

# 设置标题

plt.title(u'等额本息', size=20)

#刻度字体大小20

plt.tick_params(labelsize=20)

# 设置注解狂

plt.legend(handles = [l1, l2,], labels = ['利息', '本金'], loc = 'best',fontsize=20)

plt.show()

等额本息方式下的利息总和为 2316763.73元。以下是运行出来的结果,蓝色代表利息,红色代表本金。每月应还本息和是不变的,应还利息逐渐较少,应还本金逐渐增多。

用Python解读房贷利率,要不要看随你

两种还款方式对比和验证

以下是两种计算方式的还款金额对比,可以看到在我们选择的参数条件下等额本金比等额本息少了52万。

用Python解读房贷利率,要不要看随你

为啥差这么多?

因为等额本金就好比急着给银行还款,前期还的较多,利息就相对少了很多。

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Python自学书籍推荐-《21天学通Python》
下一篇:学Python的方法是什么?怎么能学好Python编程?

Python培训这么多,靠谱的Python培训班怎么选?

AI怎么裁剪多余的部分?

ai开发选择哪种编程语言?

人工智能发展的三个阶段?

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省