统计学入门级:常见概率分布 python绘制分布图 如果随机变量X的所有取值都可以逐个列举出来 , 则称X为离散型随机变量 。相应的概率分布有二项分布,泊松分布 。
如果随机变量X的所有取值无法逐个列举出来,而是取数轴上某一区间内的任一点,则称X为连续型随机变量 。相应的概率分布有正态分布 , 均匀分布 , 指数分布,伽马分布,偏态分布 , 卡方分布,beta分布等 。(真多分布,好恐怖~~)
在离散型随机变量X的一切可能值中 , 各可能值与其对应概率的乘积之和称为该随机变量X的期望值,记作E(X)。比如有随机变量,取值依次为:2 , 2 , 2 , 4,5 。求其平均值:(2 2 2 4 5)/5 = 3 。
期望值也就是该随机变量总体的均值 。推导过程如下:
= (2 2 2 4 5)/5
= 1/5 2 34/55/5
= 3/5 21/5 41/5 5
= 0.6 20.2 40.2 5
= 60% 220% 420%*5
= 1.20.81
= 3
倒数第三步可以解释为值为2的数字出现的概率为60% , 4的概率为20% , 5的概率为20% 。所以E(X) = 60% 220% 420%*5 = μ = 3 。
0-1分布(两点分布),它的随机变量的取值为1或0 。即离散型随机变量X的概率分布为:P{X=0} = 1-p, P{X=1} = p,即:
则称随机变量X服从参数为p的0-1分布,记作X~B(1,p) 。
在生活中有很多例子服从两点分布,比如投资是否中标,新生婴儿是男孩还是女孩,检查产品是否合格等等 。
大家非常熟悉的抛硬币试验对应的分布就是二项分布 。抛硬币试验要么出现正面,要么就是反面,只包含这两个结果 。出现正面的次数是一个随机变量,这种随机变量所服从的概率分布通常称为 二项分布。
像抛硬币这类试验所具有的共同性质总结如下:(以抛硬币为例)
通常称具有上述特征的n次重复独立试验为n重伯努利试验 。简称伯努利试验或伯努利试验概型 。特别地 , 当试验次数为1时,二项分布服从0-1分布(两点分布) 。
举个栗子:抛3次均匀的硬币,求结果出现有2个正面的概率。
已知p = 0.5 (出现正面的概率),n = 3 ,k = 2
所以抛3次均匀的硬币,求结果出现有2个正面的概率为3/8 。
二项分布的期望值和方差 分别为:
泊松分布是用来描述在一 指定时间范围内或在指定的面积或体积之内某一事件出现的次数的分布。生活中服从泊松分布的例子比如有每天房产中介接待的客户数,某微博每月出现服务器瘫痪的次数等等 。泊松分布的公式为 :
其中 λ 为给定的时间间隔内事件的平均数,λ = np 。e为一个数学常数,一个无限不循环小数,其值约为2.71828 。
泊松分布的期望值和方差 分别为:
使用Python绘制泊松分布的概率分布图:
因为连续型随机变量可以取某一区间或整个实数轴上的任意一个值,所以通常用一个函数f(x)来表示连续型随机变量 , 而f(x)就称为 概率密度函数。
概率密度函数f(x)具有如下性质 :
需要注意的是,f(x)不是一个概率,即f(x)≠ P(X = x)。在连续分布的情况下,随机变量X在a与b之间的概率可以写成:
正态分布(或高斯分布)是连续型随机变量的最重要也是最常见的分布,比如学生的考试成绩就呈现出正态分布的特征 , 大部分成绩集中在某个范围(比如60-80分),很小一部分往两端倾斜(比如50分以下和90多分以上) 。还有人的身高等等 。
正态分布的定义 :
如果随机变量X的概率密度为( -∞x ∞):
则称X服从正态分布,记作X~N(μ,σ2) 。其中-∞μ ∞,σ0,μ为随机变量X的均值,σ为随机变量X的标准差 。正态分布的分布函数
正态分布的图形特点 :
使用Python绘制正态分布的概率分布图:
正态分布有一个3σ准则 , 即数值分布在(μ-σ,μ σ)中的概率为0.6827,分布在(μ-2σ,μ 2σ)中的概率为0.9545,分布在(μ-3σ,μ 3σ)中的概率为0.9973,也就是说大部分数值是分布在(μ-3σ,μ 3σ)区间内,超出这个范围的可能性很小很?。稣疾坏?.3%,属于极个别的小概率事件,所以3σ准则可以用来检测异常值 。
当μ=0,σ=1时,有
此时的正态分布N(0,1) 称为标准正态分布 。因为μ,σ都是确定的取值,所以其对应的概率密度曲线是一条 形态固定 的曲线 。
对标准正态分布,通常用φ(x)表示概率密度函数 , 用Φ(x)表示分布函数:
假设有一次物理考试特别难,满分100分,全班只有大概20个人及格 。与此同时语文考试很简单 , 全班绝大部分都考了90分以上 。小明的物理和语文分别考了60分和80分,他回家后告诉家长 , 这时家长能仅仅从两科科目的分值直接判断出这次小明的语文成绩要比物理好很多吗?如果不能,应该如何判断呢?此时Z-score就派上用场了 。Z-Score的计算定义 :
即 将随机变量X先减去总体样本均值 , 再除以总体样本标准差就得到标准分数啦 。如果X低于平均值,则Z为负数 , 反之为正数。通过计算标准分数,可以将任何一个一般的正态分布转化为标准正态分布 。
小明家长从老师那得知物理的全班平均成绩为40分 , 标准差为10,而语文的平均成绩为92分,标准差为4 。分别计算两科成绩的标准分数:
物理:标准分数 = (60-40)/10 = 2
语文:标准分数 = (85-95)/4 = -2.5
从计算结果来看,说明这次考试小明的物理成绩在全部同学中算是考得很不错的,而语文考得很差 。
指数分布可能容易和前面的泊松分布混淆,泊松分布强调的是某段时间内随机事件发生的次数的概率分布,而指数分布说的是 随机事件发生的时间间隔 的概率分布 。比如一班地铁进站的间隔时间 。如果随机变量X的概率密度为:
则称X服从指数分布,其中的参数λ0 。对应的分布函数 为:
均匀分布的期望值和方差 分别为:
使用Python绘制指数分布的概率分布图:
均匀分布有两种,分为 离散型均匀分布和连续型均匀分布。其中离散型均匀分布最常见的例子就是抛掷骰子啦 。抛掷骰子出现的点数就是一个离散型随机变量,点数可能有1,2 , 3 , 4,5,6 。每个数出现的概率都是1/6 。
设连续型随机变量X具有概率密度函数:
则称X服从区间(a,b)上的均匀分布 。X在等长度的子区间内取值的概率相同 。对应的分布函数为:
f(x)和F(x)的图形分别如下图所示:
均匀分布的期望值和方差 分别为:
如何使用python做统计分析Shape Parameters
形态参数
While a general continuous random variable can be shifted and scaled
with the loc and scale parameters, some distributions require additional
shape parameters. For instance, the gamma distribution, with density
γ(x,a)=λ(λx)a?1Γ(a)e?λx,
requires the shape parameter a. Observe that setting λ can be obtained by setting the scale keyword to 1/λ.
虽然一个一般的连续随机变量可以被位移和伸缩通过loc和scale参数,但一些分布还需要额外的形态参数 。作为例子 , 看到这个伽马分布,这是它的密度函数
γ(x,a)=λ(λx)a?1Γ(a)e?λx,
要求一个形态参数a 。注意到λ的设置可以通过设置scale关键字为1/λ进行 。
Let’s check the number and name of the shape parameters of the gamma
distribution. (We know from the above that this should be 1.)
让我们检查伽马分布的形态参数的名字的数量 。(我们知道从上面知道其应该为1)
from scipy.stats import gamma
gamma.numargs
1
gamma.shapes
'a'
Now we set the value of the shape variable to 1 to obtain the
exponential distribution, so that we compare easily whether we get the
results we expect.
现在我们设置形态变量的值为1以变成指数分布 。所以我们可以容易的比较是否得到了我们所期望的结果 。
gamma(1, scale=2.).stats(moments="mv")
(array(2.0), array(4.0))
Notice that we can also specify shape parameters as keywords:
注意我们也可以以关键字的方式指定形态参数:
gamma(a=1, scale=2.).stats(moments="mv")
(array(2.0), array(4.0))
Freezing a Distribution
冻结分布
Passing the loc and scale keywords time and again can become quite
bothersome. The concept of freezing a RV is used to solve such problems.
不断地传递loc与scale关键字最终会让人厌烦 。而冻结RV的概念被用来解决这个问题 。
rv = gamma(1, scale=2.)
By using rv we no longer have to include the scale or the shape
parameters anymore. Thus, distributions can be used in one of two ways,
either by passing all distribution parameters to each method call (such
as we did earlier) or by freezing the parameters for the instance of the
distribution. Let us check this:
通过使用rv我们不用再更多的包含scale与形态参数在任何情况下 。显然,分布可以被多种方式使用,我们可以通过传递所有分布参数给对方法的每次调用(像我们之前做的那样)或者可以对一个分布对象冻结参数 。让我们看看是怎么回事:
rv.mean(), rv.std()
(2.0, 2.0)
This is indeed what we should get.
这正是我们应该得到的 。
Broadcasting
广播
The basic methods pdf and so on satisfy the usual numpy broadcasting
rules. For example, we can calculate the critical values for the upper
tail of the t distribution for different probabilites and degrees of
freedom.
像pdf这样的简单方法满足numpy的广播规则 。作为例子,我们可以计算t分布的右尾分布的临界值对于不同的概率值以及自由度 。
stats.t.isf([0.1, 0.05, 0.01], [[10], [11]])
array([[ 1.37218364,1.81246112,2.76376946],
[ 1.36343032,1.79588482,2.71807918]])
Here, the first row are the critical values for 10 degrees of freedom
and the second row for 11 degrees of freedom (d.o.f.). Thus, the
broadcasting rules give the same result of calling isf twice:
这里,第一行是以10自由度的临界值,而第二行是以11为自由度的临界值 。所以,广播规则与下面调用了两次isf产生的结果相同 。
stats.t.isf([0.1, 0.05, 0.01], 10)
array([ 1.37218364,1.81246112,2.76376946])
stats.t.isf([0.1, 0.05, 0.01], 11)
array([ 1.36343032,1.79588482,2.71807918])
If the array with probabilities, i.e, [0.1, 0.05, 0.01] and the array of
degrees of freedom i.e., [10, 11, 12], have the same array shape, then
element wise matching is used. As an example, we can obtain the 10% tail
for 10 d.o.f., the 5% tail for 11 d.o.f. and the 1% tail for 12 d.o.f.
by calling
但是如果概率数组,如[0.1,0.05,0.01]与自由度数组,如[10,11,12]具有相同的数组形态,则元素对应捕捉被作用 , 我们可以分别得到10%,5%,1%尾的临界值对于10 , 11,12的自由度 。
stats.t.isf([0.1, 0.05, 0.01], [10, 11, 12])
array([ 1.37218364,1.79588482,2.68099799])
Specific Points for Discrete Distributions
离散分布的特殊之处
Discrete distribution have mostly the same basic methods as the
continuous distributions. However pdf is replaced the probability mass
function pmf, no estimation methods, such as fit, are available, and
scale is not a valid keyword parameter. The location parameter, keyword
loc can still be used to shift the distribution.
离散分布的简单方法大多数与连续分布很类似 。当然像pdf被更换为密度函数pmf,没有估计方法 , 像fit是可用的 。而scale不是一个合法的关键字参数 。Location参数 , 关键字loc则仍然可以使用用于位移 。
The computation of the cdf requires some extra attention. In the case of
continuous distribution the cumulative distribution function is in most
standard cases strictly monotonic increasing in the bounds (a,b) and
has therefore a unique inverse. The cdf of a discrete distribution,
however, is a step function, hence the inverse cdf, i.e., the percent
point function, requires a different definition:
ppf(q) = min{x : cdf(x) = q, x integer}
Cdf的计算要求一些额外的关注 。在连续分布的情况下,累积分布函数在大多数标准情况下是严格递增的,所以有唯一的逆 。而cdf在离散分布 , 无论如何,是阶跃函数,所以cdf的逆,分位点函数,要求一个不同的定义:
ppf(q) = min{x : cdf(x) = q, x integer}
For further info, see the docs here.
为了更多信息可以看这里 。
We can look at the hypergeometric distribution as an example
from scipy.stats import hypergeom
[M, n, N] = [20, 7, 12]
我们可以看这个超几何分布的例子
from scipy.stats import hypergeom
[M, n, N] = [20, 7, 12]
If we use the cdf at some integer points and then evaluate the ppf at
those cdf values, we get the initial integers back, for example
如果我们使用在一些整数点使用cdf,它们的cdf值再作用ppf会回到开始的值 。
x = np.arange(4)*2
x
array([0, 2, 4, 6])
prb = hypergeom.cdf(x, M, n, N)
prb
array([ 0.0001031991744066,0.0521155830753351,0.6083591331269301,
0.9897832817337386])
hypergeom.ppf(prb, M, n, N)
array([ 0.,2.,4.,6.])
If we use values that are not at the kinks of the cdf step function, we get the next higher integer back:
如果我们使用的值不是cdf的函数值 , 则我们得到一个更高的值 。
hypergeom.ppf(prb1e-8, M, n, N)
array([ 1.,3.,5.,7.])
hypergeom.ppf(prb - 1e-8, M, n, N)
array([ 0.,2.,4.,6.])
python制作分布图制作分布图类似密度图,在python中利用pandas来提取分布数据是比较方便的 。主要用到pandas的cut和groupby等函数 。
官方文档链接
主要参数为x和bins 。
x为数据源,数组格式的都支持,list,numpy.narray, pandas.Series 。
bins可以为int,也可以为序列 。
我们定义bins为一个序列,默认为左开右闭的区间:
对言值列按cats做groupby,然后调用get_stats统计函数,再用unstack函数将层次化的行索引“展开”为列 。
G2在之前的文章中有介绍,文章 《python结合G2绘制精美图形》。
一句话绘制出来,但具体的区间段难以区分出来 。
bokeh是python的一个优秀的绘图工具包,与pandas结合的比较好 。bokeh文档
作者原文链接: python制作分布图
使用Python构造经验累积分布函数(ECDF)对于一个样本序列python统计分布函数 , 经验累积分布函数 (Empirical Cumulative Distribution Function)可被定义为
其中是一个指示函数python统计分布函数 , 如果,指示函数取值为1,否则取值为0 , 因此能反映在样本中小于的元素数量占比 。
根据格利文科定理(Glivenko–Cantelli Theorem),如果一个样本满足独立同分布(IID),那么其经验累积分布函数会趋近于真实的累积分布函数。
首先定义一个类 , 命名为ECDFpython统计分布函数:
我们采用均匀分布(Uniform)进行验证 , 导入 uniform 包,然后进行两轮抽样,第一轮抽取10次,第二轮抽取1000次,比较输出的结果 。
输出结果为:
而我们知道,在真实的0到1均匀分布中,时,,从模拟结果可以看出,样本量越大,最终的经验累积分布函数值也越接近于真实的累积分布函数值,因此格利文科定理得以证明 。
Python 数据可视化:数据分布统计图和热图本课将继续介绍 Seaborn 中的统计图 。一定要牢记,Seaborn 是对 Matplotlib 的高级封装,它优化了很多古老的做图过程 , 因此才会看到一个函数解决问题的局面 。
在统计学中,研究数据的分布情况,也是一个重要的工作,比如某些数据是否为正态分布——某些机器学习模型很在意数据的分布情况 。
在 Matplotlib 中,可以通过绘制直方图将数据的分布情况可视化 。在 Seaborn 中,也提供了绘制直方图的函数 。
输出结果:
sns.distplot 函数即实现了直方图,还顺带把曲线画出来了——曲线其实代表了 KDE 。
除了 sns.distplot 之外,在 Seaborn 中还有另外一个常用的绘制数据分布的函数 sns.kdeplot , 它们的使用方法类似 。
首先看这样一个示例 。
输出结果:
① 的作用是设置所得图示的背景颜色,这样做的目的是让下面的 ② 绘制的图像显示更清晰,如果不设置 ①,在显示的图示中看到的就是白底图像,有的部分看不出来 。
② 最终得到的是坐标网格,而且在图中分为三部分,如下图所示 。
相对于以往的坐标网格 , 多出了 B 和 C 两个部分 。也就是说,不仅可以在 A 部分绘制某种统计图,在 B 和 C 部分也可以绘制 。
继续操作:
输出结果:
语句 ③ 实现了在坐标网格中绘制统计图的效果,jp.plot 方法以两个绘图函数为参数 , 分别在 A 部分绘制了回归统计图,在 B 和 C 部分绘制了直方图,而且直方图分别表示了对应坐标轴数据的分布,即:
我们把有语句 ② 和 ③ 共同实现的统计图 , 称为联合统计图 。除了用 ② ③ 两句可以绘制这种图之外,还有一个函数也能够“两步并作一步”,具体如下:
输出结果:
【python统计分布函数 python统计数据分布】关于python统计分布函数和python统计数据分布的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 暗影格斗二游戏剧情,暗影格斗二游戏剧情模式在哪
- 影视综艺小程序怎么开通的简单介绍
- 魔女游戏的厂商是谁开发的,魔女游戏剧情解析
- 直播主播聊天技巧话术模板,主播直播间聊天话术
- 包含vb.net激活事件的词条
- redis集合set,redis set集合取交集
- 微信发视频号要实名认证,微信视频号需要认证
- 32寸用什么液晶电视,32寸液晶电视买什么牌子的好
- Linux命令包下载 linux命令安装包