作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
米克罗斯卢卡奇的头像

米克罗斯卢卡奇

Miklos是现金流建模和Python编程方面的专家, 曾在摩根士丹利和DBRS晨星工作. 他是Toptal金融专家和结构金融咨询公司Pylink Ltd的董事.

以前在

摩根士丹利(Morgan Stanley)
分享

许多金融专家都擅长使用Excel建立金融模型. 然而, 因为同行评议很困难, 版本控制, 不能形成递归函数, 对于更复杂的模型,Excel可能不是最佳选择. 尽管有这些缺点, 许多金融专业人士仍在使用Excel,因为他们对Python等编程语言缺乏信心.

Python是最容易学习的编程语言之一. 因为它在设计时就考虑了可读性和易用性, 它的代码简洁,接近于普通英语. 在本文中, 我将展示使用最基本的函数为贷款支付构建Python现金流模型是多么容易, 包, 数据结构.

要继续学习,您将需要使用 Colaboratory (简称“Colab”), 谷歌的一款免费的基于网络的笔记本程序,可以让你编写和执行代码. Colab是一个Python解释器,它使用可以包含代码的单元格, 降低标记(对于容易设置样式的文本), 图片, 或者其他数据. Colab在您编写代码时持续存储代码的值, 当错误或漏洞出现时,使其快速而简单地被发现. (如果你还不想跳进去,就跟着这条 例子 Colab 笔记本.)

首先,确保你有你需要的工具

我们将为一个有一个计划的摊销贷款建立一个模型, 贷款本金和利息的定期支付. 它在每个时期有固定的分期付款,支付的利息部分随着时间的推移而减少. 您将需要三个Python库, 防止开发人员从头编写代码的软件例程集合, 对于这个模型- numpy, 熊猫, 和Matplotlib:

  • numpy-financial = = 1.0.0
  • 熊猫= = 1.2.3
  • matplotlib = = 3.2.2

在Colab, 默认安装了熊猫和Matplotlib包, 所以你只需要安装numpy-financial库, 你可以直接从Colab完成吗. 安装numpy-financial, 然后导入稍后需要的所有三个库, 从“文件”菜单中打开一个新的Colab笔记本, 并将以下代码粘贴到第一个代码单元格中:

# initial setup
!PIP安装numpy_financial
以pd方式导入熊猫
导入numpy_financial为NPF
进口matplotlib.Pyplot为PLT
从集合导入namedtuple

在我们进入下一步之前, 让我解释一下前面的代码,以及为什么它是这样写的. 尽管金融傻瓜的名字里有连字符, 在安装和导入它时,必须在名称中使用下划线. (有关安装numpy_financial的更多信息和说明,请查看 文档.)你可能也会注意到缩写. 预定义的别名通常用于包—numpy写成np, 熊猫写成pd. 使用这些别名可以避免每次使用包时都要编写包的全名,还可以帮助提高代码的可读性.

现在,使用NumPy来设置贷款特征

NumPy是最流行的Python库之一,它增加了对large, 多维数组, 以及一组重要的高级数学函数来操作这些数组. NumPy -financial库是一个相对较新的包,由一组常用的金融功能组成,这些功能已经从主NumPy库中分离出来,并被赋予了自己的骄傲地位.

计算分期偿还贷款期限内的计划利息和本金向量的最简单方法是使用PMT, IPMT, 和PPMT功能从numpy-financial包. PMT函数提供固定贷款分期付款,以便在给定的期间内全额支付贷款. IPMT和PPMT函数分别提供利息和本金支付. 取决于周期的输入, IPMT和PPMT函数可以返回单个周期或多个周期的值.

对于本例,我们将提供一个范围,其贷款的整个生命周期作为期间输入. 像这样, 我们将得到一个向量数组,其中包含每个贷款周期的本金支付利息:

#贷款特点
Original_balance = 500_000
券息= 0.08
期限= 120

#支付
周期= range(1, term+1)
利息支付= NPF.ipmt (
    Rate =息票/ 12,per=期间,nper=期限,pv=-original_balance)
Principal_payment = NPF.ppmt (
    Rate =息票/ 12,per=期间,nper=期限,pv=-original_balance)

