Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中概率累计分布函数(CDF)分析

Python中概率累计分布函数(CDF)分析

作者头像
用户8949263
发布于 2022-05-25 08:45:54
发布于 2022-05-25 08:45:54
13.1K00
代码可运行
举报
运行总次数:0
代码可运行

PDF、CDF、CCDF图的区别

PDF:连续型随机变量的概率密度函数是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。

概率密度函数,描述可能性的变化情况,比如正态分布密度函数,给定一个值, 判断这个值在该正态分布中所在的位置后, 获得其他数据高于该值或低于该值的比例。

CDF:能完整描述一个实数随机变量x的概率分布,是概率密度函数的积分。随机变量小于或者等于某个数值的概率P(X<=x)即:F(x) = P(X<=x)。

可使用 CDF 确定取自总体的随机观测值将小于或等于特定值的概率。还可以使用此信息来确定观测值将大于特定值或介于两个值之间的概率。

对于所有实数x,CDF(cumulative distribution function),与概率密度函数PDF(probability density function)相对。任何一个CDF,是一个不减函数,累积和为1。累计分段概率值就是所有比给定x小的数在数据集中所占的比例。任意特定点处的填充x的 CDF 等于 PDF 曲线下直至该点左侧阴影面积。

←概率密度函数PDF→

图中阴影面积=随机选择一个小于x的值的概率=总体中小于x的所有值所占比例

上面的pdf描述了CDF的变化趋势,即曲线的斜率。

CCDF:互补累积分布函数(complementary cumulative distribution function),是对连续函数,所有大于a的值,其出现概率的和。CDF 曲线从 0% 的概率上升到 100% 的概率,而 CCDF 曲线则从 100% 的概率下降到 0% 的概率。

累积分布函数(CDF)=∫PDF(曲线下的面积 = 1 或 100%)。

互补累积分布函数(CCDF)= 1-CDF。

PDF与CDF对比示意图

Python 中使用scipy.stats.norm.ppf()计算 CDF

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

# 均值10,方差1,正态分布模拟数据
data = np.random.normal(10, 1, 100)

#计算正态概率密度函数在x处的值
def norm_dist_prob(theta):
    y = norm.pdf(theta, loc=np.mean(data), scale=np.std(data))
    return y

#计算正态分布累积概率值
def norm_dist_cdf(theta):
    y = norm.cdf(theta,loc=10,scale=1)
    return y
    
#利用ppf找到适合的横坐标,百分点函数
#ppf分位点函数(CDF的逆)即累计分布函数的逆函数(分位点函数,给出分位点返回对应的x值)。
#scipy.stats.norm.ppf(0.95, loc=0,scale=1)返回累积分布函数中概率等于0.95对应的x值(CDF函数中已知y求对应的x)。
x = np.linspace(norm.ppf(0.01,loc=np.mean(data), scale=np.std(data)),
                norm.ppf(0.99,loc=np.mean(data), scale=np.std(data)), len(data))  #linspace() 函数返回指定间隔内均匀间隔数字的 ndarray。

y1=norm_dist_prob(x)
y2=norm_dist_cdf(x)
plt.plot(x, y1,'g',label='pdf')
plt.plot(x, y2,'r',label='cdf')
plt.show()

←PDF与CDF分布曲线对比→

Python中计算累积分布函数

利用某设备三种工况条件下监测时间序列数据,对比分析不同工况下设备运行性能差异。这里数据大家可自行构造测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#CDF数据处理
def Cumsum_cdf(DATA):
    denominator = len(DATA['VALS'])
    Data1 = pd.Series(DATA['VALS'])

    # #利用value_counts方法进行分组频数计算
    Fre=Data1.value_counts()
    # #对获得的表格整体按照索引自小到大进行排序
    Fre_sort=Fre.sort_index(axis=0,ascending=True)
    # # 每个数据出现频数除以数据总数才能获得该数据的概率
    # #重置表格索引
    Fre_df=Fre_sort.reset_index()
    # #将频数转换成概率
    Fre_df['VALS']=Fre_df['VALS']/denominator
    # #将列表列索引重命名
    Fre_df.columns=['Rds','Fre']

    # # 将数据列表从小到大排列,然后将每个数据出现的概率进行叠加
    # #利用cumsum函数进行概率的累加并按照顺序添加到表格中
    Fre_df['cumsum']=np.cumsum(Fre_df['Fre'])

    return Fre_df
    
