离散型
正态分布
1,基本操作
# 正态分布
X = norm(loc=1, scale=2)
Y = norm(loc=-1, scale=4)
print(X.mean(), X.var(), X.std()) # 1.0 4.0 2.0
print(Y.mean(), Y.var(), X.std()) # -1.0 16.0 2.0
# 绘制概率密度曲线
t = np.arange(-15, 15, 0.01)
pl.plot(t, X.pdf(t))
pl.plot(t, Y.pdf(t))
pl.show()
2,生成随机数据,使用随机数据绘图
# 生成随机数据
rvs_X = X.rvs(size=1000)
rvs_Y = Y.rvs(size=1000)
sns.distplot(rvs_X, hist=False)
sns.distplot(rvs_Y, hist=False)
pl.show()
3,分布函数和分位点
# 正态分布
Z = norm()
# 分布函数的使用
print(Z.cdf(1.24)) # 0.892512302925
print(Z.cdf(2.37) - Z.cdf(1.24)) # 0.0985936544443
# 使用上册分位数
print(Z.sf(1.24) - Z.sf(2.37)) # 0.0985936544443
print(Z.cdf(-1.24) - Z.cdf(-2.37)) # 0.0985936544443
# 分位数的使用
print(Z.ppf(0.9147)) # 1.37027844179
print(Z.isf(0.0526)) # 1.62015027473
# 也可以使用ppf,注意上侧分位数需要转化一下
print(Z.ppf(1 - 0.0526)) # 1.62015027473
# 由期望和标准差构造随机变量
X = norm(loc=3, scale=2)
print(X.isf(0.95))
-0.289707253903
4,拟合,验证中心定理
# 100 个标准均匀分布之和的分布拟合
X = stats.uniform()
# 期望0.5 方差1/12
print(X.mean(), X.var(), X.std()) # 0.5 0.0833333333333 0.288675134595
all_num = 100
rvs = X.rvs(size=1000)
for i in range(all_num - 1):
rvs += X.rvs(size=1000)
sns.distplot(rvs)
# 理论值 期望50,方差 100*1/12
print(norm.fit(rvs)) # (50.14266028918243, 2.9431258178644071)
pl.show()
5,区间检验
# 返回一个区间,区间之间的概率为所给参数
a, b = Z.interval(0.5)
print(a, b)
print(Z.cdf(b) - Z.cdf(a))
-0.674489750196 0.674489750196
0.5
指数分布
1,基本操作
# 构造标准指数分布
X = expon()
print(X.mean(), X.var(), X.std()) # 1.0 1.0 1.0
t = np.arange(-5, 5, 0.01)
pl.plot(t, X.pdf(t))
# 构造参数不同的指数分布
Y = expon(scale=4)
print(Y.mean(), Y.var(), Y.std()) # 4.0 16.0 4.0
Y = expon(scale=16)
print(Y.mean(), Y.var(), Y.std()) # 16.0 256.0 16.0
pl.show()
# loc 表示偏移,scale 表示缩放比例
#distribution use the loc and scale parameters. Specifically, expon.pdf(x, loc, scale) is
# identically equivalent to expon.pdf(y) / scale with y = (x - loc) / scale.
Z = expon(loc=2, scale=2)
print(Z.mean(), Z.var(), Z.std())
pl.plot(t, Z.pdf(t))
pl.show()
标准均匀分布
1,简单使用
# 标准均匀分布
X = stats.uniform()
print(X.mean(), X.var(), X.std()) # 0.5 0.0833333333333 0.288675134595
t = np.arange(-2, 2, 0.01)
pl.plot(t, X.pdf(t))
pl.show()
# This distribution is constant between loc and loc + scale.
X = stats.uniform(loc=2, scale=4)
print(X.mean(), X.var(), X.std()) # 4.0 1.33333333333 1.15470053838
t = np.arange(1, 7, 0.01)
pl.plot(t, X.pdf(t))
pl.show()
标准图像
离散型
贝努利分布,两点分布
# 0--0.5 1--0.5
X = stats.bernoulli(0.5)
print(X.mean(), X.var(), X.std()) # 0.5 0.25 0.5
rvs = X.rvs(size=10) # [1 1 1 1 1 0 1 1 0 0]
print(rvs)
X = stats.bernoulli(0.9)
print(X.mean(), X.var(), X.std()) # 0.9 0.09 0.3
rvs = X.rvs(size=10) # [1 1 0 1 1 1 1 1 1 1]
print(rvs)
二项分布
# 二项分布
X = stats.binom(10, 0.5)
print(X.mean(), X.var(), X.std()) # 0.5 0.25 0.5
rvs = X.rvs(size=1000) # [1 1 1 1 1 0 1 1 0 0]
sns.distplot(rvs, rug=True, kde=True)
pl.show()
几何分布
# 几何分布,参数是该事件发生的概率
X = stats.geom(0.1)
print(X.mean(), X.var(), X.std()) #10.0 90.0 9.48683298051
rvs = X.rvs(size=1000)
sns.distplot(rvs)
pl.show()
print(rvs)
超几何分布
# 超几何分布,共N件,次品m件,取n件,有k件次品的概率
N = 20
m = 7
n = 12
X = stats.hypergeom(N, m, n)
print(X.mean(), X.var(), X.std()) # 2.0 2.0 1.41421356237
for i in range(n + 1):
print(X.pmf(i))
泊松分布
# 泊松分布
X = stats.poisson(2)
print(X.mean(), X.var(), X.std()) # 2.0 2.0 1.41421356237
rvs = X.rvs(size=100)
sns.distplot(rvs)
pl.show()
其他分布
卡方分布
X = stats.chi2(10)
print(X.mean(), X.var(), X.std()) # 10.0 20.0 4.472135955
t = np.arange(0, 40, 0.01)
pl.plot(t, X.pdf(t))
pl.show()
t分布
X = stats.t(10)
print(X.mean(), X.var(), X.std()) # 10.0 20.0 4.472135955
t = np.arange(-10, 10, 0.01)
pl.plot(t, X.pdf(t))
pl.show()
f分布
X = stats.f(10,10)
print(X.mean(), X.var(), X.std()) #1.25 0.9375 0.968245836552
t = np.arange(-10, 10, 0.01)
pl.plot(t, X.pdf(t))
pl.show()