【数据分析】用Python秒懂概率分布!(附完整Python代码实现)

本文涉及的概念分布包括:

  • 随机变量(Random Variable)

  • 密度函数(Density Functions)

  • 伯努利分布(Bernoulli Distribution)

  • 二项式分布(Binomial Distribution)

  • 均匀分布(Uniform Distribution)

  • 泊松分布(Poisson Distribution)

  • 正态分布(Normal Distribution)

  • 长尾分布(Long-Tailed Distribution)

  • 学生 t 检验分布(Student’s t-test Distribution)

  • 对数正态分布(Lognormal Distribution)

  • 指数分布(Exponential Distribution)

  • 威布尔分布(Weibull Distribution)

  • 伽马分布(Gamma Distribution)

  • 卡方分布(Chi-square Distribution)

  • 中心极限定理(Central Limit Theorem)

01

随机变量

离散随机变量

随机实验的所有可能结果都是随机变量。一个随机变量集合用 表示。

如果实验可能的结果是可数的,那么它被称为离散随机变量。例如,如果你抛硬币 10 次,你能得到的正面数可以用一个数字表示。或者篮子里有多少苹果仍然是可数的。

连续随机变量

这些是不能以离散方式表示的值。例如,一个人可能有 1.7 米高,1米 80 厘米,1.6666666…米高等等。

02

密度函数

我们使用密度函数来描述随机变量 的概率分布。

PMF:概率质量函数

返回离散随机变量 等于 的值的概率。所有值的总和等于 1。PMF 只能用于离散变量。

PMF。来源:https://en.wikipedia.org/wiki/Probability_mass_function

PDF:概率密度函数

它类似于连续变量的 PMF 版本。返回连续随机变量 X 在某个范围内的概率。

PDF。来源:https://byjus.com/maths/probability-density-function/

CDF:累积分布函数

返回随机变量 X 取小于或等于 x 的值的概率。

CDF(指数分布的累积分布函数)。来源:https://en.wikipedia.org/wiki/Cumulative_distribution_function

03

离散分布

伯努利分布

我们只有一个试验(只有一个观察结果)和两个可能的结果。例如,抛硬币。

我们有一个真的(1)的结果和一个假的(0)的结果。假设我们接受正面为真(我们可以选择正面为真或成功)。那么,如果正面朝上的概率是 ,相反情况的概率就是 。

import seaborn as sns  
from scipy.stats import bernoulli  
# 单一观察值   
# 生成数据 (1000 points, possible outs: 1 or 0, probability: 50% for each)  
data = bernoulli.rvs(size=1000,p=0.5)  
# 绘制图形  
ax = sns.distplot(data\_bern,kde=False,hist\_kws={"linewidth": 10,'alpha':1})  
ax.set(xlabel='Bernouli', ylabel='freq')

二项式分布

伯努利分布是针对单个观测结果的。多个伯努利观测结果会产生二项式分布。例如,连续抛掷硬币。

试验是相互独立的。一个尝试的结果不会影响下一个。

二项式分布可以表示为 , 。 是试验次数, 是成功的概率。

让我们进行一个实验,我们连续抛掷一枚公平的硬币 20 次。

import matplotlib.pyplot as plt  
from scipy.stats import binom  
n = 20    
# 实验次数  
p = 0.5   
# 成功的概率  
r = list(range(n + 1))   
# the number of success  
# pmf值  
pmf\_list = \[binom.pmf(r\_i, n, p) for r\_i in r \]  
# 绘图  
plt.bar(r, pmf\_list)plt.show()

它看起来像正态分布,但请记住这些值是离散的。

现在这次,你有一枚欺诈硬币。你知道这个硬币正面向上的概率是 0.7。因此,p = 0.7。

带有偏差硬币的二项式分布

该分布显示出成功结果数量增加的概率增加。
成功的概率 : 实验次数 : 失败的概率

均匀分布

所有结果成功的概率相同。掷骰子,1 到 6。

掷 6 次。

data = np.random.uniform(1, 6, 6000)

掷 6000 次。

Poisson 分布

它是与事件在给定时间间隔内发生频率相关的分布。

, 是在指定时间间隔内预期发生的事件次数。它是在该时间间隔内发生的事件的已知平均值。 是事件在指定时间间隔内发生的次数。如果事件遵循泊松分布,则:

在泊松分布中,事件彼此独立。事件可以发生任意次数。两个事件不能同时发生。

如每 60 分钟接到 4 个电话。这意味着 60 分钟内通话的平均次数为 4。让我们绘制在 60 分钟内接到 0 到 10 个电话的概率。

