import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import norm
from scipy.stats import binom
from scipy.stats import poisson
from collections import Counter
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
二項分佈(Binomial Distribution)
實驗拋10個硬幣,正面向上的硬幣數。該實驗重複10000次
# 生成數據
data_binom = binom.rvs(n=10, p=0.5, size=10000)
print('平均值:', np.mean(data_binom))
print('方差:', np.var(data_binom))
print('標準差:', np.std(data_binom))
print('最大值:', np.max(data_binom))
print('最小值:', np.min(data_binom))
平均值: 5.0004
方差: 2.4891998399999995
標準差: 1.577719823035763
最大值: 10
最小值: 0
plt.figure(figsize=(10, 6))
# 開啓kde核密度估計函數
ax = sns.distplot(data_binom, bins=10, kde=False,
hist_kws={'color': 'g', 'alpha': 0.6}
)
ax.set(xlabel='Num', ylabel='Frequency')
# 添加文本
for item in Counter(data_binom).items():
plt.text(item[0]+0.5, item[1], item[1], horizontalalignment='center', verticalalignment='top', color='r', alpha=0.5, fontsize=12)
plt.title('Binomial Distribution', fontsize=18)
plt.show()
泊松分佈(Poisson distribution)
# 生成數據
data_poisson = poisson.rvs(mu=3, size=10000)
print('平均值:', np.mean(data_poisson))
print('方差:', np.var(data_poisson))
print('標準差:', np.std(data_poisson))
print('最大值:', np.max(data_poisson))
print('最小值:', np.min(data_poisson))
平均值: 2.9661
方差: 3.0265507899999995
標準差: 1.7396984767481978
最大值: 11
最小值: 0
plt.figure(figsize=(10, 6))
ax = sns.distplot(data_poisson, bins=30, kde=False,
hist_kws={'color': 'g', 'alpha': 0.6, "linewidth": 15}
)
ax.set(xlabel='Num', ylabel='Frequency')
# 添加文本
for item in Counter(data_poisson).items():
plt.text(item[0], item[1], item[1], horizontalalignment='center', verticalalignment='top', color='r', fontsize=10)
plt.title('Poisson distribution', fontsize=18)
plt.show()
正態分佈(Normal Distribution)
正態分佈
# 生成數據
data_normal = norm.rvs(size=10000, loc=6, scale=2)
print('平均值:', np.mean(data_normal))
print('方差:', np.var(data_normal))
print('標準差:', np.std(data_normal))
print('最大值:', np.max(data_normal))
print('最小值:', np.min(data_normal))
平均值: 6.030529055028889
方差: 4.091474172902061
標準差: 2.022739274573483
最大值: 13.869977821935834
最小值: -3.099450580027831
plt.figure(figsize=(10, 6))
# 開啓kde核密度估計函數
ax = sns.distplot(data_normal, bins=1000,
hist_kws={'color': 'g', 'alpha': 0.6},
kde_kws={'color': 'r', 'alpha': 0.6, "label": "KDE"},
)
ax.set(xlabel='Normal Distribution', ylabel='Frequency')
plt.title('Normal Distribution', fontsize=18)
plt.show()
標準正態分佈
# 生成數據
data_normal = norm.rvs(size=10000, loc=0, scale=1)
print('平均值:', np.mean(data_normal))
print('方差:', np.var(data_normal))
print('標準差:', np.std(data_normal))
print('最大值:', np.max(data_normal))
print('最小值:', np.min(data_normal))
平均值: -0.012006724606062854
方差: 1.012976877234747
標準差: 1.0064675241828456
最大值: 4.297347813611908
最小值: -3.895880605727567
plt.figure(figsize=(10, 6))
# 開啓kde核密度估計函數
ax = sns.distplot(data_normal, bins=1000,
hist_kws={'color': 'g', 'alpha': 0.6},
kde_kws={'color': 'r', 'alpha': 0.6, "label": "KDE"},
)
ax.set(xlabel='Normal Distribution', ylabel='Frequency')
plt.title('Normal Distribution', fontsize=18)
plt.show()
參考
- 《統計學 第7版》
- 概率分佈的python實現