1. 学ぶ
  2. /
  3. コース
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

演習

連続変数を論理値型に変換する

論理値型変数は便利です。数値よりも「はい・いいえ」で考えるほうがわかりやすい場面が多いからです。たとえば「お茶を一杯いかがですか?」と聞かれたとき、「飲みたい確率は0.73です」と答えるより、「はい」か「いいえ」で答えるほうが自然ですよね。これはデータサイエンスでも同様です。たとえば、糖尿病検査では患者の血漿中のブドウ糖濃度が数値として返されますが、本当に知りたいのは「この患者は糖尿病か?」という点です。そのため、ある閾値をもとに数値を論理値に変換する必要があります。

base-R では、次のように比較的シンプルに記述できます。

threshold_mmol_per_l <- 7
has_diabetes <- plasma_glucose_concentration > threshold_mmol_per_l

sparklyr の特徴量変換関数はすべて同じようなインターフェースを持っています。最初の3つの引数は常に、Spark のチブル(tibble)、入力列の名前を表す文字列、出力列の名前を表す文字列です。つまり、次のパターンに従います。

a_tibble %>%
  ft_some_transformation("x", "y", some_other_args)

sparklyr で連続変数を論理値型に変換するには、ft_binarizer() を使います。先ほどの糖尿病の例は、次のように書き直せます。閾値には、データセット内の列名を表す文字列ではなく、数値を指定してください。

diabetes_data %>%
  ft_binarizer("plasma_glucose_concentration", "has_diabetes", threshold = threshold_mmol_per_l)

Spark では DoubleType を統一的に使うという設計思想があるため、ft_binarizer() の出力は論理値型ではなく numeric 型になります。Spark 上でそのまま作業や変換を続けるうえでは適切な方法ですが、R でデータを処理したい場合は、明示的に論理値型へ変換することを忘れないようにしましょう。よく使われるコードパターンは次のとおりです。

a_tibble %>%
  ft_binarizer("x", "is_x_big", threshold = threshold) %>%
  collect() %>%
  mutate(is_x_big = as.logical(is_x_big))

この演習では、artist_hotttnesss フィールドを扱います。このフィールドは、データセット作成時点でそのアーティストがどれだけ話題になっていたかを示す指標です。ggplot2 パッケージを使ったグラフ描画についてさらに学びたい方は、Introduction to Data Visualization with ggplot2 コースをご覧ください。

指示

100 XP

Spark 接続は spark_conn として作成済みです。Spark に保存されたトラックのメタデータに紐づいたチブル(tibble)は track_metadata_tbl として事前に定義されています。

  • track_metadata_tbl をもとに、hotttnesss という変数を作成します。
    • artist_hotttnesss フィールドを選択します。
    • ft_binarizer() を使って、artist_hotttnesss が 0.5 より大きい場合に TRUE となる新しいフィールド is_hottt_or_nottt を作成します。
    • 結果を収集します。
    • is_hottt_or_nottt フィールドを論理値型に変換します。
  • is_hottt_or_nottt の ggplot() 棒グラフを描画します。
    • ggplot() の第1引数にはデータ引数として hotttnesss を指定します。
    • ggplot() の第2引数には、aes() で is_hottt_or_nottt を囲んだ審美的マッピングを指定します。
    • geom_bar() を追加して棒を描画します。