始める無料で始める

ビニング(バケット化)

持ち家の方にとって、寝室が1、2、3、4室かどうかはとても重要です。ただしバスルームと同様に、ある程度の数を超えると、7室か8室かはあまり気にならなくなります。この例では、どこに良い区切り(価値のあるポイント)があるかを見つけてバケット化する方法を見ていきます。

この演習はコースの一部です

PySparkで学ぶ特徴量エンジニアリング

コースを見る

演習の手順

  • Seaborndistplot() を使って、pandas のデータフレーム sample_df の分布プロットを描画します。
  • 5 を超えたあたりから頻度の低い長いテールがあるように見えるので、1、2、3、4、5+ のバケット splits を作成します。
  • バケットを設定するための splits を指定して Bucketizer() をインスタンス化し、入力列を BEDROOMS、出力列を bedrooms に設定して、変換器 buck を作成します。
  • transform() を使って df に Bucketizer の変換を適用し、結果を df_bucket に代入します。その後、show() で結果を確認します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

from pyspark.ml.feature import Bucketizer

# Plot distribution of sample_df
sns.____(____, axlabel='BEDROOMS')
plt.show()

# Create the bucket splits and bucketizer
splits = [____, ____, ____, ____, ____, ____, float('Inf')]
buck = ____(splits=____, inputCol=____, outputCol=____)

# Apply the transformation to df: df_bucket
df_bucket = ____.____(____)

# Display results
df_bucket[['BEDROOMS', 'bedrooms']].____()
コードを編集して実行