import matplotlib.pyplot as plt  
from scipy.stats   
import poisson  
r = range(0,11)   
# 呼叫次数  
lambda\_val = 4   
# 均值  
# 概率值  
data = poisson.pmf(r, lambda\_val)  
# 绘图  
fig, ax = plt.subplots(1, 1, figsize=(8, 6))  
ax.plot(r, data, 'bo', ms=8, label='poisson')  
plt.ylabel("Probability", fontsize="12")  
plt.xlabel("# Calls", fontsize="12")  
plt.title("Poisson Distribution", fontsize="16")  
ax.vlines(r, 0, data, colors='r', lw=5, alpha=0.5)

04

连续分布

正态分布

最著名和最常见的分布(也称为高斯分布),是一种钟形曲线。它可以通过均值和标准差定义。正态分布的期望值是均值。

曲线对称。均值、中位数和众数相等。曲线下总面积为 1。

大约 68%的值落在一个标准差范围内。~95% 落在两个标准差范围内,~98.7% 落在三个标准差范围内。

import scipy  
mean = 0  
standard\_deviation = 5  
x\_values = np. arange(\-30, 30, 0.1)  
y\_values = scipy.stats.norm(mean, standard\_deviation)  
plt.plot(x\_values, y\_values. pdf(x\_values))

正态分布的概率密度函数为:

是均值, 是常数, 是标准差。

QQ 图

我们可以使用 QQ 图来直观地检查样本与正态分布的接近程度。

计算每个数据点的 z 分数并对其进行排序,然后在 y 轴上表示它们。X 轴表示值的排名的分位数。

这个图上的点越接近对角线,分布就越接近正态分布。

import numpy as np  
import statsmodels.api as sm  
points = np.random.normal(0, 1, 1000)  
fig = sm.qqplot(points, line ='45')  
plt.show()

长尾分布

尾巴是分布的长而窄的部分,离群值就位于其中。当一侧尾巴不同于另一侧时,就称为偏斜。下图是长尾分布的 QQ 图。

import matplotlib.pyplot as plt
from scipy.stats import skewnorm
def generate_skew_data(n: int, max_val: int, skewness: int):

Skewnorm function

random = skewnorm.rvs(a = skewness,loc=max_val, size=n)
plt.hist(random,30,density=True, color = ‘red’, alpha=0.1)
plt.show()

generate_skew_data(1000, 100, -5) # negative (-5)-> 左偏分布


generate_skew_data(1000, 100, 5) # positive (5)-> 右偏分布


学生 t 检验分布

正态但有尾(更厚、更长)。

t 分布和 z 分布。来源:https://www.geeksforgeeks.org/students-t-distribution-in-statistics/

t 分布是具有较厚尾部的正态分布。如果可用数据较少(约 30 个),则使用 t 分布代替正态分布。

在 t 分布中,自由度变量也被考虑在内。根据自由度和置信水平在 t 分布表中找到关键的 t 值。这些值用于假设检验。

t 分布表情移步:https://www.sjsu.edu/faculty/gerstman/StatPrimer/t-table.pdf。

对数正态分布

随机变量 X 的对数服从正态分布的分布。

import numpy as np  
import matplotlib.pyplot as plt  
from scipy import stats  
X = np.linspace(0, 6, 1500)  
std = 1  
mean = 0  
lognorm\_distribution = stats.lognorm(\[std\], loc=mean)  
lognorm\_distribution\_pdf = lognorm\_distribution.pdf(X)  
fig, ax = plt.subplots(figsize=(8, 5))  
plt.plot(X, lognorm\_distribution\_pdf, label="μ=0, σ=1")  
ax.set\_xticks(np.arange(min(X), max(X)))  
plt.title("Lognormal Distribution")  
plt.legend()plt.show()

指数分布

我们在 Poisson 分布中研究了在一定时间间隔内发生的事件。在指数分布中,我们关注的是两个事件之间经过的时间。如果我们把上面的例子倒过来,那么两个电话之间需要多长时间?

因此,如果 X 是一个随机变量,遵循指数分布,则累积分布函数为:

是均值, 是常数。

from scipy.stats import expon  
import matplotlib.pyplot as plt  
x = expon.rvs(scale=2, size=10000) # 2 calls  
# 绘图  
plt.hist(x, density=True, edgecolor='black')

x 轴表示时间间隔的百分比。

韦伯分布

它是指时间间隔是可变的而不是固定的情况下使用的指数分布的扩展。在 Weibull 分布中,时间间隔被允许动态变化。

