分桶(Bucketing)
如果您是房主,房子有 1、2、3 还是 4 个卧室非常重要。但就像浴室数量一样,一旦超过某个点,您并不在意房子是 7 个还是 8 个卧室。这个示例将演示如何找出合适的阈值来进行分桶。
本练习是课程的一部分
使用 PySpark 进行特征工程
练习说明
- 使用
Seaborn的distplot()为pandas数据框sample_df绘制分布图。 - 鉴于 5 之后似乎有一个长尾且出现频率较低的取值,请创建分桶
splits:1、2、3、4、5+。 - 通过实例化
Bucketizer()并传入这些分割点来创建转换器buck,然后将输入列设为BEDROOMS,输出列设为bedrooms。 - 在
df上调用transform()应用 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']].____()