第2章 数据处理与可视化数值计算工具NumPy
文件操作
数据处理工具Pandas
Matplotlib可视化
scipy.stats模块简介
1.数值计算工具Numpy
2.文件操作
3.数据处理工具Pandas
4.Matplotlib可视化
Numpy、Pandas、Matplotlib相关资料查询也可以查阅《Python最优化算法实战》相关章节。
5.scipy.stats模块简介随机变量及分布
概率密度函数和分布律可视化
详细参考资料:
1)随机变量及分布
连续型随机变量
from scipy import stats
# 查看scipy.stats中的所有连续型随机变量:
stat_rv_continuous = [k for k, v in stats.__dict__.items() if isinstance(v, stats.rv_continuous)]
print(stat_rv_continuous)
可以看到scipy.stats中的所有连续型随机变量:
['ksone', 'kstwobign', 'norm', 'alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'burr', 'burr12', 'fisk', 'cauchy', 'chi', 'chi2', 'cosine', 'dgamma', 'dweibull', 'expon', 'exponnorm', 'exponweib', 'exponpow', 'fatiguelife', 'foldcauchy', 'f', 'foldnorm', 'weibull_min', 'weibull_max', 'frechet_r', 'frechet_l', 'genlogistic', 'genpareto', 'genexpon', 'genextreme', 'gamma', 'erlang', 'gengamma', 'genhalflogistic', 'gompertz', 'gumbel_r', 'gumbel_l', 'halfcauchy', 'halflogistic', 'halfnorm', 'hypsecant', 'gausshyper', 'invgamma', 'invgauss', 'norminvgauss', 'invweibull', 'johnsonsb', 'johnsonsu', 'laplace', 'levy', 'levy_l', 'levy_stable', 'logistic', 'loggamma', 'loglaplace', 'lognorm', 'gilbrat', 'maxwell', 'mielke', 'kappa4', 'kappa3', 'moyal', 'nakagami', 'ncx2', 'ncf', 't', 'nct', 'pareto', 'lomax', 'pearson3', 'powerlaw', 'powerlognorm', 'powernorm', 'rdist', 'rayleigh', 'reciprocal', 'rice', 'recipinvgauss', 'semicircular', 'skewnorm', 'trapz', 'triang', 'truncexpon', 'truncnorm', 'tukeylambda', 'uniform', 'vonmises', 'vonmises_line', 'wald', 'wrapcauchy', 'gennorm', 'halfgennorm', 'crystalball', 'argus']
离散型随机变量
from scipy import stats
# 查看scipy.stats中的所有离散型随机变量:
stat_rv_discrete = [k for k, v in stats.__dict__.items() if isinstance(v, stats.rv_discrete)]
print(stat_rv_discrete)
可以看到scipy.stats中的所有离散型随机变量:
['binom', 'bernoulli', 'nbinom', 'geom', 'hypergeom', 'logser', 'poisson', 'planck', 'boltzmann', 'randint', 'zipf', 'dlaplace', 'skellam', 'yulesimon']
2)概率密度函数和分布律可视化
简单示例:
分布:
gamma.pdf(x, a, loc=0, scale=1),这里
from matplotlib.pyplot import plot, legend, xlabel, ylabel, savefig, show, rc
from scipy.stats import gamma
from numpy import linspace
x = linspace(0, 15, 100)
rc('font', size=15)
# rc('text', usetex=True)
plot(x, gamma.pdf(x, 4, 0, 2), 'r*-', label="$\\alpha=4,\\beta=2$")
plot(x, gamma.pdf(x, 4, 0, 1), 'bp-', label="$\\alpha=4,\\beta=1$")
plot(x, gamma.pdf(x, 4, 0, 0.5), '.k-', label="$\\alpha=4,\\beta=0.5$")
plot(x, gamma.pdf(x, 2, 0, 0.5), '>g-', label="$\\alpha=2,\\beta=0.5$")
legend()
xlabel('$x$')
ylabel('$f(x)$')
savefig("figure2_46.png", dpi=500)
show()
正态分布:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
mu0 = [-1, 0]
s0 = [0.5, 1]
x = np.linspace(-7, 7, 100)
plt.rc('font', size=15)
# plt.rc('text', usetex=True);
plt.rc('axes', unicode_minus=False)
f, ax = plt.subplots(len(mu0), len(s0), sharex=True, sharey=True)
for i in range(2):
for j in range(2):
mu = mu0[i]
s = s0[j]
y = norm(mu, s).pdf(x)
ax[i, j].plot(x, y)
ax[i, j].plot(1, 0, label="$\\mu$ ={:3.2f}\n$\\sigma$ ={:3.2f}".format(mu, s))
ax[i, j].legend(fontsize=12)
ax[1, 1].set_xlabel('$x$')
ax[0, 0].set_ylabel('pdf($x$)')
plt.savefig('figure2_47.png');
plt.show()
随机变量X~b(n,p)(二项分布):
from scipy.stats import binom
import matplotlib.pyplot as plt
import numpy as np
n, p = 5, 0.4
x = np.arange(6)
y = binom.pmf(x, n, p)
plt.subplot(121)
plt.plot(x, y, 'ro')
plt.vlines(x, 0, y, 'k', lw=3, alpha=0.5) # vlines(x, ymin, ymax)画竖线图
# lw设置线宽度,alpha设置图的透明度
plt.subplot(122)
plt.stem(x, y, use_line_collection=True)
plt.savefig("figure2_48.png", dpi=500)
plt.show()