一、概率分布

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)信息茧房