如何在 python 中转换数据(对数、平方根、立方根)
许多统计测试假设数据集呈正态分布。然而,实际情况往往并非如此。
解决此问题的一种方法是使用以下三种变换之一来变换数据集中值的分布:
1. 对数变换:将响应变量从 y 变换为log(y) 。
2. 平方根变换:将响应变量从 y 变换为√y 。
3. 立方根变换:将响应变量从 y 变换为y 1/3 。
通过执行这些转换,数据集通常变得更加正态分布。
以下示例展示了如何在 Python 中执行这些转换。
Python 中的日志转换
以下代码演示如何对变量执行对数变换并创建并排图来显示数据的原始分布和对数变换分布:
import numpy as np import matplotlib. pyplot as plt #make this example reproducible n.p. random . seeds (0) #create beta distributed random variable with 200 values data = np. random . beta (a= 4 , b= 15 , size= 300 ) #create log-transformed data data_log = np. log (data) #define grid of plots fig, axs = plt. subplots (nrows= 1 , ncols= 2 ) #create histograms axs[0]. hist (data, edgecolor=' black ') axs[1]. hist (data_log, edgecolor=' black ') #add title to each histogram axs[0]. set_title (' Original Data ') axs[1].set_title(' Log-Transformed Data ')
请注意对数变换后的分布比原始分布更服从正态分布。
它仍然不是完美的“钟形”,但它比原始分布更接近正态分布。
Python 中的平方根变换
以下代码演示如何对变量执行平方根变换并创建并排图来显示数据的原始分布和平方根变换后的分布:
import numpy as np import matplotlib. pyplot as plt #make this example reproducible n.p. random . seeds (0) #create beta distributed random variable with 200 values data = np. random . beta (a= 1 , b= 5 , size= 300 ) #create log-transformed data data_log = np. sqrt (data) #define grid of plots fig, axs = plt. subplots (nrows= 1 , ncols= 2 ) #create histograms axs[0]. hist (data, edgecolor=' black ') axs[1]. hist (data_log, edgecolor=' black ') #add title to each histogram axs[0]. set_title (' Original Data ') axs[1].set_title(' Square Root Transformed Data ')
请注意平方根变换后的数据比原始数据更呈正态分布。
Python 中的立方根变换
以下代码演示如何对变量执行立方根变换并创建并排图来显示数据的原始分布和立方根变换分布:
import numpy as np import matplotlib. pyplot as plt #make this example reproducible n.p. random . seeds (0) #create beta distributed random variable with 200 values data = np. random . beta (a= 1 , b= 5 , size= 300 ) #create log-transformed data data_log = np. cbrt (data) #define grid of plots fig, axs = plt. subplots (nrows= 1 , ncols= 2 ) #create histograms axs[0]. hist (data, edgecolor=' black ') axs[1]. hist (data_log, edgecolor=' black ') #add title to each histogram axs[0]. set_title (' Original Data ') axs[1].set_title(' Cube Root Transformed Data ')
请注意立方根变换后的数据比原始数据更加正态分布。