一、概率分布
1、随机变量
随机变量是指一个量化随机事件的函数,它将随机事件的每一个可能出现的试验结果赋予了一个数字。
随机变量又分为离散随机变量和连续随机变量。
2、概率分布
概率分布=随机变量+概率+分布
在python中的实现:科学计算包scipy的stats模块。
3、概率分布概率分布分为两个类型,离散概率分布和连续概率分布。
离散随机变量的概率计算公式要通过概率质量函数(PMF)来计算,在统计图中的形状也就是离散概率分布。
连续随机变量的概率计算公式要通过概率密度函数(PDF)来计算,在统计图中的形状也就是连续概率分布。
4、离散概率分布(概率质量函数PMF)
1)伯努利分布(Bernoulli Distribution)
伯努利的官方使用文档链接如下:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.bernoulli.html#scipy.stats.bernoullidocs.scipy.orgSciPy v1.4.1 Reference GuideSciPy v1.4.1 Reference
如何用python代码实现:
#导入数据库和科学计算包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats#先使用arange生成一个随机数组,然后定义随机变量:抛一次硬币,成功为正面朝上,记为1,失败为反面朝上,记为0.
X=np.arange(0,2,1)
X
array([0, 1])
#第二步:求对应分布的概率,概率质量函数(RMF),它返回一个列表,列表中每个元素表示随机变量对应的概率值。
p=0.5 #正面朝上的概率为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) #plt.vlines()用来绘制竖直线,vline(x坐标值, y坐标最小值, y坐标值最大值)
plt.xlabel('随机变量:抛硬币一次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f' % p)
plt.show()2)二项分布(Binomial Distribution)
如何检验概率分布为二项分布
A.做某件的次数是固定的,次数用n来表示,n次某事件是相互独立的。
B.每一次事件都有两个可能的结果(成功或者失败)。
C.每一次成功的概率相等,成功的概率用p表示。
D.想知道成功k次的概率是多少。
二项分布的官方使用文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.binom.html#scipy.stats.binomdocs.scipy.orgSciPy v1.4.1 Reference GuideSciPy v1.4.1 Reference
如何用python代码实现:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第一步:定义一个随机变量:抛硬币五次,其中正面朝上的次数
n=5 #做某件事的次数
p=0.5 #做该件事情成功的概率
X=np.arange(0,n+1,1)
X
array([0, 1, 2, 3, 4, 5])
#第二步:求对应分布的概率,它返回一个列表,列表中每个元素表示随机变量中对应值的概率。
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)
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
plt.xlabel('随机变量:抛硬币正面朝上次数')
plt.ylabel('概率')
plt.show()
3)几何分布(Geometric Distribution)
如何检验是几何分布:
A.做某件事的次数是固定的,次数用n表示,n次某件事是相互独立的。
B.每一次事件都有两个可能的结果(成功或者失败)
C.每一次成功的概率都相等,成功的概率用p表示
D.想知道第k次做某件事情,才取得第一次成功的概率是多少
几何分布官方使用文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.geom.html#scipy.stats.geomdocs.scipy.orgSciPy v1.4.1 Reference GuideSciPy v1.4.1 Reference
如何用python代码实现:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第一步:定义一个随机变量:首次表白成功的次数,可能是1,2,3次。#第k次做某件事情,才取到第1次成功,这里我们想知道5次表白成功的概率。
k=5
p=0.6 #做某件事情成功的概率,这里假设每次表白成功概率都是60%
X=np.arange(1,k+1,1)
X
array([1, 2, 3, 4, 5])
#第二步:#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示表白第1次才成功的概率,表白第2次才成功的概率,表白第3次才成功的概率,表白第4次才成功的概率,表白第5次才成功的概率
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)
plt.title('几何分布:p=%.2f' % p)
plt.xlabel('随机变量:表白第k次才首次成功')
plt.ylabel('概率')
plt.show()
4)泊松分布(Poisson Distribution)
如何验证是泊松分布:
A.事件是独立事件
B.在任意相同的时间范围内,事件发生的概率相同
C.你想知道某个时间范围内,发生某件事件k次的概率是多少
泊松分布官方文档:SciPy v1.4.1 Reference
在python中如何用代码实现:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第一步:定义一个随机变量:已知某个路口发生事故的比例是每天2次,那么在此处一天内发生k次事故的概率是多少
mu=2 #平均值:每天发生2次
k=4 #次数,现在想知道此处每天发生4次事故的概率是多少,包含0,1,2,3,4次事故
X=np.arange(0,k+1,1)
X
array([0, 1, 2, 3, 4])
#第二步:#求对应分布的概率:概率质量函数 (PMF),它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示发生0,1,2,3,4次事故的概率
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)
plt.title('泊松分布:平均值mu=%i' % mu)
plt.xlabel('随机变量:某路口发生k次事故')
plt.ylabel('概率')
plt.show()
5、连续概率分布(概率密度函数PDF)
分别是正态分布和幂律分布
正态分布文档:SciPy v1.4.1 Reference
在python中如何用代码实现:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第1步,定义随机变量:
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])
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,绘图
plt.plot(X,y)
plt.xlabel('随机变量:x')
plt.ylabel('概率:y')
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))
plt.grid()
plt.show()
幂律分布(Power-law Distribution)
在python中如何用代码实现:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第1步,定义随机变量:
a=6
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])
#第2步,概率密度函数(PDF)
pList=stats.powerlaw.pdf(X,a)
#第三步,绘图
plt.plot(X,pList)
plt.title('幂律分布:a=%i' % a)
plt.xlabel('随机变量:x')
plt.ylabel('概率')
plt.show()
二、总体与样本
1、总体和样本的概念:总体:研究对象的整个群体
样本:从总体中选取的一部分,用于代表总体
样本的数量是你有多少个样本,样本大小是每个样本里面有多少个数据。将样本平均值的分布可视化,叫做抽样分布。
在python中如何用代码实现:
随机抽取中奖者
#抽奖:生成多个随机数。应用案例:从395个用户中随机抽取10个人作为中奖者。
import random
for i in range(10):
userid=random.randint(0,395)
print('第%s位获奖用户id是%s' % (i,userid) )
第 0 位获奖用户id是 347
第 1 位获奖用户id是 162
第 2 位获奖用户id是 219
第 3 位获奖用户id是 329
第 4 位获奖用户id是 85
第 5 位获奖用户id是 27
第 6 位获奖用户id是 55
第 7 位获奖用户id是 225
第 8 位获奖用户id是 48
第 9 位获奖用户id是 157
pandas数据框(DataFrame)的抽样方法
import numpy as np
import pandas as pd
#arange产生一个含有5*4个元素的一维数组,reshape:将数组转换成5行4列的二维数组
df=pd.DataFrame(np.arange(5*4).reshape((5,4)))
df
#随机选择一个n行的子集
sample1=df.sample(n=2)
sample1
2.中心极限定理
1)样本平均值约等于总体平均值
2)不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且呈正态分布。
3.如何用样本估计总体
1)样本的平均值约等于总体平均值
2)总体标准差估计
4.如何避免偏见?
1)样本偏差
2)幸存者偏差
3)概率偏见
4)信息茧房
















