Python统计分析(1)——几种重要的概率分布:正态分布

2018年10月12日

正态分布

在统计学发展历史中,正态分布有着非常重要的地位,因为它允许从数学上近似不确定性和变异性。

虽然原始数据通常并不符合正态分布,但误差通常是符合正态分布的,对于大规模样本的均值和总数,也是一样的。

要将数据转换为z分数,需要减去数据的均值,再除以标准偏差。这样,所生成的数据才可以与正态分布进行对比。

标准化:标准化(也称为归一化),通过减去均值并除以标准偏差,将所有变量置于同一尺度。该方式避免了变量的原始测量规模对模型产生过度的影响。
我们一般称如上的标准化的值为z分数。这时,测量值可以用“偏离均值的标准偏差”表示,这样,变量对模型的影响就不会受到原始变量规模的影响。

绘制正态分布曲线

#导入工具包

import numpy as np

import matplotlib.pyplot as plt #绘图模块

import scipy.stats as stats  #该模块包含了所有的统计分析函数

import matplotlib.style as style

from IPython.core.display import HTML

​

#PLOTTING CONFIG 绘图配置

%matplotlib inline

style.use('fivethirtyeight')

plt.rcParams['figure.figsize']=(14,7)

plt.figure(dpi=100)

<matplotlib.figure.Figure at 0x1bd827ec6d8>

<matplotlib.figure.Figure at 0x1bd827ec6d8>

#PDF 概率密度函数 

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100))) #从(-4,4)中随机选取100个数,绘制该事件的概率密度函数

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)#对曲线内部进行填充

​

#CDF 累积概率密度函数 

plt.plot(np.linspace(-4,4,100),stats.norm.cdf(np.linspace(-4,4,100))) #cdf函数表示之前的概率累积的结果,-4处为0,4处为1

​

#LEGEND 图例

plt.text(x=-1.5,y=0.7,s="pdf(normed)",rotation=.65,weight="bold",color="#008fd5")

plt.text(x=-0.4,y=0.5,s="cdf",rotation=.65,weight="bold",color="#fc4f30")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

​

在这里插入图片描述
#可以看出pdf是一个标准的正态分布曲线,均值为0,方差为1,符合该事件的规律。

#CDF 累积概率密度函数

plt.plot(np.linspace(-4,4,100),stats.norm.cdf(np.linspace(-4,4,100))) #cdf函数表示之前的概率累积的结果,-4处为0,4处为1

#LEGEND 图例

plt.text(x=-0.4,y=0.5,s="cdf",rotation=.65,weight="bold",color="#fc4f30")

Text(-0.4,0.5,'cdf')

在这里插入图片描述

均值

#不同的均值绘制出来的正态分布曲线形状也不同

​

#PDF  MU默认为0时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#PDF MU=2时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),loc=2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#PDF MU=-2时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),loc=-2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#LEGEND 图例

plt.text(x=-1,y=.35,s="$ \mu=0$",rotation=.65,alpha=.75,weight="bold",color="#008fd5")

plt.text(x=1,y=.35,s="$ \mu=2$",rotation=.65,alpha=.75,weight="bold",color="#fc4f30")

plt.text(x=-3,y=.35,s="$ \mu=-2$",rotation=.65,alpha=.75,weight="bold",color="#e5ae38")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

<matplotlib.lines.Line2D at 0x1bd859b9208>

在这里插入图片描述
#标准差

#当标准差不同时,正态分布曲线的形状也不同

plt.figure(dpi=100)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=1))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=1),alpha=.15)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=2),alpha=.15)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=0.5))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=0.5),alpha=.15)

​

#LEGEND 图例

plt.text(x=-1,y=.35,s="$ \sigma=1$",rotation=.65,alpha=.75,weight="bold",color="#008fd5")

plt.text(x=2,y=.15,s="$ \sigma=2$",rotation=.65,alpha=.75,weight="bold",color="#fc4f30")

