連続変数をカテゴリ変数に変換する(2)
前のセクションで学んだ変換の特殊なケースとして、変数の分位点を使ってバケットを定義し、連続変数を区間に分割する方法があります。この変換は、アンケートの回答やレビューのスコアを分析する際によく使われます。たとえば、1〜5つ星で評価してもらった場合、中央値が必ずしも3つ星にならないことがあります。そのような場合、スコアを分位点ごとに分割すると便利です。たとえば、0、20、40、60、80、100パーセンタイルで分割して、5つの五分位グループを作ることができます。
base R でこれを行うには cut() と quantile() を組み合わせます。sparklyr では ft_quantile_discretizer() という変換関数を使います。この関数は num_buckets 引数を受け取り、バケットの数を指定します。base R と sparklyr の両方の方法を並べて示します。前のセクションと同様に、right = FALSE および include.lowest が設定されています。
survey_response_group <- cut(
survey_score,
breaks = quantile(survey_score, c(0, 0.25, 0.5, 0.75, 1)),
labels = c("hate it", "dislike it", "like it", "love it"),
right = FALSE,
include.lowest = TRUE
)
survey_data %>%
ft_quantile_discretizer("survey_score", "survey_response_group", num_buckets = 4)
ft_bucketizer() と同様に、結果として得られるビンはゼロから始まる数値で表されます。R でそのまま扱いたい場合は、明示的に factor 型に変換してください。
この演習はコースの一部です
sparklyr を使った Spark 入門(R)
演習の手順
Spark への接続は spark_conn として作成済みです。Spark に格納されたトラックのメタデータに関連付けられたtibbleは track_metadata_tbl として事前に定義されています。duration_labels は楽曲の長さを表す文字ベクトルです。
track_metadata_tblからfamiliarity_by_durationという変数を作成します。durationフィールドとartist_familiarityフィールドを選択します。ft_quantile_discretizer()を使って、durationを5つの分位ビンに分割した新しいフィールドduration_binを作成します。- 結果を収集します。
duration_binフィールドをラベルduration_labelsを持つ因子型に変換します。
artist_familiarityをduration_binごとに表示するggplot()の箱ひげ図を描きます。ggplot()の第1引数には、データ引数としてfamiliarity_by_durationを指定します。ggplot()の第2引数には、aes()にduration_binとartist_familiarityを渡した審美的マッピングを指定します。geom_boxplot()を追加して箱ひげ図を描画します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# track_metadata_tbl, duration_labels have been pre-defined
track_metadata_tbl
duration_labels
familiarity_by_duration <- track_metadata_tbl %>%
# Select duration and artist_familiarity
___ %>%
# Bucketize duration
___ %>%
# Collect the result
___ %>%
# Convert duration bin to factor
___
# Draw a boxplot of artist_familiarity by duration_bin
ggplot(___, aes(___, ___)) +
___()