一、概率分布

概率分布,是概率论的基本概念之一,主要用以表述随机变量取值的概率规律。为了使用的方便,根据随机变量所属类型的不同,概率分布取不同的表现形式。

概率分布包括离散概率分布和连续概率分布。

离散数据:数据由一个个单独的数值组成,其中的每一个数值都有相应概率。

连续数据:数据涵盖的是一个范围,这个范围内的任何一个数值都有可能成为事件的结果。

离散概率分布包括:伯努利分布、二项分布、几何分布、泊松分布

连续概率分布包括:正态分布、幂律分布

二、安装python的科学计算包scipy

在python的科学计算包scipy的stats模块计算出常见概率分布的概率值,并用matplotlib包进行绘图。

在notebook环境下安装科学计算包scipy。如果已安装忽略下面安装步骤。

安装步骤:

1)打开终端Anaconda Prompt

2)在conda中运行以下命令:conda install scipy

如果存在多个python环境,先进入想要的环境再安装,比如我自己设置了py2和py3两个环境,先在conda中进入python环境:activate py3,再按上面步骤2执行

如果还没有安装numpy包和matplotlib包,也按上述命令安装这些包

三、概率分布

1. 离散概率分布:伯努利分布(Bernoulli Distribution)

伯努利分布亦称“零一分布”、“两点分布”,即事件的结果只有两个值,且事件之间相互独立,例如抛一次硬币就为一次伯努利试验,结果要么为正面要么为反面,因此它符合伯努利分布。伯努利试验只做一次。

伯努利试验的特点是:

(1)每次试验中事件只有两种结果:事件发生或者不发生,如硬币正面或反面,患病或没患病;

(2)每次试验中事件发生的概率是相同的,注意不一定是0.5;

(3)n次试验的事件相互之间独立。

公式为:

期望与方差:

案例:玩抛硬币的游戏,只抛1次硬币,成功抛出正面朝上记录为1,反面朝上即抛硬币失败记录为0

思路:

Python代码实现:

导入包并求出对应概率:

绘制伯努利分布:

2. 离散概率分布:二项分布(Binomial Distribution)

二项分布就是重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且事件相互独立,事件发生与否的概率在每一次独立试验中都保持不变。当试验次数为1时,二项分布服从0-1分布。它计算的结果是做n次试验发生某个结果的概率,例如:抛一次硬币正面朝上的概率,抛两次正面朝上,抛n次正面朝上的概率。

二项分布的特点是:

(1)是在进行一系列独立试验;

(2)每一次都存在成功或失败的可能,每一次试验的成功概率相同;

(3)试验次数有限。

如果事件发生的概率是P,则不发生的概率q=1-p,n表示试验次数,X和r表示n次试验中的成功次数,

公式为:

期望与方差:

案例:继续玩抛硬币游戏,假如抛硬币5次,求抛出正面朝上次数的概率

Python代码实现:

求出二项分布概率:

绘制二项分布:

3. 离散概率分布:几何分布(Geometric Distribution)

几何分布就是在n次伯努利试验中,试验k次才得到第一次成功的机率。

几何分布的特点:

(1)进行一系列相互独立的试验;

(2)每一次试验既有成功的可能,也有失败的可能,且单次试验的成功概率相同;

(3)主要是为了取得第一次成功需要进行多少次试验。

公式为:

期望与方差:

案例:向一个喜欢的女孩表白,会存在表白成功和不成功的可能,如果向这个女孩表白,直到表白成功为止,有可能表白1次、2次、3次,现在求首次表白成功的概率

Python代码实现:

求出几何分布概率:

绘制几何分布:

4. 离散概率分布:泊松分布(Poisson Distribution)

泊松分布描述的是已知一段时间内事件发生的平均数,求某个时间内发生的概率。

泊松分布的特点:

(1)单独事件在给定区间内随机、独立地发生,给定区间可以是时间或空间;