在输入代码之后,您不会在Colab文件中“看到”任何事情发生——这是完成本练习其余部分所需的基本贷款信息. (我用过的所有愚蠢的财务功能的列表, 他们的定义, 它们的输入, 可以在官方文件中找到吗.)

接下来,使用Matplotlib创建图表

虽然把向量作为输出是很好的, 最好以图表的形式将输出可视化, 特别是作为堆叠图. 为了建立图表,我们将使用 plt,是matplotlib库中函数pyplot集合的别名. 在我们的例子中, 我们将在左上角添加一个图例,并在x轴和y轴上添加标题. 由于我们不想要内部边框,我们将外边距设置为0.

添加另一个代码单元格,并插入以下代码:

plt.Stackplot(周期,利息支付,本金支付, 
              标签=[“兴趣”,“主要”])
plt.传奇(loc =“左上”)
plt.包含(“期限”)
plt.ylabel(“付款”)
plt.利润率(0,0)

正如我们所看到的,利息随着时间的推移而减少. 由于每个时期的本金支付,贷款余额也会减少. 为了保持固定的分期付款,本金必须增加.

最后,使用熊猫创建一个表

熊猫包是最常用的Python包,用于操作数字表和时间序列. 它提供了快速的, 灵活的, 表达性数据结构的设计使处理关系数据或标记数据既简单又直观. 我们将创建一个包含本金和利息支付的表, 以及每个期间的开始和结束贷款余额:

_#熊猫浮动格式_
pd.选项.显示.Float_格式 = '{:;.2f}'.格式

现金流量表
cf_data ={'利息':利息支付,'本金':本金支付}
Cf_table = pd.DataFrame (data = cf_data指数=时间)
cf_table['Payment'] = cf_table['Interest'] + cf_table(主要的)
cf_table['Ending Balance'] = original_balance - \
                             cf_table(主要的).cumsum ()
cf_table[' initial Balance'] = [original_balance] + \
                                列表(cf_table[“期末余额”])(:1)
cf_table = cf_table[['期初余额','付款','利息', 
                     '本金','期末余额']]
cf_table.头(8)

应用第一行代码 显示格式规则 通过添加千位分隔符并将数字显示到小数点后两位,使表更具可读性.

第二段代码指示Colab包含利息支付, 本金支付, 期末余额, 以及每个贷款期间的原始余额. 反斜杠充当换行符,因为一行中不能有超过79个字符.

图表上的金额已缩短到小数点后两位.

如果你一直在用你自己的Colab笔记本跟随我,恭喜你! 现在,您已经使用Python编写了一个简单的计划分期偿还贷款组合配置文件.

你能做的还有很多 金融Python, 包括与基准利率和其他贷款结构挂钩的可变息票的贷款建模. 希望这个贷款模型已经让您体验到Python中的财务编码是多么简单.

了解基本知识

  • Python在金融中是如何使用的?

    Python可用于从电子表格和数据库中提取数据,然后使用统计工具处理这些数据. 您可以创建和分析从简单的贷款现金流模型到算法交易策略等所有内容.

  • Python适合金融建模吗?

    Python是一种优秀的财务建模编程语言. 除了一个大型的标准工具库, 它提供了方便的访问金融特定, 第三方库,如NumPy和熊猫.

  • 学习金融学的Python需要多长时间?

    Python是最容易学习的编程语言之一,因为它在设计时就考虑了可读性和易用性. 它的代码简洁,接近于普通英语. 你练习得越多,你学习Python的速度就越快. 一些程序员建议你在学习Python的过程中每天花一个小时学习.

就这一主题咨询作者或专家.
预约电话
米克罗斯卢卡奇的头像
米克罗斯卢卡奇

位于 英国伦敦

成员自 2020年10月6日

作者简介

Miklos是现金流建模和Python编程方面的专家, 曾在摩根士丹利和DBRS晨星工作. 他是Toptal金融专家和结构金融咨询公司Pylink Ltd的董事.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

摩根士丹利(Morgan Stanley)

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

金融专家

加入总冠军® 社区.