数据的概率分布以及用python绘制分布图

本文深入探讨了数据科学中常见的数据类型和随机变量概念,包括结构化与非结构化数据、离散与连续数据、以及测量尺度。接着,详细介绍了离散型随机变量的概率分布,如二项分布和泊松分布,以及连续型随机变量的概率分布,如均匀分布、正态分布和卡方分布。此外,通过Python代码展示了如何实现这些概率分布,帮助读者更好地理解和应用这些统计概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基础概念

先来看下数据的类型,常见的数据分类方式有三种:第一种是按照数据的结构属性分类,根据数据的存储形式分为结构化数据和非结构化数据,例如数据库的存储对象基本上都是结构化数据,结构化数据是进行数据分析的基本类型;对于非结构化数据,其存在形式多样化,有视频、音频、图片、影像、文档和文本等形式,对于非结构化数据只有将其转化为结构化数据才能进行数分析。第二种按照数据的连续性特征分为离散型数据和连续性数据;第三种根据数据的测量尺度分为:定类数据、定序数据、定距数据和定比数据。

随机变量

每次试验的结果可以用一个变量的数值来表示,这个变量的取值随偶然因素变化,但又遵从一定的概率分布规律。

离散变量

离散型随机变量是在一定区间内变量取值为有限个或可数个。

连续变量

连续性随机变量就是在一定区间内变量取值有无限个,或数值无法一一列举出来。

期望值

期望值是随机试验在同样的机会下重复多次的结果计算出的等同于“期望”的平均值,期望值也成为数学期望或均值,它是指在一个离散性随机变量实验中每次可能结果的概率乘以其结果的总和。

古典概率

又称为事前概率,是指当随机事件中各种可能发生的结果及其出现的次数都可以由演绎或外推法得知,而无需经过任何统计试验即可计算各种可能发生结果的概率。

条件概率

是指事件A在时间B发生的条件下发生的概率。

二、离散变量概率分布

二项分布

在概率论或统计学中,二项分布是n个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为p。这样的单次成功/失败的试验又称为伯努利试验。当n=1时,二项分布就是伯努利分布。

若进行了n次伯努利试验,成功了x次,失败的次数为n-x,设成功的概率为p,失败的概率为q=1-p,发生这种情况的概率用以下公式表示:(二项分布 x~B(n,p))

P ( X = x ) = C n x p x q n − x = n ! x ! ( n − x ) ! p x q n − x P(X=x)=C_{n}^{x}p^{x}q^{n-x}=\frac{n!}{x!(n-x)!}p^{x}q^{n-x}
P(X=x)=C 
n
x
​    
 p 
x
 q 
n−x
 = 
x!(n−x)!
n!
​    
 p 
x
 q 
n−x
 

二项分布的均值和方差分别为:

μ = ∑ i = 1 n x p ( x ) = n p \mu=\sum_{i=1}^{n}{x}p(x)=np
μ= 
i=1

n
​    
 xp(x)=np

σ 2 = ∑ i = 1 n ( x − μ ) 2 p ( x ) = n p q \sigma^{2}=\sum_{i=1}^{n}{(x-\mu)}^{2}p(x)=npq
σ 
2
 = 
i=1

n
​    
 (x−μ) 
2
 p(x)=npq

泊松分布

泊松分布的概率函数为:

P ( X = k ) = λ k k ! e − λ P(X=k)=\frac{\lambda^{k}}{k!}e^{-\lambda}
P(X=k)= 
k!
λ 
k
 
​    
 e 
−λ
 
, k=0,1…

泊松分布的参数 lambda是单位时间(或单位面积)内随机事件的平均发生次数,泊松分布适合于描述单位时间内随机事件发生的次数。

泊松分布的期望和方差均为lambda 。

泊松分布是由二项分布推导而来的,当二项分布的n很大而p很小时,泊松分布可作为二项分布的近似,其中 lambda为np, 通常当n>=20,p<=0.05时,就可以用泊松公式近似的计算。

三、连续变量概率分布

均匀分布

均匀概率分布是古典概率分布的连续形式,是指随机事件的可能结果是连续型数据变量,所有的连续型数据结果所对应的概率相等。也叫矩形分布,它是对称概率分布,在相同长度间隔的分布概率是等可能的。均匀分布由两个参数a,b定义,他们是数轴上的最小值和最大值,U(a,b)。

其概率密度函数f(x):

当a<x<b时,
f ( x ) = 1 b − a f(x)=\frac{1}{b-a}
f(x)= 
b−a
1
​    
 

当x<a,x>b时,
f ( x ) = 0 f(x)=0
f(x)=0

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

E ( x ) = a + b 2 E(x)=\frac{a+b}{2}
E(x)= 
2
a+b
​    
 
,
V a r ( x ) = ( b − a ) 2 12 Var(x)=\frac{(b-a)^{2}}{12}
Var(x)= 
12
(b−a) 
2
 
​    
 

正态分布

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

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

其概率密度函数为:

f ( x ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) f(x)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^{2}}{2\sigma^{2}})
f(x)= 

​    
 σ
1
​    
 exp(− 
2σ 
2
 
(x−μ) 
2
 
​    
 )

卡方分布

若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布。

Q ∼ χ 2 ( v ) Q\sim\chi^{2}(v)
Q∼χ 
2
 (v)
或者
Q ∼ χ v 2 Q\sim\chi_{v}^{2}
Q∼χ 
v
2
​    
 
,其中v是自由度,v=n-k, k是限制条件数。

贝塔分布

在概率论中,贝塔分布也称B分布,是指一组定义在(0,1)区间的连续概率分布,有两个参数 [公式] 。贝塔分布是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数,在机器学习和数理统计学中有重要应用。