plt.text(x=0,y=.6,s="$ \sigma=0.5$",rotation=.65,alpha=.75,weight="bold",color="#e5ae38")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

<matplotlib.lines.Line2D at 0x1bd8556a780>

在这里插入图片描述
#只有标准差不同时,标准差越大,正态分布曲线越平缓,标准差越小,正态分布曲线越陡。

获取正态分布的随机几个样本
可以使用norm.rvs()其中默认均值=0,方差=1,也可以自己指定。

from scipy.stats import norm

#获得1个正态分布的随机样本

print(norm.rvs(),end="\n\n")

​

#获得10个正态分布的随机样本

print(norm.rvs(size=10),end="\n\n")

​

#自己指定均值和方差

print(norm.rvs(loc=1,scale=0.1),end="\n\n")

-0.8316623062885056

[-0.02327842  0.62434293 -1.09564122  0.7642425   1.5418008   0.19240094
 -0.67902596  1.89146273 -0.33651528  1.39595893]

0.9700560621457974

PDF 概率密度函数 (Probability Density Function)

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

style.use('fivethirtyeight')

plt.rcParams['figure.figsize']=(14,7)

​

**#随机变量X、Y的相对概率**

x=-1

y=2

print("pdf(x)= {}\npdf(y)= {}".format(norm.pdf(x),norm.pdf(y)))

pdf(x)= 0.24197072451914337
pdf(y)= 0.05399096651318806

#绘制连续的概率密度曲线

x_s=np.linspace(-3,3,100)

y_s=norm.pdf(x_s)

plt.scatter(x_s,y_s)

<matplotlib.collections.PathCollection at 0x1bd85aca6a0>

在这里插入图片描述

CDF 累积概率密度函数 (Cumnlative Probability Density Function) 可以指定一个范围求累积概率密度


from scipy.stats import norm

#X小于0.3的概率密度之和
print("P(x<0.3)={}".format(norm.cdf(0.3)))
P(x<0.3)=0.6179114221889526

#X大于-0.2,小于0.2的概率密度之和

print("P(-0.2<x<0.2)={}".format(norm.cdf(0.2)-norm.cdf(-0.2)))

P(-0.2<x<0.2)=0.15851941887820603


  • 9
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用概率论中的随机变量分布来进行统计计算。常见的离散型分布包括二项分布和泊松分布,连续性分布包括正态分布、均匀分布和指数分布等。这些分布可以用来计算概率、期望和方差等统计量。 对于正态分布,可以使用scipy.stats库中的norm模块进行计算。例如,可以使用norm.cdf函数计算小于某个值的概率,使用norm.ppf函数计算给定累积概率时的反函数值。代码示例如下: ``` from scipy.stats import norm # 计算小于40的概率 p1 = norm.cdf(40, loc=50, scale=10) # 计算30到40之间的概率 p2 = norm.cdf(40, loc=50, scale=10) - norm.cdf(30, loc=50, scale=10) # 计算小于2.5的概率 p3 = norm.cdf(2.5, 0, 1) # 计算-1.5到2之间的概率 p4 = norm.cdf(2) - norm.cdf(-1.5) # 计算累计概率为0.025时的反函数值 q1 = norm.ppf(0.025, loc=0, scale=1) # 计算累计概率为0.975时的反函数值 q2 = norm.ppf(0.975, 0, 1) print(p1, p2, p3, p4, q1, q2) ``` 对于计算随机变量的概率分布均值方差,可以使用numpy库进行计算。代码示例如下: ``` import numpy as np # 假设有一个数据框df,其中包含了不合格品数和概率 mymean = sum(df['不合格品数'] * df['概率']) # 计算均值 myvar = sum((df['不合格品数'] - mymean) ** 2 * df['概率']) # 计算方差 mystd = np.sqrt(myvar) # 计算标准差 print(mymean, myvar, mystd) ``` 以上是关于Python统计学中随机变量的概率分布的一些基本操作和计算方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python统计学03——随机变量的概率分布](https://blog.csdn.net/weixin_46277779/article/details/126673517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值