#Python利用蒙特卡洛模拟生成符合正态分布特征参数的的1000组随机数并导出为excel表#
具体要求:
1.利用python生成期望为0,平均值为20,标准差为6的“对数正态分布”的1000组随机数M,以及生成期望为0,平均值为25,标准差为5的“正态分布”的1000组随机数N(注意一个是对数正态分布,一个是正态分布)
2.对结果M、N分别进行可视化
3.将生成的随机数M和N以excel表的形式保存至D盘目录下。
从上面的结果来看,四个方法得到的结果都相差无几,只是精度的问题,比较四个方式的操作难度,最难的肯定是用Excel自己推算大M法,要很细心才能得到正确的结果,用Excel自带的线性规划求解包做起来非常简单,一步到位。python两者肯定是使用自带的库的代码量要少一点,但是不用库更有利于自己理解算法。
首先,我们可以使用numpy
库来生成随机数,并使用matplotlib
库进行可视化。然后,我们可以使用pandas
库将生成的随机数保存为Excel表格。
下面是具体实现步骤:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成随机数M
mean_m = 20
std_m = 6
size_m = 1000
random_m = np.random.lognormal(mean=np.log(mean_m), sigma=std_m, size=size_m)
# 生成随机数N
mean_n = 25
std_n = 5
size_n = 1000
random_n = np.random.normal(loc=mean_n, scale=std_n, size=size_n)
# 可视化M
plt.hist(random_m, bins=50, density=True, alpha=0.75, color='b', label='M')
plt.xlabel('Value')
plt.ylabel('Probability')
plt.title('Distribution of M')
plt.legend()
plt.show()
# 可视化N
plt.hist(random_n, bins=50, density=True, alpha=0.75, color='r', label='N')
plt.xlabel('Value')
plt.ylabel('Probability')
plt.title('Distribution of N')
plt.legend()
plt.show()
data = {'M': random_m, 'N': random_n}
df = pd.DataFrame(data)
df.to_excel('D:/random_numbers.xlsx', index=False)
以上代码将生成的随机数保存为名为random_numbers.xlsx
的Excel表格,并将该表格保存至D盘目录下。
请注意,需要事先安装numpy
、pandas
和matplotlib
库,可以使用以下命令进行安装:
pip install numpy pandas matplotlib
如果你没有权限在D盘目录下保存文件,可以将保存路径修改为可写的其他目录。