데이터 조정

PySpark로 하는 Feature Engineering

John Hogue

Lead Data Scientist, General Mills

데이터를 변환하는 이유

변환

PySpark로 하는 Feature Engineering

MinMax 스케일링이란

MinMax 스케일링

PySpark로 하는 Feature Engineering

MinMax 스케일링

# define min and max values and collect them
max_days = df.agg({'DAYSONMARKET': 'max'}).collect()[0][0]
min_days = df.agg({'DAYSONMARKET': 'min'}).collect()[0][0]

# create a new column based off the scaled data df = df.withColumn("scaled_days", (df['DAYSONMARKET'] - min_days) / (max_days - min_days))
df[['scaled_days']].show(5)
+--------------------+
|         scaled_days|
+--------------------+
|0.044444444444444446|
|0.017777777777777778|
| 0.12444444444444444|
| 0.08444444444444445|
| 0.09333333333333334|
+--------------------+
only showing top 5 rows
PySpark로 하는 Feature Engineering

표준화란?

표준 정규 분포로 데이터 변환

  • z = (x - μ)/ σ
  • 평균 μ = 0
  • 표준편차 σ = 1

표준화

PySpark로 하는 Feature Engineering

표준화

mean_days = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
stddev_days = df.agg({'DAYSONMARKET': 'stddev'}).collect()[0][0]

# Create a new column with the scaled data df = df.withColumn("ztrans_days", (df['DAYSONMARKET'] - mean_days) / stddev_days)
df.agg({'ztrans_days': 'mean'}).collect()
[Row(avg(ztrans_days)=-3.6568525985103407e-16)]
df.agg({'ztrans_days': 'stddev'}).collect()
[Row(stddev(ztrans_days)=1.0000000000000009)]
PySpark로 하는 Feature Engineering

로그 스케일링이란

스케일링 전 분포

원본 분포 플롯

로그 스케일링 분포

로그 스케일링 분포 플롯

PySpark로 하는 Feature Engineering

로그 스케일링

# import the log function
from pyspark.sql.functions import log
# Recalculate log of SALESCLOSEPRICE
df = df.withColumn('log_SalesClosePrice', log(df['SALESCLOSEPRICE']))
PySpark로 하는 Feature Engineering

연습해 봅시다!

PySpark로 하는 Feature Engineering

Preparing Video For Download...