Características temporales

Ingeniería de características con PySpark

John Hogue

Lead Data Scientist, General Mills

La naturaleza cíclica de las cosas

Imagen de tiempo

Ingeniería de características con PySpark

Elegir el nivel adecuado

Ventas diarias

Ingeniería de características con PySpark

Elegir el nivel adecuado

Ventas mensuales

Ingeniería de características con PySpark

Tratar los campos de fecha como fechas...

from pyspark.sql.functions import to_date

# Cast the data type to Date
df = df.withColumn('LISTDATE', to_date('LISTDATE'))
# Inspect the field
df[['LISTDATE']].show(2)
+----------+
|  LISTDATE|
+----------+
|2017-07-14|
|2017-10-08|
+----------+
only showing top 2 rows
Ingeniería de características con PySpark

Componentes temporales

from pyspark.sql.functions import year, month

# Create a new column of year number
df = df.withColumn('LIST_YEAR', year('LISTDATE'))
# Create a new column of month number
df = df.withColumn('LIST_MONTH', month('LISTDATE'))
from pyspark.sql.functions import dayofmonth, weekofyear

# Create new columns of the day number within the month
df = df.withColumn('LIST_DAYOFMONTH', dayofmonth('LISTDATE'))
# Create new columns of the week number within the year
df = df.withColumn('LIST_WEEKOFYEAR', weekofyear('LISTDATE'))
Ingeniería de características con PySpark

Métricas temporales básicas

Días en el mercado

from pyspark.sql.functions import datediff

# Calculate difference between two date fields
df.withColumn('DAYSONMARKET', datediff('OFFMARKETDATE', 'LISTDATE'))
Ingeniería de características con PySpark

Características con desfase

Gota de café en taza

window()

Devuelve un registro a partir de un grupo de registros

lag(col, count=1)

Devuelve el valor desplazado filas antes de la fila actual

Ingeniería de características con PySpark

Características con desfase en PySpark

from pyspark.sql.functions import lag
from pyspark.sql.window import Window

# Create Window w = Window().orderBy(m_df['DATE'])
# Create lagged column m_df = m_df.withColumn('MORTGAGE-1wk', lag('MORTGAGE', count=1).over(w))
# Inspect results m_df.show(3)
+----------+------------+----------------+
|      DATE|    MORTGAGE|    MORTGAGE-1wk|
+----------+------------+----------------+
|2013-10-10|        4.23|            null|
|2013-10-17|        4.28|            4.23|
|2013-10-24|        4.13|            4.28|
+----------+------------+----------------+
only showing top 3 rows
Ingeniería de características con PySpark

¡Es HORA de practicar!

Ingeniería de características con PySpark

Preparing Video For Download...