B分布的概率密度函数是:
f ( x ; α , β ) = 1 B ( α , β ) x α − 1 ( 1 − x ) β − 1 f(x;\alpha,\beta)=\frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}
f(x;α,β)= 
B(α,β)
1
​    
 x 
α−1
 (1−x) 
β−1
 

随机变量X服从参数为 [公式] 的B分布通常写作:
X ∼ B e ( α , β ) X\sim Be(\alpha,\beta)
X∼Be(α,β)

四、用Python代码实现常见概率分布

二项分布(伯努利分布)

from scipy import stats as st
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
#防止乱码
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 二项分布
n = 100 
p = 0.25
k = np.arange(0,n)
binomial = st.binom.pmf(k,n,p)
plt.plot(k,binomial,'o-')
plt.title('伯努利分布:n=%i,p=%.2f'%(n,p),fontsize=15)
plt.xlabel('成功次数')
plt.ylabel('成功概率',fontsize=15)
plt.grid(True)#显示轴网格线
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


泊松分布

x = np.random.poisson(lam=6, size=1000)  # lam为λ size为k
pillar = 20
a = plt.hist(x, bins=pillar, density=True, range=[0, pillar], color='g', alpha=0.5)
plt.title('泊松分布',fontsize=15)
plt.xlabel('柱子个数')
plt.ylabel('概率',fontsize=15)
plt.plot(a[1][0:pillar], a[0], 'r')
plt.grid()
plt.show()

1
2
3
4
5
6
7
8
9
10


均匀分布

#PDF 概率分布函数
plt.plot(np.linspace(-3,3,100),stats.uniform.pdf(np.linspace(-3,3,100)))
plt.fill_between(np.linspace(-3,3,100),stats.uniform.pdf(np.linspace(-3,3,100)),alpha=0.15)
plt.text(x=-1.5,y=0.7,s="pdf(uniform)",rotation=65,alpha=0.75,weight="bold",color="g")
1
2
3
4

正态分布

import numpy as np
import matplotlib.pyplot as plt 
import scipy.stats as stats  

#概率密度函数
plt.plot(np.linspace(-3,3,100),stats.norm.pdf(np.linspace(-3,3,100))) #从(-3,3)中随机选取100个数,绘制该事件的概率密度函数
plt.fill_between(np.linspace(-3,3,100),stats.norm.pdf(np.linspace(-3,3,100)),alpha=.15)#对曲线内部进行填充
#注解
plt.text(x=-1,y=0.3,s="pdf(normed)",rotation=.65,weight="bold",color='g')

1
2
3
4
5
6
7
8
9
10


卡方分布

x = np.linspace(0,30,100)
y = st.chi2.pdf(np.linspace(0,30,100),df=3)
#PDF  概率密度函数
plt.plot(x,y)#绘制0到30的卡方分布曲线,给定自由度为3
plt.fill_between(x,y,alpha=0.15) #填充曲线
plt.title(u'卡方分布:自由度为3')
plt.show()
1
2
3
4
5
6
7

————————————————
 

### 如何使用Python绘制概率分布图 #### 使用Matplotlib和SciPy库绘制常见概率分布图 为了展示如何利用Python绘制不同类型的概率分布图,下面提供了几个具体的例子。这些实例涵盖了从简单的直方图到更复杂的连续型分布的概率密度函数(PDF)。 #### 频率分布直方图 对于离散的数据集来说,可以采用`matplotlib.pyplot.hist()`函数来制作频率分布直方图[^1]: ```python import numpy as np import matplotlib.pyplot as plt data = np.random.randn(1000) plt.figure() plt.hist(data, bins=20, edgecolor='black') plt.title('Frequency Distribution Histogram') plt.xlabel('Value') plt.ylabel('Frequency') plt.grid(True) plt.show() ``` #### 卡方分布PDF曲线 当涉及到特定的统计学概念如卡方分布时,则可以通过调用`scipy.stats.chi2.pdf()`计算其概率密度值并绘制成图像[^2]: ```python from scipy import stats X = np.arange(0, 6, 0.25) fig, ax = plt.subplots(figsize=(8, 5)) ax.plot(X, stats.chi2.pdf(X, df=1), label="1 degree of freedom") ax.plot(X, stats.chi2.pdf(X, df=2), label="2 degrees of freedom") ax.plot(X, stats.chi2.pdf(X, df=3), label="3 degrees of freedom") ax.set_title("Chi-Squared Distribution PDFs") ax.legend() plt.show() ``` #### 处理中文标签的二项分布图 如果希望在图表中加入中文说明文字而不现乱码现象,那么可以在设置字体属性时指定合适的字体文件路径或者直接引用已安装的支持汉字显示的字体名称[^3][^5]: ```python n, p = 10, .5 # number of trials and probability of each trial samples = np.random.binomial(n, p, size=1000) plt.figure() plt.hist(samples, weights=np.ones_like(samples)/len(samples), alpha=.75, color='g', edgecolor='w') plt.title(u'二项分布 (Binomial distribution)', fontproperties='SimHei') plt.xlabel(u'成功次数(number of successes)', fontproperties='SimHei') plt.ylabel(u'相对频数(relative frequency)', fontproperties='SimHei') plt.xticks(range(min(samples)-1,max(samples)+2)) for tick in plt.gca().get_xticklabels(): tick.set_fontname("SimHei") plt.show() ``` 通过上述代码片段可以看,在不同的应用场景下可以选择合适的方式来进行可视化表达,并且能够很好地解决可能现的语言字符兼容性问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值