def Cumulative_Distribution_Function(DATA,VAL1 =300):
    import matplotlib.pyplot as plt
    from scipy.special import jn, jn_zeros
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

    df_A1,df_A2,df_A3 = DATA
    #cdf数据处理函数,添加三条曲线
    Fre_A1 = Cumsum_cdf(df_A1[df_A1.VALS > 0])
    Fre_A2 = Cumsum_cdf(df_A2[df_A2.VALS > 0])
    Fre_A3 = Cumsum_cdf(df_A3[df_A3.VALS > 0])

    # 创建画布,只有一张图,也可以多张
    # plot = plt.figure()
    fig, ax1= plt.subplots(figsize=(8, 4), dpi=200)
    ax1.spines["right"].set_visible(False)
    ax1.spines["top"].set_visible(False)
    ax1.grid(ls="--", lw=0.25, color="#4E616C")

    # 按照Rds列为横坐标,累计概率分布为纵坐标作图
    #添加三条数据曲线
    ax1.plot(Fre_A1['Rds'], Fre_A1['cumsum'], label=f'工况1', mfc="white", ms=5)
    ax1.plot(Fre_A2['Rds'], Fre_A2['cumsum'], label=f'工况2', mfc="white", ms=5)
    ax1.plot(Fre_A3['Rds'], Fre_A3['cumsum'], label=f'工况3', mfc="white", ms=5)


    # # 图的标题
    ax1.legend(loc='upper left',
              frameon=False,
              edgecolor="None",fontsize=8)

    #峰值负载
    upper_peak = max(Fre_A1['Rds'].max(),Fre_A2['Rds'].max(),Fre_A3['Rds'].max())

    f1_A25 = Fre_A3[Fre_A3['Rds'] / VAL1 >= 0.25]["cumsum"].to_list()[0]
    f1_A50 = Fre_A3[Fre_A3['Rds'] / VAL1 >= 0.5]["cumsum"].to_list()[0]

    # # 显示坐标点横线、竖线
    peak = round(upper_peak/VAL1,2)*100
    
    # # 峰值点负载率
    ax1.annotate(
        f"$({peak}$%$,100$%$)$", # 标注文字
        (upper_peak,1),
        # size="small",#medium
        xytext=(-65, -40),
        textcoords="offset points",
        fontsize=10,
        arrowprops=dict(
            arrowstyle="->",
            connectionstyle="arc3,rad=-0.3"), )

    #25%50%分界线
    plt.vlines(VAL1 * 0.25, 0,f1_A25, colors="c", linestyles="dashed")

    plt.vlines(VAL1 * 0.5, 0, f1_A50, colors="c", linestyles="dashed")

    #峰值线
    plt.vlines(upper_peak, 0,1,colors="r", linestyles="dashed")


    #添加阴影区域,工况1
    X = Fre_A1['Rds'].tolist()
    C = Fre_A1['cumsum'].tolist()
    x = np.array([i for i in X])
    plt.fill_between(x,C,where=(VAL1*0.5*0.8 < x) & (x< VAL1*0.5),facecolor='green')

    #标注工况3,50%负载概率值
    ax1.annotate(
        f"$(50$%$,{round(f1_A50,2)*100}$%$)$", # 标注文字
        (VAL1*0.5,f1_A50),
        # size="small",#medium
        xytext=(-65, -40),
        textcoords="offset points",
        fontsize=10,
        arrowprops=dict(
            arrowstyle="->",
            connectionstyle="arc3,rad=-0.3"), )

    #标注分界线名称
    ax1.text(
        VAL1 * 0.27, 0.10,
        f'25%负载率界限',
        va="top", ha="left",
        size=8)

    ax1.text(
        VAL1 * 0.52, 0.10,
        f'50%负载率界限',
        va="top", ha="left",
        size=8)

    #主题名称
    team_ = ax1.text(
        x=0, y=ax1.get_ylim()[1] + ax1.get_ylim()[1] / 20,
        s=f"Cumulative probability",
        color="#4E616C",
        va='center',
        ha='left',
        size=8
    )
    # 横轴名
    ax1.set_xlabel("用电量(kWh)",fontsize =8)

    plt.savefig(r".\test.png",bbox_inches="tight")

    return plt

