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实现