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 ') 

立方根に変換されたデータが元のデータよりもはるかに正規分布していることに注目してください。

追加リソース

Python で Z スコアを計算する方法
Python でデータを正規化する方法
統計における正規性の仮定とは何ですか?

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です