PySpark MLLib:将数字转换为类别

2024-09-30 00:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我从data repo获得了一个数据帧,它有一些基于日期的特性,例如

  • a) 像2011年或2012年一样的一列
  • b) monthnum就像另一列中的1到12
  • c) weekdayNum类似于一列中的1到7,并且
  • d) 其他列中的一些其他派生列,如IsSunday或IsMonday(表示为0或1)
  • e) 还有其他一些数字特征,如房屋销售价格等
The types of all these are IntegerType()

问题1:要训练模型,我是否应该将这些与日期相关的列转换为分类

问题2:如何在PySpark MLLib中执行此操作?仅将数据类型强制转换为StringType()就足够了吗?所以我的意思是如果monthnum是1,那么我可以用下面的代码转换成“1”吗?ML算法会将其视为/识别为分类的吗

还是有更好的方法

from pyspark.sql.types import StringType

df = df.witColumn("MonthNum", df["MonthNum"].cast(StringType()))

非常感谢你的帮助


Tags: 数据dfdata分类repo数字特征特性
1条回答
网友
1楼 · 发布于 2024-09-30 00:33:30

除了前面的答案之外,如果希望在模型中考虑日期的顺序性质,那么可以尝试将日期转换为unix时间戳。唯一需要注意的不是数据中的周数,而是日期。您可以使用一个简单的udf来转换它。如果你有可能直接得到日期,那就太好了。 获得数据后,您可以执行以下操作:

df_new = df.withColumn("date_info",concat_ws("-",col('date'),col('month'),col('year')))

df_timestamp = df_new.withColumn("time_stamp",unix_timestamp(col('date_info'),format='dd-MM-yyyy'))

现在,除了这个时间戳,您还可以对其他连续特征进行向量组装。在您输入培训之前,对所有特性进行规范化也很好。您可以检查pyspark.ml.feature.MinMaxScaler()文件

相关问题 更多 >

    热门问题