python hist函数_用Python实现蒙特卡洛模拟

Python作为“网红”的数据分析工具,正引起越来越多人的兴趣。上篇介绍了蒙特卡洛模型以及数理统计的基础知识,并使用EXCEL实现。但相比Python而言,EXCEL可处理的数据量有限,而且带有单元格公式后会严重影响表格的计算速度。本篇介绍如何用Python实现同样的效果,希望对那些对Python感兴趣的朋友有所帮助。

Python简介

不重复说,本公众号也有介绍Python的相关文章,请参考:如何学习一项技能-从我自己自学Python谈起(2)

c4c4c9bfb098fbd80dd98250e8edc382.png

引用Numpy库

NumPy库是Python的一种开源的数值计算扩展,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。NASA用其来处理一些运算。

蒙特卡洛模型用到的Numpy句法:

1:首先引用Numpy库,起个名字叫np

import numpy as np

2:生成符合正太分布的0~99之间的随机整数 ,total_count代表生成随机数的个数,也就是要模拟多少次

np.random.randint(0,99,Total_Count)

3:用Numpy自带函数计算相关指标 (NPV_Num是一个数组)

Max_Num=np.max(NPV_Num)
Min_Num=np.min(NPV_Num)
Mean_Num=round(np.mean(NPV_Num),0)
Std_Num=int(np.std(NPV_Num, ddof = 1))

用判断语句给相关参数赋值

以研发费为例,Python的句法实际上就是把EXCEL公式“翻译”了一遍。Index_YFF是一个数组,使用.append方法增加数组值。

Index_YFF=[]
rnd_nums=np.random.randint(0,99,Total_Count)
rnd_num rnd_nums:
    rnd_num<=19:
        Index_YFF.append(400)
    rnd_num>19 rnd_num<=69:
        Index_YFF.append(500)
    rnd_num>69:
        Index_YFF.append(600)

用Print语句输出计算结果

Print语句是Python常用的语句,用来显示结果值。

print("样本数:",Total_Count)
print("最大值:",Max_Num)
print("最小值:",Min_Num)
print("平均值:",Mean_Num)
print("标准差:",Std_Num)

用matplotlib库画图

Matplotlib 是一个 Python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

counts, bins, path = plt.hist(NPV_Num,bins=Std_Num,color='green',density=True)
plt.title("Normal distribution")
plt.show()

53ea2353899209dfd39bae91d9c9df5e.png

写一个可以计算年金现值的函数

编程就像搭积木,主程序一般是描述程序运行的顺序和逻辑,而一些用来传递参数进行处理的代码,可以放到自定义函数中。

def pv_f(c,r,n,when=1):    
    c=np.array(c)
    r=np.array(r)
    if when==1:
        n=np.arange(1,n+1)
    else:
        n=np.arange(0,n)
    pv=c/(1+r)**n
    return pv.sum()

至此,用Python模拟蒙特卡洛的方法和代码介绍完了。和EXCEL比较起来,Python的方法更容易扩展,运算速度更快,大有用武之地!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值