Python でデータを変換する方法 (対数、平方根、立方根)
多くの統計テストは、データセットが正規分布していることを前提としています。ただし、実際にはそうではないことがよくあります。
この問題を解決する 1 つの方法は、次の 3 つの変換のいずれかを使用してデータ セット内の値の分布を変換することです。
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 ')
立方根に変換されたデータが元のデータよりもはるかに正規分布していることに注目してください。