是形状参数,如果是正值,则事件发生的概率随时间而增加,反之亦然。 是尺度参数。

import matplotlib.pyplot as plt  
x = np.arange(1,100.)/50.  
def weib(x,n,a):      return (a / n) \* (x / n)\*\*(a - 1) \* np.exp(-(x / n)\*\*a)  count, bins, ignored = plt.hist(np.random.weibull(5.,1000))  
x = np.arange(1,100.)/50.  
scale = count.max()/weib(x, 1., 5.).max()  
plt.plot(x, weib(x, 1., 5.)\*scale)  
plt.show()

Gamma 分布

指与第 n 个事件发生所需的时间有关的分布,而指数分布则与首次事件发生的时间有关。

import numpy as np  
import scipy.stats as stats  
import matplotlib.pyplot as plt  
#Gamma distributions  
x = np.linspace(0, 60, 1000)  
y1 = stats.gamma.pdf(x, a=5, scale=3)  
y2 = stats.gamma.pdf(x, a=2, scale=5)  
y3 = stats.gamma.pdf(x, a=4, scale=2)  
# plots  
plt.plot(x, y1, label='shape=5, scale=3')  
plt.plot(x, y2, label='shape=2, scale=5')  
plt.plot(x, y3, label='shape=4, scale=2')  
#add legend  
plt.legend()  
#display   
plotplt.show()

Gamma 分布。X 轴表示随机变量 X 可能取到的潜在值,Y 轴表示分布的概率密度函数(PDF)值。

Gamma 分布

它用于统计检验。这通常在实际分布中不会出现。

# x轴范围0-10,步长0.25  
X = np.arange(0, 10, 0.25)  
plt.subplots(figsize=(8, 5))  
plt.plot(X, stats.chi2.pdf(X, df=1), label="1 dof")  
plt.plot(X, stats.chi2.pdf(X, df=2), label="2 dof")  
plt.plot(X, stats.chi2.pdf(X, df=3), label="3 dof")  
plt.title("Chi-squared Distribution")  
plt.legend()  
plt.show()

04

中心极限定理

当我们从人群中收集足够大的样本时,样本的平均值将具有正态分布,即使人群不是正态分布。

我们可以从任何分布(离散或连续)开始,从人群中收集样本并记录这些样本的平均值。随着我们继续采样,我们会注意到平均值的分布正在慢慢形成正态分布。

中心极限定理。来源:https://en.wikipedia.org/wiki/Central_limit_theorem

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/120420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT AIGC 完成动态堆积面积图实例

先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…

阿里云大数据实战记录9:MaxCompute RAM 用户与授权

文章目录 问题来源&#xff1a;maxcompute 管理员无法访问敏感列&#xff1f;主线问题&#xff1a;如何提高用户等级衍生问题1&#xff1a;怎么知道自己的等级和表单的等级衍生问题2&#xff1a;为什么 dataworks 空间管理员也没有设置等级的权限&#xff1f;衍生问题3&#xf…

模板和STL简介

模板和STL简介 一、泛型编程1、通用交换函数的实现&#xff08;1&#xff09;代码&#xff08;2&#xff09;总结 2、泛型编程的概念3、模板的概念 二、函数模板1、概念2、格式3、代码4、原理 三、函数模板实例化1、概念2、隐式实例化&#xff08;1&#xff09;概念&#xff08…

[unity]三角形顶点顺序

序 详见官方文档&#xff1a;Unity - Manual: Mesh data (unity3d.com) Topology&#xff1a;拓扑结构 翻译&#xff1a; 拓扑描述网格具有的面类型。 网格的拓扑定义了索引缓冲区的结构&#xff0c;索引缓冲区又描述了顶点位置如何组合成面。每种类型的拓扑都使用索引数组中…

医院安全(不良)事件上报系统源码 不良事件报告平台源码 前后端分离,支持二开

医院安全&#xff08;不良&#xff09;事件上报系统源码 系统定义&#xff1a; 规范医院安全&#xff08;不良&#xff09;事件的主动报告&#xff0c;增强风险防范意识&#xff0c;及时发现医院不良事件和安全隐患&#xff0c;将获取的医院安全信息进行分析反馈&#xff0c;…

Nacos 开源版的使用测评

文章目录 一、Nacos的使用二、Nacos和Eureka在性能、功能、控制台体验、上下游生态和社区体验的对比&#xff1a;三、记使使用Nacos中容易犯的错误四、对Nacos开源提出的一些需求 一、Nacos的使用 这里配置mysql的连接方式&#xff0c;spring.datasource.platformmysql是老版本…

Web前端开发概述