←某设备不同工况实际用能运行曲线对比→

利用 CDF(概率累积分布函数)分析数据集分布情况。分析概率分布函数曲线可以快速、简明地描述并量化由不同工况下导致的长期电能消耗中的细节差异。

注:

1、数据形式--dataframe

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 外部导入数据
DF = pd.read_excel(r".\ST\分析数据.xlsx")
df_A1 = DF[["工况1"]].copy()
df_A1 = df_A1.rename(columns={'工况1': 'VALS'})
df_A2 = DF[["工况2"]].copy()
df_A2 = df_A2.rename(columns={'工况2': 'VALS'})
df_A3 = DF[["工况3"]].copy()
df_A3 = df_A3.rename(columns={'工况3': 'VALS'})
DATA = df_A1,df_A2,df_A3

VAL1 =300,VAL1这里表示设备功率值,其通常也作为异常参考阈值。这里不展开业务相关分析。

2、标注角度可按下图调整,更多.annotate()参数用法可上网查询。

3、图形美化自定义---参考以往推文一图胜千言,图解Matplotlib !

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python数据分析实例 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
机器学习统计概率分布全面总结(Python)
在平时的科研中,我们经常使用统计概率的相关知识来帮助我们进行城市研究。因此,掌握一定的统计概率相关知识非常有必要。
算法进阶
2023/12/26
6390
机器学习统计概率分布全面总结(Python)
深度好文 | 探索 Scipy 与统计分析基础
云朵君推荐 本文部分内容仅展示部分核心代码,本文提供含完整代码的完整PDF版本下载,获取方式:关注公众号 「数据STUDIO」并回复【210512】获取。若你对代码不感兴趣,直接略过,不影响阅读。
数据STUDIO
2021/06/24
3.1K0
【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
norm.rvs通过loc和scale参数可以指定随机变量的偏移和缩放参数,这里对应的是正态分布的期望和标准差。size得到随机数数组的形状参数。(也可以使用np.random.normal(loc=0.0, scale=1.0, size=None))
汀丶人工智能
2022/12/21
1.9K0
【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
python中Copula在多元联合分布建模可视化2实例合集|附数据代码
Copula是一个用于描述多个随机变量之间相关性的函数,它将这些变量的联合分布与其边缘分布连接起来。Copula函数由Sklar定理所定义,该定理指出,对于N个随机变量的联合分布,可以将其分解为这N个变量各自的边缘分布和一个Copula函数。
拓端
2024/12/03
2760
python中Copula在多元联合分布建模可视化2实例合集|附数据代码
机器学习数学基础:常见分布与假设检验
所谓机器学习和深度学习, 背后的逻辑都是数学, 所以数学基础在这个领域非常关键, 而统计学又是重中之重, 机器学习从某种意义上来说就是一种统计学习。
Datawhale
2020/07/09
3.4K0
机器学习数学基础:常见分布与假设检验
常见概率分布
在一次实验中,事件A出现的概率为 ,不出现的概率为 ,若用 记事件A出现的次数,则 仅取值0或1,相应的概率分布为
用户3577892
2020/06/10
7830
概率论04 随机变量
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
Vamei
2018/09/25
9990
概率论04 随机变量
数据挖掘学习小组之(概率分布)
随机变量(random variable)表示随机试验各种结果的实值单值函数。随机事件不论与数量是否直接有关,都可以数量化,即都能用数量化的方式表达!
数据处理与分析
2019/08/05
7570
概率论04 随机变量
我们了解了“样本空间”,“事件”,“概率”。样本空间中包含了一次实验所有可能的结果,事件是样本空间的一个子集,每个事件可以有一个发生的概率。概率是集合的一个“测度”。 这一讲,我们将讨论随机变量。随机变量(random variable)的本质是一个函数,是从样本空间的子集到实数的映射,将事件转换成一个数值。根据样本空间中的元素不同(即不同的实验结果),随机变量的值也将随机产生。可以说,随机变量是“数值化”的实验结果。在现实生活中,实验结果可以是很“叙述性”,比如“男孩”,“女孩”。在数学家眼里,这些文字化
Vamei
2018/01/18
9470
概率论04 随机变量
连载 | 概率论与数理统计(3) – 一维离散型随机变量及其Python实现
上一小节对随机变量做了一个概述,这一节主要记录一维离散型随机变量以及关于它们的一些性质。对于概率论与数理统计方面的计算及可视化,主要的Python包有scipy, numpy和matplotlib等。
小莹莹
2018/07/24
1.3K0
连载 | 概率论与数理统计(3) – 一维离散型随机变量及其Python实现
用Python结合统计学知识进行数据探索分析
# 导入相关模块import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns %matplotlib inline %config InlineBackend.figure_format = 'retina'
IT阅读排行榜
2018/08/17
1.2K0
用Python结合统计学知识进行数据探索分析
在统计学中概率分布中的概率密度函数PDF,概率质量PMF,累积分布CDF
一. 概念解释 PDF:概率密度函数(probability density function), 在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。 PMF : 概率质量函数(probability mass function), 在概率论中,概率质量函数是离散随机变量在各特定取值上的概率。 CDF : 累积分布函数 (cumulative distribution function),又叫分布函数,是概率密度函
学到老
2018/03/19
3.3K0
概率和分布
概率空间:sample space,events space和probability function
esse LL
2024/08/07
1290
SciPy从入门到放弃
SciPy是一种以NumPy为基础,用于数学、工程及许多其他的科学任务的科学计算包,其使用的基本数据结构是由NumPy模块提供的多维数组,因此Numpy和SciPy协同使用可以更加高效地解决问题。SciPy很适合用于十分依赖数学和数值运算的问题,其内部的模块包括优化模块、线性代数模块、统计模块、傅里叶变化模块、积分模块、信号处理模块、图像处理模块、稀疏矩阵模块、插值模块等。
愷龍
2024/08/15
1740
SciPy从入门到放弃
Python实现 8 个概率分布公式及可视化
概率和统计知识是数据科学和机器学习的核心; 我们需要统计和概率知识来有效地收集、审查、分析数据。
数据STUDIO
2022/05/24
1.3K0
Python实现 8 个概率分布公式及可视化
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
在机器学习的学习旅程中,微积分不仅仅是理论的支撑,更是实际应用的关键工具。上一篇文章中,我们探讨了极限与连续性以及导数的概念与应用,特别是在梯度下降法中的应用。本篇文章将继续深入,重点讲解积分的概念与计算,以及它在机器学习中的实际应用。
半截诗
2025/01/09
1650
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
Python NumPy自定义随机分布生成器
随机数生成是数据分析、模拟和机器学习中的重要组成部分。NumPy 提供了强大的随机数生成工具,涵盖了多种常见分布(如正态分布、均匀分布等)。在实际应用中,经常需要根据特定需求创建自定义的随机分布生成器。
sergiojune
2025/01/15
2220
Python NumPy自定义随机分布生成器
​常见的8个概率分布公式和可视化
来源:Deephub Imba本文约2800字,建议阅读8分钟本文我们将介绍一些常见的分布并通过Python 代码进行可视化以直观地显示它们。 概率和统计知识是数据科学和机器学习的核心;我们需要统计和概率知识来有效地收集、审查、分析数据。 现实世界中有几个现象实例被认为是统计性质的(即天气数据、销售数据、财务数据等)。这意味着在某些情况下,我们已经能够开发出方法来帮助我们通过可以描述数据特征的数学函数来模拟自然。 “概率分布是一个数学函数,它给出了实验中不同可能结果的发生概率。” 了解数据的分布有助于更好
数据派THU
2022/04/29
1.1K0
​常见的8个概率分布公式和可视化
单变量图的类型与直方图绘图基础
单变量图(chart for one variable)是指使用数据组的一个变量进行相应图的绘制。想要可视化这个变量,就需要根据不同的数据变量类型绘制图。数据变量分为连续变量(continuous variable)和离散型变量(discrete variable)。
timerring
2023/10/13
7900
单变量图的类型与直方图绘图基础
概率论06 连续分布
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
Vamei
2018/09/25
8250
概率论06 连续分布
相关推荐
机器学习统计概率分布全面总结(Python)
更多 >
LV.1
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
1高级总监擅长4个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验