(2)已知该区间内的事件平均发生次数(或叫做发生率),且为有限数值。该事件平均发生次数通常用希腊字母λ(lambda)表示。

公式为:

期望与方差:

其中,r表示给定区间内发生事件的次数;

λ表示每个区间内平均发生次数。

案例:已知某路口发生事故的比率是每天2次,那么在此处一天内发生k次事故的概率是多少?

Python代码实现:

求出泊松分布的概率:

绘制泊松分布:

5. 连续概率分布:正态分布(Normal Distribution)

正态分布(Normal distribution),又名高斯分布(Gaussian distribution),正态曲线呈钟型,两头低,中间高,左右对称,中央部位的概率密度最大。越偏离均值,其概率密度减小。

若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

概率密度函数f(x):通过它可以求出一个数据范围内的某个连续变量的概率,可以指出该概率分布的形状。

概率密度:通过面积指出各种范围内的概率大小,通过概率密度函数进行描述。

求解正态分布概率步骤:

(1)确定分布和范围,即算出均值和标准差;

(2)将分布标准化,求出标准分;

(3)查找概率,通过在概率表中查找标准分可以求出正态概率,概率表给出的是等于或小于这个数值的概率。

Python代码实现:

定义正态分布随机变量:

求出概率密度函数并绘图:

源码:

# coding: utf-8

# # 1.离散概率分布:伯努利分布(Bernoulli Distribution)

# 案例:玩抛硬币的游戏,只抛1次硬币,成功抛出正面朝上记录为1,反面朝上即抛硬币失败记录为0

# In[1]:

# 导入包

import numpy as np

import matplotlib.pyplot as plt

# 统计计算包的统计模块

from scipy import stats

# In[2]:

'''第1步,定义随机变量:1次抛硬币正面朝上记录为1,反面朝上记录为0'''

# arange用于生成一个等差数组,arange([start, ]stop, [step, ]

X1 = np.arange(0,2,1)

X1

# In[3]:

'''第2步,求对应分布的概率:概率质量函数(PMF)返回一个列表,列表中每个元素表示随机变量中对应值的概率'''

p1 = 0.5 # 硬币朝上的概率

pList1 = stats.bernoulli.pmf(X1,p1)

pList1

# In[4]:

'''第3步,绘图plot默认绘制折线marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''

plt.plot(X1,pList1,marker='o',linestyle='None')

'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList1中的值'''

plt.vlines(X1,0,pList1)

plt.xlabel('随机变量:抛1次硬币')

plt.ylabel('概率')

plt.title('伯努利分布:p=%.2f' % p1)

plt.show()

# # 2.离散概率分布:二项分布(Binomial Distribution)

# 案例:继续玩抛硬币游戏,假如抛硬币5次,求抛出正面朝上次数的概率

# In[5]:

# 第1步,定义随机变量:5次抛硬币,正面朝上的次数

n2 = 5 # 做某件事情的次数

p2 = 0.5 # 做某件事情成功的概率(抛硬币正面朝上的概率)

X2 = np.arange(0,n2+1,1) # 做某件事成功的次数(抛硬币正面朝上的次数)

X2

# In[6]:

# 第2步,求对应分布的概率:概率质量函数(PMF)

# 返回一个列表,列表中每个元素表示随机变量中对应值的概率

pList2 = stats.binom.pmf(X2,n2,p2)

pList2

# In[7]:

'''第3步,绘图plot默认绘制折线marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''

plt.plot(X2,pList2,marker='o',linestyle='None')

'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList2中的值'''

plt.vlines(X2,0,pList2)

plt.xlabel('随机变量:抛硬币正面朝上的次数')

plt.ylabel('概率')

plt.title('二项分布:n=%i,p=%.2f' % (n2,p2))

plt.show()

# # 3.离散概率分布:几何分布(Geometric Distribution)

# 案例:向一个喜欢的女孩表白,会存在表白成功和不成功的可能,如果向这个女孩表白,直到表白成功为止,有可能表白1次、2次、3次,现在求首次表白成功的概率

