離散隨機變量
import seaborn as sns
from scipy.stats import bernoulli
# 單一觀察值
# 生成數(shù)據(jù) (1000 points, possible outs: 1 or 0, probability: 50% for each)
data = bernoulli.rvs(size=1000,p=0.5)
# 繪制圖形
ax = sns.distplot(data_bern,kde=False,hist_kws={'linewidth': 10,'alpha':1})
ax.set(xlabel='Bernouli', ylabel='freq')
import matplotlib.pyplot as plt
from scipy.stats import binom
n = 20
# 實驗次數(shù)
p = 0.5
# 成功的概率
r = list(range(n + 1))
# the number of success
# pmf值
pmf_list = [binom.pmf(r_i, n, p) for r_i in r ]
# 繪圖
plt.bar(r, pmf_list)plt.show()
現(xiàn)在這次,你有一枚欺詐硬幣。你知道這個硬幣正面向上的概率是 0.7。因此,p = 0.7。
data = np.random.uniform(1, 6, 6000)
import matplotlib.pyplot as plt
from scipy.stats
import poisson
r = range(0,11)
# 呼叫次數(shù)
lambda_val = 4
# 均值
# 概率值
data = poisson.pmf(r, lambda_val)
# 繪圖
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
ax.plot(r, data, 'bo', ms=8, label='poisson')
plt.ylabel('Probability', fontsize='12')
plt.xlabel('# Calls', fontsize='12')
plt.title('Poisson Distribution', fontsize='16')
ax.vlines(r, 0, data, colors='r', lw=5, alpha=0.5)
import scipy
mean = 0
standard_deviation = 5
x_values = np. arange(-30, 30, 0.1)
y_values = scipy.stats.norm(mean, standard_deviation)
plt.plot(x_values, y_values. pdf(x_values))
import numpy as np
import statsmodels.api as sm
points = np.random.normal(0, 1, 1000)
fig = sm.qqplot(points, line ='45')
plt.show()
import matplotlib.pyplot as plt
from scipy.stats import skewnorm
def generate_skew_data(n: int, max_val: int, skewness: int):
# Skewnorm function
random = skewnorm.rvs(a = skewness,loc=max_val, size=n)
plt.hist(random,30,density=True, color = 'red', alpha=0.1)
plt.show()
generate_skew_data(1000, 100, -5) # negative (-5)-> 左偏分布
generate_skew_data(1000, 100, 5) # positive (5)-> 右偏分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
X = np.linspace(0, 6, 1500)
std = 1
mean = 0
lognorm_distribution = stats.lognorm([std], loc=mean)
lognorm_distribution_pdf = lognorm_distribution.pdf(X)
fig, ax = plt.subplots(figsize=(8, 5))
plt.plot(X, lognorm_distribution_pdf, label='μ=0, σ=1')
ax.set_xticks(np.arange(min(X), max(X)))
plt.title('Lognormal Distribution')
plt.legend()plt.show()
from scipy.stats import expon
import matplotlib.pyplot as plt
x = expon.rvs(scale=2, size=10000) # 2 calls
# 繪圖
plt.hist(x, density=True, edgecolor='black')
import matplotlib.pyplot as plt
x = np.arange(1,100.)/50.
def weib(x,n,a):
return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)
count, bins, ignored = plt.hist(np.random.weibull(5.,1000))
x = np.arange(1,100.)/50.
scale = count.max()/weib(x, 1., 5.).max()
plt.plot(x, weib(x, 1., 5.)*scale)
plt.show()
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
#Gamma distributions
x = np.linspace(0, 60, 1000)
y1 = stats.gamma.pdf(x, a=5, scale=3)
y2 = stats.gamma.pdf(x, a=2, scale=5)
y3 = stats.gamma.pdf(x, a=4, scale=2)
# plots
plt.plot(x, y1, label='shape=5, scale=3')
plt.plot(x, y2, label='shape=2, scale=5')
plt.plot(x, y3, label='shape=4, scale=2')
#add legend
plt.legend()
#display
plotplt.show()
# x軸范圍0-10,步長0.25
X = np.arange(0, 10, 0.25)
plt.subplots(figsize=(8, 5))
plt.plot(X, stats.chi2.pdf(X, df=1), label='1 dof')
plt.plot(X, stats.chi2.pdf(X, df=2), label='2 dof')
plt.plot(X, stats.chi2.pdf(X, df=3), label='3 dof')
plt.title('Chi-squared Distribution')
plt.legend()
plt.show()
我們可以從任何分布(離散或連續(xù))開始,從人群中收集樣本并記錄這些樣本的平均值。隨著我們繼續(xù)采樣,我們會注意到平均值的分布正在慢慢形成正態(tài)分布。