改进分析的五种鲜为人知的数据转换技术

译文 精选
开发 前端
数据转换是通过某些计算或方法将数据转换为另一种值以更好地表示数据的过程。它通常用于满足某些统计测试假设或澄清数据可视化。有许多数据转换公式,但不是每种转换都是一样的、都能满足你的需求。

译者 | 布加迪

审校 | 重楼

数据转换是通过某些计算或方法将数据转换为另一种值以更好地表示数据的过程。它通常用于满足某些统计测试假设或澄清数据可视化。有许多数据转换公式,但不是每转换都是一样、都能满足的需求。

一些流行的数据转换(比如正态转换和对数转换占据主导地位,因为它们很容易解释,并且在不牺牲太多信息的情况下实现转换目的。

本文将探讨五种鲜为人知的数据转换,它们有望改进分析。

1. Box-Cox转换

Box-Cox换是一种使数据严格遵循正态分布λ参数控制的技术。由于我们可以控制转换的参数,因此它比简单的对数转换灵活得多。

当我们的数据必须严格遵循正态分布或我们想要稳定数据方差时,通常使用Box-Cox转换。通过改变λ参数,转换器可以有多种转换形式。比如说λ = 1表示数据没有变化,λ = 0表示对数变换,而任何其他λ值都是对数据进行幂变换。

我们可以用下面的Python代码实现转换。

import numpy as np
from scipy.stats import boxcox

data = np.random.exponential(scale=2, size=1000)

transformed_data = boxcox(data, lmbda = 0.5)

一试各种λ,看看它是否适合的分析。

2. Yeo-Johnson转换

Box-Cox转换是一种出色的数据转换技术,因为我们可以控制转换量,但它有一个缺点:它只适用于正值。基于Box-Cox转换Yeo-Johnson转换可以处理负值。

Box-Cox转换一样,Yeo-Johnsonλ参数控制,可以根据的要求进行更改。此外,如果需要满足线性模型假设,它适用于改善数据正态性和均方差。

可以使用以下代码运用转换。

import numpy as np
from scipy.stats import yeojohnson

data = np.random.normal(loc=0, scale=2, size=1000)
transformed_data = yeojohnson(data, lmbda = 0.5)

3. 秩转换

转换是一种非参数方法,它通过在数据排序时用数据秩替换数据对数据进行转换比如说,将最小的数据点转换1,下一个最小的数据点转换2,以此类推。它通常用于值比秩更不重要的情况。

当我们的数据有很多异常值,或者数据规模可以忽略时,秩转换很有用。这种转换可以降低异常值的影响,因为普遍的正态转换会受到异常值的影响。秩转换也常与参数统计检验结合使用。

我们可以用下面的Python代码进行秩转换

from scipy.stats import rankdata
import numpy as np

data = np.random.normal(loc=0, scale=2, size=1000)

ranked_data = rankdata(data)

4. 倒数转换

倒数转换是一种数据转换技术,将数据值替换倒数(1/x),其中x是可以自己决定的值。当处理倾斜的数据分布大多数数据值都很大时,它很有用。倒数转换会尽量减少大值的影响,以便数据集适用于任何后续方法。

这种转换适用于数据包含递减关系的情况,因为它可以帮助更线性地表示数据。然而,如果数据包含零或负值,倒数转换就不好了,因为这种转换不能正确地表示信息。

至于Python代码实现,可以使用以下代码

import numpy as np

data = np.random.exponential(scale=2, size=1000) + 1
reciprocal_transformed_data = np.reciprocal(data)

5. 分箱转换(离散化)

分箱转换或离散化是一种数据转换技术,它将连续的数据值分成一定的区间(分箱)。转换将数据值替换成分箱标签。用的转换技术将数据预处理具有秩的分类数据,有助于简化数据并降低噪声。

这种转换是有用的,特别是对于那些得益于分类输的技术,比如决策树。它对于处理数据异常值和尽量减小影响也很有用。然而必须正确地决定分箱区间,因为它可能影响数据转换。可以尝试遵循许多经验法则。比如说,Sturges规则表示分箱的数量=log(N) + 1,其中N是数据的数量。

对于使用Sturges 规则的分箱转换,可以使用以下Python代码

import numpy as np
import pandas as pd
data = np.random.normal(loc=0, scale=1, size=1000)num_bins = int(np.ceil(np.log2(len(data)) + 1))
binned_data = pd.cut(data, bins=num_bins, labels=False)

结论

数据转换是一种数据预处理技术,它将原始数据转换遵循某些计算的另一个值。数据转换在许多情况下都很有用,可以遵循特定的数据分布或更直观地获得洞察力。有许多用的数据转换,但鲜为人知因此本文探讨应该了解的五种转换技术。

原文标题:5 Lesser-Known Data Transformation Techniques for Better Analysis,作者:Cornellius Yudha Wijaya

责任编辑:华轩 来源: 51CTO
相关推荐

2021-07-07 10:59:48

python代码编程语言

2023-05-29 19:39:40

Bash脚本

2021-08-03 09:55:37

Python函数编程语言

2010-01-07 10:05:51

IT顾问特质

2024-05-07 00:00:00

工具类开发者功能

2024-10-31 11:19:33

2011-05-03 13:13:52

编程PHPJava

2022-06-23 10:17:00

Git技术Linux

2014-04-22 16:38:12

GitHubGitHub 使用技巧

2018-12-10 19:30:45

2023-04-23 15:11:26

2022-05-30 09:01:13

CSS技巧前端

2009-09-14 09:45:20

Chrome谷歌操作系统

2019-10-08 16:24:33

Chrome浏览器

2014-07-29 14:25:43

Unix命令

2009-07-09 17:38:35

2015-08-18 10:57:52

机房制冷数据中心

2015-06-09 11:12:31

Swift语言Swift特性

2024-04-30 08:32:18

CSS元素网格

2017-11-08 14:55:16

Linux命令sudo
点赞
收藏

51CTO技术栈公众号