Web&#xff08;World Wide Web&#xff0c;全球广域网&#xff09;是指一种基于互联网的信息系统&#xff0c;通过超文本链接将全球各地的文档、图像、视频等资源相互关联起来&#xff0c;并通过Web浏览器进行交互浏览和访问。Web的发展使得人们可以方便地获取和共享各种类型的…

规避【虚拟专线技术】使用风险实现业务系统安全

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 一、技战法描述 VPN是利用Internet等公共网络基础设施&#xff0c;通过隧道加密通信技 术&#xff0c;为用…

js+vue,前端关于页面滚动让头部菜单淡入淡出实现原理

今天遇到个需求&#xff1a;我这里借用小米商城的详情页做个比喻吧。 刚开始其商品详情页是这样的&#xff1a; 当滚动到一定高度时&#xff0c;是这样的&#xff1a; 可以看到当滚动到轮播图底下的时候&#xff0c;详情页的菜单完全显现出来。 以下上代码&#xff1a; HTML…

大数据组件-Flink环境搭建

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

电脑硬盘数据恢复一般需要收费多少钱

随着电子信息时代的发展&#xff0c;个人和企业对电脑硬盘中存储的数据越发重视。然而&#xff0c;由于各种原因&#xff0c;硬盘数据丢失的情况屡见不鲜。如果您正陷入这样的困境&#xff0c;您可能会好奇恢复失去的数据需要花费多少钱。本文将为您介绍电脑硬盘数据恢复的一般…

【内网穿透】使用Nodejs搭建简单的HTTP服务器 ,并实现公网远程访问

目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation…

hadoop3.3.1单机版环境搭建详细流程记录

1、在centos7中创建必要的目录&#xff1b; 2、上传JDK安装包到tools目录&#xff1b; 3、解压JDK到/opt/server/目录&#xff1b; tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt/server/ 4、“vim&#xff1a;未找到命令”的解决办法&#xff1b; 安装vim即可&#xff1b; …

Vue-router路由

配置路由 相当于SpringMVC的Controller 路径然后&#xff0c;跳转到对应的组件 一键生成前端项目文档

手写Mybatis:第7章-SQL执行器的定义和实现

文章目录 一、目标&#xff1a;SQL执行的定义和实现二、设计&#xff1a;SQL执行的定义和实现三、实现&#xff1a;SQL执行的定义和实现3.1 工程结构3.2 SQL执行实现的关系图3.3 执行器的定义和实现3.3.1 Executor 接口3.3.2 BaseExecutor 抽象基类3.3.3 SimpleExecutor 简单执…

机器学习---预剪枝、后剪枝(REP、CCP、PEP、)

1. 为什么要进行剪枝 横轴表示在决策树创建过程中树的结点总数&#xff0c;纵轴表示决策树的预测精度。 实线显示的是决策树 在训练集上的精度&#xff0c;虚线显示的则是在⼀个独⽴的测试集上测量出来的精度。 随着树的增⻓&#xff0c;在 训练样集上的精度是单调上升的&…

【前端demo】动态赋值CSS

文章目录 效果过程html实现oninput与onchange事件统一配置CSS 代码HTMLCSSJS 其他demo 效果 动态显示CSS样式&#xff0c;由:root统一配置。 效果预览&#xff1a;https://codepen.io/karshey/pen/BavLrwy 参考&#xff1a; Dynamic CSS Variables(codepen.io) 漫谈document…

Vue 2 nextTick方法|异步更新|事件循环

1 nextTick的用处 vm.$netTick的作用是将回调延迟到下次DOM更新周期之后执行。 它接受一个回调函数作为参数。 其实&#xff0c;在我们更新数据状态后&#xff0c;是不会立马渲染的&#xff0c;你不能即刻获取到新的DOM&#xff1a; <!DOCTYPE html> <html><…

NPM 常用命令(三)

目录 1、npm compltion 1.1 描述 2、npm config 2.1 常用命令 2.2 描述 set get list delete edit fix 2.3 配置 json global editor location long 3、npm dedupe 3.1 描述 3.2 配置 4、npm deprecate 4.1 命令使用 4.2 描述 4.3 配置 registry ot…

CentOS7 Hadoop3.3.0 安装与配置

一、安装JDK 1、创建文件夹tools和training用于存放压缩包和解压使用&#xff0c;tools存放压缩包&#xff0c;training用于解压后安装jdk和hadoop的路径。 1&#xff09;回到路径为 / 的位置 cd /2) 创建 tools 和 training mkdir toolsmkdir training3) 进入tools文件夹 …