如何将数据转换为正态分布

时间:2018-09-18 15:09:40

标签: python logic normalization transformation data-science

我有一个数据集,包含6个月内3万名客户的浏览量。它还包含以下内容:

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

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

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

返回0.0表示数据不遵循正态分布。

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

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

1 个答案:

答案 0 :(得分:1)

在我工作的区域中,我们通常对数转换数据(可能与您一样)是异方差的。在我的区域(质谱法)中,小值比大值的可能性要大得多,所以我们最终得到了指数分布。

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

类似

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

当然,在进行转换之前,您还需要消除所有零。

Image showing pre Vs post log transform