《Python数据分析基础教程:NumPy学习指南(第2版)》笔记16:第七章 专用函数2——金融函数

当前Numpy版本为:1.20

第七章 专用函数

7.9 金融函数

NumPy中有很多金融函数。

Numpy 1.20之前的版本导入numpy,直接调用以下函数即可。

(注意!Numpy 1.20之后的版本移除了金融函数,并将这些函数移至numpy_financial库。本文numpy版本为1.20,因此运行以下案例须安装并调用numpy_financial库,详见https://numpy.org/neps/nep-0032-remove-financial-functions.html

  • fv函数计算所谓的终值(future value),即基于一些假设给出的某个金融资产在未来某一
    时间点的价值。
  • pv函数计算现值(present value),即金融资产当前的价值。
  • npv函数返回的是净现值(net present value),即按折现率计算的净现金流之和。
  • pmt函数根据本金和利率计算每期需支付的金额。
  • irr函数计算内部收益率(internal rate of return)。内部收益率是是净现值为0时的有效利
    率,不考虑通胀因素。
  • mirr函数计算修正后内部收益率(modified internal rate of return),是内部收益率的改进
    版本。
  • nper函数计算定期付款的期数。
  • rate函数计算利率(rate of interest)。

7.10 动手实践:计算终值

终值是基于一些假设给出的某个金融资产在未来某一时间点的价值。终值决定于4个参数——利率、期数、每期支付金额以及现值。

在本节中,我们以利率3%、每季度支付金额10、存款周期5年以及现值1000为参数计算终值。

使用正确的参数调用fv函数,计算终值:

import numpy_financial as npf

print("Future value", npf.fv(0.03/4, 5 * 4, -10, -1000))

结果如下:

Future value 1376.0963320407982

这相当于利率3%的5年期存款并且每季度额外存入10个单位的资金。如果我们改变存款的年数并保持其他参数不变,将得到如下的散点图:

在这里插入图片描述
案例完整代码如下:

import numpy_financial as npf

print("Future value", npf.fv(0.03/4, 5 * 4, -10, -1000))

fvals = []

for i in range(1, 10):
    fvals.append(npf.fv(.03/4, i * 4, -10, -1000))
    
import matplotlib.pyplot as plt

plt.plot(fvals, 'bo')
plt.show()

7.11 现值

现值(present value)是指资产在当前时刻的价值。NumPy中的pv函数可以计算现值。该函数和fv函数是镜像对称的,同样需要利率、期数、每期支付金额这些参数,不过这里输入为终值,输出为现值。

7.12 动手实践:计算现值

我们来进行逆向计算——使用前一节教程中的数值计算现值。使用7.10节使用的数值来计算现值。

import numpy_financial as npf
print("Present value", npf.pv(0.03/4, 5 * 4, -10, 1376.0963320407982))

我们预期的计算结果应该为1000。由于我们计算的是支出的现金流,因此结果前面有一个负号。

Present value -1000.0

7.13 净现值

净现值(net present value)定义为按折现率计算的净现金流之和。 NumPy中的npv函数返回净现值。该函数需要两个参数,即利率和一个表示现金流的数组。

7.14 动手实践:计算净现值

我们将为一组随机生成的现金流计算净现值。步骤如下。

  • (1) 生成5个随机数作为现金流的取值。插入-100作为初始值。

    import numpy as np
    import numpy_financial as npf
    
    cashflows = np.random.randint(100, size=5)
    cashflows = np.insert(cashflows, 0, -100)
    print("Cashflows", cashflows)
    

    生成的现金流如下所示:

    Cashflows [-100   21   52    1   87   29]
    
  • (2) 根据上一步生成的现金流数据,调用npv函数计算净现值。利率按3%计算。

    print("Net present value", npf.npv(0.03, cashflows))
    

    计算出的净现值如下:

    Net present value 72.63250636467717
    

案例完整代码如下:

import numpy as np
import numpy_financial as npf

cashflows = np.random.randint(100, size=5)
cashflows = np.insert(cashflows, 0, -100)
print("Cashflows", cashflows)
print("Net present value", npf.npv(0.03, cashflows))

7.15 内部收益率

内部收益率(internal rate of return)是净现值为0时的有效利率,不考虑通胀因素。 NumPy中的irr函数根据给定的现金流数据返回对应的内部收益率。

7.16 动手实践:计算内部收益率

这里我们复用7.14节中的现金流数据。使用之前教程中生成的现金流数组,调用irr函数。

import numpy_financial as npf

print("Internal rate of return", npf.irr([-100, 38, 48, 90, 17, 36]))

计算出的内部收益率如下:

Internal rate of return 0.37342022688802023

7.17 分期付款

NumPy中的pmt函数可以根据利率和期数计算贷款每期所需支付的资金。

7.18 动手实践:计算分期付款

假设你贷款100万,年利率为10%,要用30年时间还完贷款,那么每月你必须支付多少资金呢?我们来计算一下。

使用刚才提到的参数值,调用pmt函数。

import numpy_financial as npf

print("Payment", npf.pmt(0.10/12, 12 * 30, 1000000))

计算出的月供如下所示:

Payment -8775.715700887993

7.19 付款期数

NumPy中的nper函数可以计算分期付款所需的期数。所需的参数为贷款利率、固定的月供以及贷款额。

7.20 动手实践:计算付款期数

考虑贷款9000,年利率10%,每月固定还款为100的情形。

通过nper函数计算出付款期数。

import numpy_financial as npf

print( "Number of payments", npf.nper(0.10/12, -100, 9000))

计算出的付款期数如下:

Number of payments 167.04751180075235

7.21 利率

NumPy中的rate函数根据给定的付款期数、每期付款资金、现值和终值计算利率。

7.22 动手实践:计算利率

我们使用7.20节中的数值进行逆向计算,由其他参数得出利率。填入之前教程中的数值作为参数。

import numpy_financial as npf

print("Interest rate", 12 * npf.rate(167, -100, 9000, 0))

如我们所料,计算出的利率约为10%。

Interest rate 0.09997564206640422
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值