from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(3, 1)
params = [(10, 0.25), (10, 0.5), (10, 0.8)]
x = range(0, 11)
for i in range(len(params)):
binom_rv = binom(n=params[i][0], p=params[i][1])
ax[i].set_title('n={},p={}'.format(params[i][0], params[i][1]))
ax[i].plot(x, binom_rv.pmf(x), 'bo', ms=8)
ax[i].vlines(x, 0, binom_rv.pmf(x), colors='b', lw=3)
ax[i].set_xlim(0, 10)
ax[i].set_ylim(0, 0.35)
ax[i].set_xticks(x)
ax[i].set_yticks([0, 0.1, 0.2, 0.3])
plt.show()
# plt.savefig("High resoltion.png",dpi=300)
from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(3, 1)
params = [(10, 0.25), (10, 0.5), (10, 0.8)]
x = range(0, 11)
for i in range(len(params)):
binom_rv = binom(n=params[i][0], p=params[i][1])
rvs = binom_rv.rvs(size=100000)
ax[i].hist(rvs, bins=11, density=True, stacked=True)
ax[i].set_title('n={},p={}'.format(params[i][0], params[i][1]))
ax[i].set_xlim(0, 10)
ax[i].set_ylim(0, 0.4)
ax[i].set_xticks(x)
print('rvs{}:{}'.format(i, rvs))
plt.show()
rvs0:[2 2 3 ... 3 3 3] rvs1:[5 6 5 ... 4 5 4] rvs2:[ 7 8 8 ... 7 10 8]
import numpy as np
from scipy.stats import binom
binom_rv = binom(n=10, p=0.25)
mean, var, skew, kurt = binom_rv.stats(moments='mvsk')
binom_rvs = binom_rv.rvs(size=100000)
E_sim = np.mean(binom_rvs)
S_sim = np.std(binom_rvs)
V_sim = S_sim * S_sim
print('mean={},var={}'.format(mean,var))
print('E_sim={},V_sim={}'.format(E_sim,V_sim))
print('E=np={},V=np(1-p)={}'.format(10 * 0.25,10 * 0.25 * 0.75))
mean=2.5,var=1.875 E_sim=2.50135,V_sim=1.8569581774999997 E=np=2.5,V=np(1-p)=1.875
第 4 行-第 5 行: 是用函数包中的方法计算的分布的各个理论统计值; 第 7 行-第 10 行: 从采样试验中得到的样本数据计算出来的均值和方差; 第 14 行: 通过公式直接计算出来的理论值。
# 几何分布
from scipy.stats import geom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(2, 1)
params = [0.5, 0.25]
x = range(1, 11)
for i in range(len(params)):
geom_rv = geom(p=params[i])
ax[i].set_title('p={}'.format(params[i]))
ax[i].plot(x, geom_rv.pmf(x), 'bo', ms=8)
ax[i].vlines(x, 0, geom_rv.pmf(x), colors='b', lw=5)
ax[i].set_xlim(0, 10)
ax[i].set_ylim(0, 0.6)
ax[i].set_xticks(x)
ax[i].set_yticks([0, 0.1, 0.2, 0.3, 0.4, 0.5])
plt.show()
# 几何分布,采样实验
from scipy.stats import geom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
x = range(1, 21)
geom_rv = geom(p=0.5)
geom_rvs = geom_rv.rvs(size=100000)
plt.hist(geom_rvs, bins=20, density=True, stacked=True)
plt.gca().axes.set_xticks(range(1,21))
mean, var, skew, kurt = geom_rv.stats(moments='mvsk')
print('mean={},var={}'.format(mean,var))
plt.show()
mean=2.0,var=2.0
# 泊松分布
from scipy.stats import poisson
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(2, 1)
x = range(0, 20)
params = [10, 2]
for i in range(len(params)):
poisson_rv = poisson(mu=params[i])
mean, var, skew, kurt = poisson_rv.stats(moments='mvsk')
ax[i].plot(x, poisson_rv.pmf(x), 'bo', ms=8)
ax[i].vlines(x, 0, poisson_rv.pmf(x), colors='b', lw=5)
ax[i].set_title('`$\\lambda$`={}'.format(params[i]))
ax[i].set_xticks(x)
print('lambda={},E[X]={},V[X]={}'.format(params[i], mean, var))
plt.show()
lambda=10,E[X]=10.0,V[X]=10.0 lambda=2,E[X]=2.0,V[X]=2.0
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
lambda_ = 2
data = poisson.rvs(mu=lambda_, size=100000)
plt.figure()
plt.hist(data, density=True, stacked=True)
plt.gca().axes.set_xticks(range(0, 11))
print('mean=', np.mean(data))
print('var=', np.square(np.std(data)))
plt.show()
mean= 2.00375 var= 1.9988159375
# 正态分布
from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
fig, ax = plt.subplots(1, 1)
norm_0 = norm(loc=0, scale=1)
norm_1 = norm(loc=1, scale=2)
x = np.linspace(-10, 10, 1000)
ax.plot(x, norm_0.pdf(x), color='red', lw=5, alpha=0.6, label='loc=0, scale=1')
ax.plot(x, norm_1.pdf(x), color='blue', lw=5, alpha=0.6, label='loc=1, scale=2')
ax.legend(loc='best', frameon=False)
plt.show()
from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
norm_rv = norm(loc=2, scale=2)
norm_rvs = norm_rv.rvs(size=100000)
x = np.linspace(-10, 10, 1000)
plt.plot(x, norm_rv.pdf(x), 'r', lw=5, alpha=0.6, label="`$\\mu$=2,$\\sigma=2$`")
plt.hist(norm_rvs, density=True, stacked=True, bins=50, alpha=0.6, edgecolor='k')
plt.legend()
plt.show()
# 指数分布
from scipy.stats import expon
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
x = np.linspace(0, 10, 1000)
expon_rv_0 = expon()
plt.plot(x, expon_rv_0.pdf(x), color='r', lw=5, alpha=0.6, label='`$\\lambda$`=1')
expon_rv_1 = expon(scale=2)
plt.plot(x, expon_rv_1.pdf(x), color='b', lw=5, alpha=0.6, label='`$\\lambda$`=0.5')
plt.legend(loc='best', frameon=False)
plt.show()
from scipy.stats import expon
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
x = np.linspace(0, 10, 1000)
expon_rv = expon()
expon_rvs = expon_rv.rvs(100000)
plt.plot(x, expon_rv.pdf(x), color='r', lw=5, alpha=0.6, label='`$\\lambda$`=1')
plt.hist(expon_rvs, color='b', density=True, stacked=True, alpha=0.6, bins=50, edgecolor='k')
plt.legend(loc='best', frameon=False)
plt.show()
# 均匀分布
from scipy.stats import uniform
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
x = np.linspace(-1, 3.5, 1000)
uniform_rv_0 = uniform()
uniform_rv_1 = uniform(loc=0.5, scale=2)
plt.plot(x, uniform_rv_0.pdf(x), color='r', lw=5, alpha=0.6, label='[0,1]')
plt.plot(x, uniform_rv_1.pdf(x), color='b', lw=5, alpha=0.6, label='[0.5,2.5]')
plt.legend(loc='best', frameon=False)
plt.show()
from scipy.stats import uniform
import matplotlib.pyplot as plt
import numpy as np
import seaborn
seaborn.set()
x = np.linspace(0, 3.5, 1000)
uniform_rv = uniform(1, 2)
uniform_rvs = uniform_rv.rvs(100000)
plt.plot(x, uniform_rv.pdf(x), 'r-', lw=5, alpha=0.6, label='[1,3]')
plt.hist(uniform_rvs, color='b', density=True, stacked=True, alpha=0.6, bins=50, edgecolor='k')
plt.legend(loc='best', frameon=False)
plt.show()