(Bing Image Creator で生成: プロンプト: Close up of Yellow Brassica rapa var. chinensis flowers, flowering along small clear creek, blue sky, photo)
の続きです。今回は純粋な数値のデータについて外れ値があるかどうか確認して、外れ値があったら処理をしてみたいと思います。
箱ひげ図をつかって外れ値があるかどうかを確認します。
はじめに age からみてみます。
age には外れ値がありますね。
balance はどうでしょうか?
balance にも外れ値はあります。
campaign を見てみます。
campaign にも外れ値はあります。
age, balance, campaign の3つとも外れ値がありました。
外れ値の境界の値を確認する関数を作成します。
外れ値の境界の定義ですが、下のほうの外れ値は、
第1分位の値 - 1.5 * (第3分位の値 - 第1分位の値) です。
上のほうの外れ値は、
第3分位の値 + 1.5 * (第3分位の値 - 第1分位の値) です。
上の関数式の中身はその定義をそのまま使っています。
この自作関数で age の外れ値の境界を確認します。
下は 10.5 で上は 70.5 です。この値よりも下の観測値は 10.5 に、この値よりも上の観測値は 70.5 に置換します。これを winsorize といいます。日本語だとなんていうのかな?わかりません。
再度、箱ひげ図を描いて外れ値がなくなったことを確認します。
見事に外れ値がなくなりました。
同様に、balance, campaign も同じ処理をします。
balance, campaign も外れ値がなくなりました。
summary() 関数で df を確認します。
age, job, marital, education, balance, contact, day, month, campaign, poutcome の変数を最小値を 0, 最大値を 1 の (min-max法によ dfる)正規化をします。
はじめに、正規化する関数を作成します。
この minmax() 関数を df の全ての変数に適用します。yes などのもともと 0 or 1 のダミー変数はこの関数で処理しても変わらないです。
across()関数で、everuthing() としているので、全部の変数で、minmax()関数を適用しています。
summary()関数で 全ての変数が最小値は 0, 最大値は 1 になったか確認します。
全ての変数が最小値 0, 最大値 1 になりました。
これで、データの前処理は終わりました。
今回は以上です。
次回は、
です。
初めから読むには、
です。
今回のコードは以下になります。
#
# age の外れ値の有無を調べる
ggplot(df, aes(x = age)) + geom_boxplot()
#
# balance の外れ値の有無を調べる
ggplot(df, aes(x = balance)) + geom_boxplot()
#
# campaign の外れ値の有無を調べる
ggplot(df, aes(x = campaign)) + geom_boxplot()
#
# 外れ値の範囲を決める関数を作成
hazure <- function(x) {
st1 <- quantile(x, 0.25) # 第1分位
rd3 <- quantile(x, 0.75) # 第3分位
lower <- st1 - 1.5 * (rd3 - st1) # 下の外れ値
upper <- rd3 + 1.5 * (rd3 - st1) # 上の外れ値
result <- c(lower, upper)
names(result) <- c("lower", "upper")
return(result)
}
#
# age の外れ値
hazure(df$age)
#
# age を winsorize
df <- df |>
mutate(age = if_else(age < 10.5, 10.5, age)) |>
mutate(age = if_else(age > 70.5, 70.5, age))
#
# age の箱ひげ図
df |>
ggplot(aes(x = age)) + geom_boxplot()
#
# balance の外れ値
df$balance |> hazure()
#
# balance を winsorize
df <- df |>
mutate(balance = if_else(balance < -1962, -1962, balance)) |>
mutate(balance = if_else(balance > 3462, 3462, balance))
#
# balance の箱ひげ図
df |>
ggplot(aes(x = balance)) + geom_boxplot()
#
# campaign の外れ値
hazure(df$campaign)
#
# campaign を winsorize
df <- df |>
mutate(campaign = if_else(campaign < -2, -2, campaign)) |>
mutate(campaign = if_else(campaign > 6, 6, campaign))
#
# campaign の箱ひげ図
df |>
ggplot(aes(x = campaign)) + geom_boxplot()
#
# df のサマリー
summary(df)
#
# min-max法の正規化関数
minmax <- function(x) {
scaled <- (x - min(x)) / (max(x) - min(x))
return(scaled)
}
#
# minmax() のテスト
minmax(1:6)
minmax(3:8)
#
# df を 正規化
df <- df |>
mutate(across(everything(), minmax))
#
# df のサマリー
summary(df)
#