统计学入门级:常见概率分布+python绘制分布图

Python022

统计学入门级:常见概率分布+python绘制分布图,第1张

如果随机变量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 3 + 4/5 + 5/5

= 3/5 2 + 1/5 4 + 1/5 5

= 0.6 2 + 0.2 4 + 0.2 5

= 60% 2 + 20% 4 + 20%*5

= 1.2 + 0.8 + 1

= 3

倒数第三步可以解释为值为2的数字出现的概率为60%,4的概率为20%,5的概率为20%。 所以E(X) = 60% 2 + 20% 4 + 20%*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(μ,σ²)。其中-∞<μ<+∞,σ>0, μ为随机变量X的均值,σ为随机变量X的标准差。 正态分布的分布函数

正态分布的图形特点 :

使用Python绘制正态分布的概率分布图:

正态分布有一个3σ准则,即数值分布在(μ-σ,μ+σ)中的概率为0.6827,分布在(μ-2σ,μ+2σ)中的概率为0.9545,分布在(μ-3σ,μ+3σ)中的概率为0.9973,也就是说大部分数值是分布在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性很小很小,仅占不到0.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)的图形分别如下图所示:

均匀分布的期望值和方差 分别为:

1,xlable,ylable设置x,y轴的标题文字。

2,title设置标题。

3,xlim,ylim设置x,y轴显示范围。

plt.show()显示绘图窗口,通常情况下,show()会阻碍程序运行,带-wthread等参数的环境下,窗口不会关闭。

plt.saveFig()保存图像。

面向对象绘图

1,当前图表和子图可以用gcf(),gca()获得。

subplot()绘制包含多个图表的子图。

configure subplots,可调节子图与图表边框距离。

可以通过修改配置文件更改对象属性。

图标显示中文

1,在程序中直接指定字体。

2, 在程序开始修改配置字典reParams.

3,修改配置文件。

Artist对象

1,图标的绘制领域。

2,如何在FigureCanvas对象上绘图。

3,如何使用Renderer在FigureCanvas对象上绘图。

FigureCanvas和Render处理底层图像操作,Artist处理高层结构。

分为简单对象和容器对象,简单的Aritist是标准的绘图元件,例如Line 2D,Rectangle,Text,AxesImage等,而容器类型包含许多简单的的 Aritist对象,使他们构成一个整体,例如Axis,Axes,Figure等。

直接创建Artist对象进项绘图操作步奏:

1,创建Figure对象(通过figure()函数,会进行许多初始化操作,不建议直接创建。)

2,为Figure对象创建一个或多个Axes对象。

3,调用Axes对象的方法创建各类简单的Artist对象。

Figure容器

如何找到指定的Artist对象。

1,可调用add_subplot()和add_axes()方法向图表添加子图。

2,可使用for循环添加栅格。

3,可通过transform修改坐标原点。

Axes容器

1,patch修改背景。

2,包含坐标轴,坐标网格,刻度标签,坐标轴标题等内容。

3,get_ticklabels(),,get-ticklines获得刻度标签和刻度线。

1,可对曲线进行插值。

2,fill_between()绘制交点。

3,坐标变换。

4,绘制阴影。

5,添加注释。

1,绘制直方图的函数是

2,箱线图(Boxplot)也称箱须图(Box-whisker Plot),是利用数据中的五个统计量:最小值、第一四分位

数、中位数、第三四分位数与最大值来描述数据的一种方法,它可以粗略地看出数据是否具有对称性以及分

布的分散程度等信息,特别可以用于对几个样本的比较。

3,饼图就是把一个圆盘按所需表达变量的观察数划分为若干份,每一份的角度(即面积)等价于每个观察

值的大小。

4,散点图

5,QQ图

低层绘图函数

类似于barplot(),dotchart()和plot()这样的函数采用低层的绘图函数来画线和点,来表达它们在页面上放置的位置以及其他各种特征。

在这一节中,我们会描述一些低层的绘图函数,用户也可以调用这些函数用于绘图。首先我们先讲一下R怎么描述一个页面;然后我们讲怎么在页面上添加点,线和文字;最后讲一下怎么修改一些基本的图形。

绘图区域与边界

R在绘图时,将显示区域划分为几个部分。绘制区域显示了根据数据描绘出来的图像,在此区域内R根据数据选择一个坐标系,通过显示出来的坐标轴可以看到R使用的坐标系。在绘制区域之外是边沿区,从底部开始按顺时针方向分别用数字1到4表示。文字和标签通常显示在边沿区域内,按照从内到外的行数先后显示。

添加对象

在绘制的图像上还可以继续添加若干对象,下面是几个有用的函数,以及对其功能的说明。

•points(x, y, ...),添加点

•lines(x, y, ...),添加线段

•text(x, y, labels, ...),添加文字

•abline(a, b, ...),添加直线y=a+bx

•abline(h=y, ...),添加水平线

•abline(v=x, ...),添加垂直线

•polygon(x, y, ...),添加一个闭合的多边形

•segments(x0, y0, x1, y1, ...),画线段

•arrows(x0, y0, x1, y1, ...),画箭头

•symbols(x, y, ...),添加各种符号

•legend(x, y, legend, ...),添加图列说明

看来是同道。你提到的这个问题很难。

java调用python容易。 java甚至可以直接调用python的类。python调用java更容易了。

不过GUI要想融合,据目前20年的技术来看,只有本土的可以。 比如以前的微软件ActiveX,不管你是什么语言开发的都可以在windows下用OLE方式嵌入。

java的制图功能,因为它的设计理念 ,它是封闭的。也就是说,除非你使用了它本地化的GUI方法,否则就不可能实现。

那么说,如果我一定要实现怎么办呢?只能走很长的弯路。方法还是有几个的。

方法1:

在java的panel里嵌入一个浏览器,然后在浏览器里显示统计图表。这个真是不要太容易了。 不管是你是python生成的本地图片,还是直接用javascript生成的图都可以嵌入进去。美观不用说

方法2:

绘图使用开源的,比如plt之类的。不过它被本地化成java版本的。然后用java调用python,再用python产生数据后,通过jython调用java本地化的绘图工具。

表面上看,这个东西就是没有价值的,为什么不直接用java调用绘图。关键在于python本身对于数据处理的优势太明显。轻松就可以完成复杂的数据结构处理。所以还是有价值的

方法3:

浮动窗口方式。这个就不说了。如果你的java是固定在窗口特定位置的。这个就容易了。怎么浮动窗口要根据操作系统而定。

方法4:简单方案

python生成图片后,输出成JPEG或者是PNG或者是GIF,然后让JAVA显示这个图片。这个可能是最最简单的。

方法5:windows专用,不知道可否使用

仅限于特定场景,在要显示图片的地方,显示一个品红色的纯色图。然后让python的图形输出转到directshow之类的API,直接写显卡。这样就可以显示动画效果。