Créer des features de jour de la semaine
Nous pouvons créer des features à partir des dates pour ajouter encore plus d'informations à nos modèles non linéaires. La plupart des données financières comportent des dates, qui contiennent beaucoup d'informations : année, mois, jour, et parfois heure, minute et seconde. Nous pouvons aussi extraire le jour de la semaine, le trimestre de l'année, ou le temps écoulé depuis un événement (par exemple une annonce de résultats).
Ici, nous allons uniquement récupérer le jour de la semaine, car notre jeu de données ne remonte pas très loin. La propriété dayofweek de l'index datetime pandas va nous aider à obtenir le jour de la semaine. Ensuite, nous allons créer des variables indicatrices à partir de dayofweek avec get_dummies() de pandas. Cela crée des colonnes pour chaque jour de la semaine avec des valeurs binaires (0 ou 1). Nous supprimons la première colonne, car elle peut être déduite des autres.
Cet exercice fait partie du cours
<cours>Machine Learning pour la finance en Python</cours>Instructions de l’exercice
- Utilisez la propriété
dayofweekà partir de l'index delng_dfpour obtenir les jours de la semaine. - Utilisez la fonction
get_dummiessur la variable des jours de la semaine, avec le préfixe'weekday'. - Définissez l'index de la variable
days_of_weekpour qu'il soit le même que l'index delng_df, afin de pouvoir fusionner les deux. - Concaténez les DataFrames
lng_dfetdays_of_weeken un seul DataFrame.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Use pandas' get_dummies function to get dummies for day of the week
days_of_week = pd.get_dummies(lng_df.index.____,
prefix=____,
drop_first=True)
# Set the index as the original dataframe index for merging
days_of_week.index = lng_df.____
# Join the dataframe with the days of week dataframe
lng_df = pd.concat([lng_df, ____], axis=1)
# Add days of week to feature names
feature_names.extend(['weekday_' + str(i) for i in range(1, 5)])
lng_df.dropna(inplace=True) # drop missing values in-place
print(lng_df.head())