# In[8]:

'''第1步,定义随机变量:首次表白成功的次数,可能是1次,2次,3次'''

# 第k次做某件事,才取得第1次成功

# 这里我们想知道5次表白成功的概率

k = 5

# p3表示做某件事成功的概率,这里假设每次表白成功的概率为60%

p3 = 0.6

X3 = np.arange(1,k+1,1)

X3

# In[9]:

'''第2步,求对应分布的概率:概率质量函数(PMF)返回一个列表,列表中每个元素表示随机变量中对应值的概率分别表示第1次表白成功的概率,第2次表白成功的概率一直到第5次表白成功的概率'''

pList3 = stats.geom.pmf(X3,p3)

pList3

# In[10]:

'''第3步,绘图plot默认绘制折线marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值'''

plt.plot(X3,pList3,marker='o',linestyle='None')

plt.vlines(X3,0,pList3)

plt.xlabel('随机变量:表白第k次才首次成功')

plt.ylabel('概率')

plt.title('几何分布:p=%.2f' % p3)

plt.show()

# # 4.离散概率分布:泊松分布(Poisson Distribution)

# 案例:已知某路口发生事故的比率是每天2次,那么在此处一天内发生k次事故的概率是多少?

# In[11]:

# 第1 步,定义随机变量

mu4 = 2 # 平均值:每天发生2次事故

k4 = 4 # 次数,现在想知道每天发生4次事故的概率

# 发生事故次数,包含0次,1次,2次,3次,4次事故

X4 = np.arange(0,k4+1,1)

X4

# In[12]:

'''第2步,求对应分布的概率:概率质量函数(PMF)返回一个列表,列表中每个元素表示随机变量中对应值的概率分别表示发生0次,1次,2次,3次,4次事故的概率'''

pList4 = stats.poisson.pmf(X4,mu4)

pList4

# In[13]:

# 第3步,绘图

plt.plot(X4,pList4,marker='o',linestyle='None')

plt.vlines(X4,0,pList4)

plt.xlabel('某路口发生k次事故')

plt.ylabel('概率')

plt.title('泊松分布:平均值mu=%i' % mu4 )

plt.show()

# # 5.连续概率分布:正态分布(Normal Distribution)

# In[14]:

# 第1步,定义随机变量

mu5 = 0 # 平均值

sigma = 1 # 标准差

X5 = np.arange(-5,5,0.1)

X5

# In[15]:

# 第2步,求概率密度函数(PDF)

y = stats.norm.pdf(X5,mu5,sigma)

# In[16]:

# 第3步,绘图

plt.plot(X5,y)

plt.xlabel('随机变量:x')

plt.ylabel('概率:y')

plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu5,sigma))

plt.grid()

plt.show()

