Fonctions temporelles

Ingénierie des caractéristiques avec PySpark

John Hogue

Lead Data Scientist, General Mills

La nature cyclique des phénomènes

Image du temps

Ingénierie des caractéristiques avec PySpark

Choisir le bon niveau

Ventes quotidiennes

Ingénierie des caractéristiques avec PySpark

Choisir le bon niveau

Ventes mensuelles

Ingénierie des caractéristiques avec PySpark

Traiter les champs de date comme des dates…

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
Ingénierie des caractéristiques avec PySpark

Composantes temporelles

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'))
Ingénierie des caractéristiques avec PySpark

Mesures temporelles de base

Jours sur le marché

from pyspark.sql.functions import datediff

# Calculate difference between two date fields
df.withColumn('DAYSONMARKET', datediff('OFFMARKETDATE', 'LISTDATE'))
Ingénierie des caractéristiques avec PySpark

Variables décalées

Goutte de café dans une tasse

window()

Retourne un enregistrement basé sur un groupe d'enregistrements

lag(col, count=1)

Retourne la valeur décalée de lignes avant la ligne courante

Ingénierie des caractéristiques avec PySpark

Variables décalées, à la façon de 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
Ingénierie des caractéristiques avec PySpark

Passons à la pratique !

Ingénierie des caractéristiques avec PySpark

Preparing Video For Download...