【问题标题】:How to convert data into normal distribution如何将数据转换为正态分布
【发布时间】:2019-02-22 16:09:15
【问题描述】:

我有一个数据集,其中包含 30k 客户在 6 个月内的页面浏览量。它还包括以下内容:

  • 使用的唯一操作系统数
  • 唯一浏览器用户数
  • 使用的唯一 cookie 数量 所有这些数字都是在六个月内得出的。

现在我确实尝试使用以下方法进行正常测试:

from scipy.stats import normaltest
k2, p = normaltest(df)
print(p)

返回 0.0 表示数据不服从正态分布。

现在我想知道这是为什么?我认为通常随着大小的增加,我们会看到数据中的正态分布,因为数据的大小为 30k,我无法理解为什么它不是正态分布的。

我确实尝试将它们转换为 Z 分数,但仍然没有运气。我可以转换我的数据以使其具有正态分布吗?有什么方法可以做到吗?

【问题讨论】:

  • 我认为你误解了central limit theorem。您无法更改数据的分布——它就是这样。如果您有一组 IID 随机变量,则总和趋于正态分布。经典的例子是掷 N 个骰子并将它们的结果相加。
  • 我想建议你绘制你的数据,首先是直方图。我想你会看到你的数据有什么问题。还提供一些来自您的 df 的示例行。
  • “我认为通常随着大小的增加,我们会看到数据中的正态分布” 据我了解,这并不是中心极限定理所说的。相反,它说如果你有足够的样本,那么样本平均值的分布就会变得正常。

标签: python logic normalization transformation data-science


【解决方案1】:

在我工作的领域中,我们通常记录转换数据,这可能像您的那样是异方差的。在我的领域(质谱)中,小值的可能性远大于大值,因此我们最终得到指数分布。

我猜您的数据会看起来像我的数据,在这种情况下,您需要对数据进行对数转换以使其呈正态分布。我会这样做,以便我可以应用 t 检验和其他统计模型。

类似

df_visits = df_visits.apply(lambda x: np.log(x))

当然,在记录转换之前,您还需要去掉所有零。

Image showing pre Vs post log transform

【讨论】:

  • 更一般地说,OP 也可能对 Box-Cox 变换感兴趣,它等于 lambda 等于零的对数变换 en.wikipedia.org/wiki/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2016-03-04
相关资源
最近更新 更多