python统计一组数据中的概率_Python实现概率分布相关推荐

  1. python如何提取数据中的年月_Python提取特定时间段内数据的方法实例

    怎样用python提取不同股票csv里特定时间段的数据小编推开你的时候,从来没想过,小编爱你爱的那么深 如何在python中调用道指指定时间段的收盘数据? pandas是python环境下最有名的数据 ...

  2. python统计成绩数据中如何去掉表头,python 从 CSV 文件中删除表头

    假设你有一个枯燥的任务,要删除几百 CSV 文件的第一行.也许你会将它们送入一个自动化的过程,只需要数据,不需要每列顶部的表头.可以在 Excel 中打开每个文件,删除第一行,并重新保存该文件,但这需 ...

  3. python如何提取数据中的年月_Python数据处理笔记——Pandas时间数据提取处理

    做数据分析时,对于有时间数据的数据来源,在时间维度上的剖析必不可少 比如: 在一天的销售时间内,哪些时间段是高峰 是否与星期有关 RFM模型中的R怎么快速计算距离天数 如何找出某个时间点或时间段的数据 ...

  4. python将一组数据转化为列表_python如何将一个全部为int的列表,转化为全部为str的列表...

    展开全部 解决方法一: a = [1,2,3,4,5] b = [ str(i) for i in a ] 直接用List Comprehension来把2113每个元素转5261换成str. 解决方 ...

  5. Python计算一组数据的PDF(概率密度函数)方法

    Python计算一组数据的PDF(概率密度函数)方法 公式如下: python实现: 第一种方法: import scipy.stats as stst.norm.pdf([一组数据]) 第二种方法: ...

  6. python统计西游记人物名字出现次数_Python文本统计功能之西游记用字统计操作示例...

    本文实例讲述了Python文本统计功能之西游记用字统计操作.分享给大家供大家参考,具体如下: 一.数据 xyj.txt,<西游记>的文本,2.2MB 致敬吴承恩大师,4020行(段) 二. ...

  7. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法

    本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...

  8. mysql求数值分位点_如何计算一组数据中任意一个数值的分位值?

    本篇补充,关于评论区@慢中取利 的提问. 分析:你的疑问是 想要逆推 算出percentile()方法的k值,也就是分位值对应的百分数. 逆推,最好的办法我认为是 找到Excel 关于percenti ...

  9. matlab 虚数部分,MATLAB去掉一组数据中的虚数【多图】

    MATLAB去掉一组数据中的虚数[多图] 08-01栏目:技术 TAG:matlab虚数 matlab虚数 >> A=[1+i;2;3-2i;4+5i;6;7] A = 1.0000 + ...

最新文章

  1. Java注解学习笔记
  2. OpenStack Pike Minimal安装:二、身份认证
  3. 关于谷歌自动换行的奇异效果
  4. 微信小程序【腾讯云开发】创建并上线小程序项目(涉及-数据库操作)
  5. 整流、开关、肖特基区别
  6. Vagrant搭建可移动的PHP开发环境
  7. android handle 阻塞,Android全面解析之Handler机制:常见问题汇总
  8. mysql手工注入imformation_网络安全系列之十八 MySQL基本操作(PHP注入基础)
  9. Java虚拟机(JVM)概念简介
  10. 世上可有后悔药?服务器里建快照
  11. 电商大促特辑:蘑菇街致美丽新世界的架构礼
  12. 伟大的Redis:Redis学习资料荟萃
  13. 工行u盾显示316_企业用户,插U盾点击U盾登录后,显示“无法显示该网页”
  14. 一直想当5G老大的美国,现在进展怎样了?
  15. python自动生成ppt_用Python自动化生成倒计时图片
  16. 工作手册 会计核算制度 目录 1. 会计核算管理制度 1 2. 会计档案管理办法 4 1.会计核算管理制度 8. 1.采取借贷记账法记账,采用权责发生制,即凡是收益已经实现,用已经发生,不论款
  17. 【江苏省大学生核心就业能力培训(笔记)】
  18. 获取汉字的首字母和拼音
  19. 域名系统的解析过程 域名解析多久可以生效
  20. JAVA—— JQuery

热门文章

  1. 基于BERT的新闻文本分类
  2. 传统服务器销售转型,传统IDC企业云化转型有了新思路!
  3. oracle v session表,Oracle技术之V$SESSION_LONGOPS超过系统时间
  4. tkinter如何绑定鼠标和键盘等事件
  5. 《设计模式之禅》-原型模式
  6. 三维交互可视化平台(智慧海上牧场平台)学习开发Flask+Vue+Echarts+Mysql+websocket 实战(四)
  7. 达人评测 酷睿i5 12450h和锐龙r7 5700u选哪个好 i512450h和r75700u对比
  8. 【多元统计分析】Python实现对应分析
  9. 前端js使浏览器窗口全屏与退出----浏览器全屏时 监测通过esc按键退出全屏 (退出全屏时有页面上的相关处理)
  10. 【读书笔记】组合计数中的行列式方法