随机变量+抽样统计基础思维导图总结
概率分布和抽样的python实现
伯努利分布 Bernoulli Distribution
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#定义随机变量:1次抛硬币
X = np.arange(0,2,1) #成功指正面朝上记录为1,失败指反面朝上记录为0
X
array([0, 1])
#求对应分布的概率:概率质量函数 (PMF)
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
pList
array([0.5, 0.5])
#概率分布
plt.plot(X, pList, marker='o', linestyle='none')
plt.vlines(X,0,pList)
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布: p=%.2f' % p)
#显示图形
plt.show()
二项分布(Binomial Distribution)
#定义随机变量:5次抛硬币,正面朝上的次数
n = 5 #次数
p =0.5 #正面向上的概率
X = np.arange(0,n+1)
X
array([0, 1, 2, 3, 4, 5])
#求对应分布的概率:概率质量函数 (PMF)
pList = stats.binom.pmf(X, n, p)
pList
array([0.03125, 0.15625, 0.3125 , 0.3125 , 0.15625, 0.03125])
#概率分布
plt.plot(X, pList, marker='o', linestyle='none')
plt.vlines(X,0,pList)
#x轴标题
plt.xlabel('随机变量:抛硬币5次')
#y轴标题
plt.ylabel('概率')
#标题
plt.title('二项分布: p=%.2f' % p)
#显示图形
plt.show()
几何分布(Geometric Distribution)
#第k次做某件事情,才取到第1次成功
#第5次表白成功的概率
k = 5
# 做某件事情成功的概率,这每次表白成功概率都是60%
p = 0.6
X = np.arange(1,k+1)
X
array([1, 2, 3, 4, 5])
#求对应分布的概率:概率质量函数 (PMF)
pList = stats.geom.pmf(X, p)
pList
array([0.6 , 0.24 , 0.096 , 0.0384 , 0.01536])
#概率分布
plt.plot(X, pList, marker='o', linestyle='none')
plt.vlines(X,0,pList)
#x轴标题
plt.xlabel('随机变量:表白第k次才首次成功')
#y轴标题
plt.ylabel('概率')
#标题
plt.title('几何分布: p=%.2f' % p)
#显示图形
plt.show()
泊松分布 Poisson Distribution
#某路口发生事故的比率是每天2次,一天发生k次事故的概率是多少
mu = 2 #平均2次
k = 4 #发生4次
X = np.arange(0,k+1)
X
array([0, 1, 2, 3, 4])
#求对应分布的概率:概率质量函数 (PMF)
pList = stats.poisson.pmf(X, mu)
pList
array([0.13533528, 0.27067057, 0.27067057, 0.18044704, 0.09022352])
#概率分布
plt.plot(X, pList, marker='o', linestyle='none')
plt.vlines(X, 0, pList)
#x轴标题
plt.xlabel('随机变量:某路口发生k次事故')
#y轴标题
plt.ylabel('概率')
#标题
plt.title('泊松分布: 平均值=%.2f' % mu)
#显示图形
plt.show()
正态分布(Normal Distribution)
#定义随机变量:
mu = 0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5, 0.1)
X
array([-5.00000000e+00, -4.90000000e+00, -4.80000000e+00, -4.70000000e+00,
-4.60000000e+00, -4.50000000e+00, -4.40000000e+00, -4.30000000e+00,
-4.20000000e+00, -4.10000000e+00, -4.00000000e+00, -3.90000000e+00,
-3.80000000e+00, -3.70000000e+00, -3.60000000e+00, -3.50000000e+00,
-3.40000000e+00, -3.30000000e+00, -3.20000000e+00, -3.10000000e+00,
-3.00000000e+00, -2.90000000e+00, -2.80000000e+00, -2.70000000e+00,
-2.60000000e+00, -2.50000000e+00, -2.40000000e+00, -2.30000000e+00,
-2.20000000e+00, -2.10000000e+00, -2.00000000e+00, -1.90000000e+00,
-1.80000000e+00, -1.70000000e+00, -1.60000000e+00, -1.50000000e+00,
-1.40000000e+00, -1.30000000e+00, -1.20000000e+00, -1.10000000e+00,
-1.00000000e+00, -9.00000000e-01, -8.00000000e-01, -7.00000000e-01,
-6.00000000e-01, -5.00000000e-01, -4.00000000e-01, -3.00000000e-01,
-2.00000000e-01, -1.00000000e-01, -1.77635684e-14, 1.00000000e-01,
2.00000000e-01, 3.00000000e-01, 4.00000000e-01, 5.00000000e-01,
6.00000000e-01, 7.00000000e-01, 8.00000000e-01, 9.00000000e-01,
1.00000000e+00, 1.10000000e+00, 1.20000000e+00, 1.30000000e+00,
1.40000000e+00, 1.50000000e+00, 1.60000000e+00, 1.70000000e+00,
1.80000000e+00, 1.90000000e+00, 2.00000000e+00, 2.10000000e+00,
2.20000000e+00, 2.30000000e+00, 2.40000000e+00, 2.50000000e+00,
2.60000000e+00, 2.70000000e+00, 2.80000000e+00, 2.90000000e+00,
3.00000000e+00, 3.10000000e+00, 3.20000000e+00, 3.30000000e+00,
3.40000000e+00, 3.50000000e+00, 3.60000000e+00, 3.70000000e+00,
3.80000000e+00, 3.90000000e+00, 4.00000000e+00, 4.10000000e+00,
4.20000000e+00, 4.30000000e+00, 4.40000000e+00, 4.50000000e+00,
4.60000000e+00, 4.70000000e+00, 4.80000000e+00, 4.90000000e+00])
#概率密度函数(PDF)
y = stats.norm.pdf(X, mu, sigma)
#概率分布
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))
#网格
plt.grid()
#显示图形
plt.show()
幂律分布 Power-Law
#定义随机变量:
a = 5
X = np.arange(0,1,0.01)
X
array([0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 ,
0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2 , 0.21,
0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32,
0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43,
0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53, 0.54,
0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62, 0.63, 0.64, 0.65,
0.66, 0.67, 0.68, 0.69, 0.7 , 0.71, 0.72, 0.73, 0.74, 0.75, 0.76,
0.77, 0.78, 0.79, 0.8 , 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87,
0.88, 0.89, 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
0.99])
#概率密度函数(PDF)
y = stats.powerlaw.pdf(X, a)
#概率分布
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('泊松分布: a=%.2f' % a)
#网格
plt.grid()
#显示图形
plt.show()
随机抽样: numpy实现
#生成0-9之间的随机数
a = np.random.randint(0,10)
a
7
#抽奖:生成多个随机数
#从395个用户中 随机抽取10个人
for i in range(10):
userId = np.random.randint(0, 396)
print('第%s位获奖用户的id是%s' % (i+1, userId))
第 1 位获奖用户的id是 306
第 2 位获奖用户的id是 254
第 3 位获奖用户的id是 274
第 4 位获奖用户的id是 387
第 5 位获奖用户的id是 334
第 6 位获奖用户的id是 261
第 7 位获奖用户的id是 156
第 8 位获奖用户的id是 45
第 9 位获奖用户的id是 217
第 10 位获奖用户的id是 335
随机抽样:Pandas实现
#创建5行4列的dataframe
import pandas as pd
df = pd.DataFrame(np.arange(5*4).reshape(5,4))
df
#随机选择一个n行的子集
sample1 = df.sample(n=3)
sample1
random.randint和numpy.random.randint 的区别random.randint(a, b) 返回闭区间[a, b] 范围内的整数值
numpy.random.randint(a, b) 返回开区间 [a, b)范围内的整数值
小知识:
当 n很大 且p 很小时,可以用泊松分布近似替代二项分布
eg: n=50, p=0.1
正态概率计算确定分布与范围:确定均值和标准差,以及所求范围
使其标准化:标准分 z = (x-µ)/∂^2
查找概率:查z-score表找到对应概率
查表流程z-score表p(Z<z)的面积
p (Z > z)解法:
p (Z > z) = 1 - p (Z < z)
即将Z < z的面积从总概率中去除p (Z &amp;gt; z) = 1 - p (Z &amp;lt; z)
p (a < Z < b)解法:
p (a < Z < b) = p (Z < b) - p (Z > a)
即算出p (Z < b),将p (Z < b)的面积从其中去除p (a &amp;lt; Z &amp;lt; b) = p (Z &amp;lt; b) - p (Z &amp;gt; a)
统计知识真的是常看常新,如果第一次不懂也没关系,只要克服畏难情绪,多看几遍总能理解的。