You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power Query中用Python生成正态(高斯)分布列表

在Power Query中用Python实现价格数据的高斯分布匿名化

核心思路

通过Python的NumPy库生成均值为1、可自定义标准差的正态分布随机数,与原价格相乘,既能匿名化数据,又能保留原数据的整体分布特征和数值量级。


步骤1:启用Power Query的Python集成

确保你的Excel/Power BI已配置好Python环境:

  • Power BI:依次点击「文件」→「选项和设置」→「选项」→「Python脚本设置」,指定本地Python安装路径
  • Excel:「数据」→「获取数据」→「自其他来源」→「自Python脚本」,首次使用会提示配置Python路径

步骤2:添加Python列生成匿名化价格

  1. 将你的价格数据加载到Power Query编辑器中,确认包含目标价格列(比如列名为原始价格)
  2. 点击「添加列」选项卡,选择「Python脚本」
  3. 在弹出的编辑框中粘贴以下代码(记得替换原始价格为实际列名):
    import numpy as np
    
    # 生成均值=1(保证价格水平接近原数据)、标准差=0.1(控制波动幅度,可调整)的正态分布随机数
    df['匿名化价格'] = df['原始价格'] * np.random.normal(loc=1, scale=0.1, size=len(df))
    # 可选:保留两位小数,模拟真实价格格式
    df['匿名化价格'] = df['匿名化价格'].round(2)
    
  4. 点击「确定」,Power Query会自动运行脚本并生成新的匿名化价格列

步骤3:验证分布一致性

为确保匿名化后的数据保留原分布特征:

  • 可在Power Query中选中原始价格和匿名化价格列,点击「可视化」选项卡生成直方图,对比两者的分布形态
  • 或在Python脚本中添加分布校验代码:
    import matplotlib.pyplot as plt
    
     # 绘制双直方图对比
     plt.hist(df['原始价格'], alpha=0.5, label='原始价格')
     plt.hist(df['匿名化价格'], alpha=0.5, label='匿名化价格')
     plt.legend()
     plt.show()
    

纯M语言替代方案(无Python时使用)

如果无法启用Python,可通过Box-Muller变换手动在M语言中实现正态分布随机数(随机数质量略逊于NumPy):

let
    源 = 你的数据源,
    添加均匀随机数1 = Table.AddColumn(源, "随机数1", each Number.Random()),
    添加均匀随机数2 = Table.AddColumn(添加均匀随机数1, "随机数2", each Number.Random()),
    计算正态随机数 = Table.AddColumn(添加均匀随机数2, "正态随机数", each 
        Sqrt(-2 * Ln([随机数1])) * Cos(2 * Number.PI() * [随机数2]) * 0.1 + 1 // 均值1,标准差0.1
    ),
    生成匿名化价格 = Table.AddColumn(计算正态随机数, "匿名化价格", each [原始价格] * [正态随机数], type number),
    清理冗余列 = Table.RemoveColumns(生成匿名化价格, {"随机数1", "随机数2", "正态随机数"})
in
    清理冗余列

内容的提问来源于stack exchange,提问作者Aarón Alberto Garza Aguirre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:22:16