[Python] [Pandas] Comment obtenir le même jour, le même mois mais différentes années?

Bonjour,
dans le cadre de mon projet, j’ai mis la variable Datetime d’un DataFrame en index et voulu réalisé un graphique d’une variable consommation pendant une période de l’année… et ensuite sur ce même graphique la même variable mais l’année précédente.
Je suis arrivée à un résultat mais d’une manière fort peu orthodoxe (j’ai supprimé les abscisses correspondant aux données temporelles en passant par la méthode .values():

cons_idf_norm

Existe-t-il un moyen simple d’avoir le mois et le jour en abscisses dans un graphique Matplotlib et pouvoir tracer différents graphiques suivant les années ? Svp…

Bonjour Christine,

Le plus simple dans ce cas est d’éxtraire les jours et mois depuis la colonne Date au format pd.to_datetime.

Par exemple:


# Fonction to_datetime
df['date'] = pd.to_datetime(df['date'])

# Extraction d'informations depuis la variable de date

# Mois
df["month"] = df['date'].dt.month

# Jour de la semaine
df["weekday"] = df['date'].dt.weekday

# Weekend
df["weekend"] = np.where(df["weekday"].isin([5,6]), 1, 0)

# Jour du mois
df["day"] = df['date'].dt.day

# Heure
df["hour"] = df['date'].dt.hour

Puis de sélectionner les colonnes correspondantes dans le nouveau graphique :slight_smile:

Laurène :slight_smile:

Bonjour Laurène,
mon problème n’est pas tant de sélectionner les données mais d’arriver à faire des courbes séparées au niveau des années…
Par exemple, si je fais :

for annee in range(2013, 2023):
    plt.plot(elec_IdF[elec_IdF_periode & (elec_IdF['annee'] == annee)]['cons'])

j’obtiens :
annee_conso

Les courbes sont présentes mais tassées par années, au lieu de se superposer…

Dans la première image que j’ai créée, j’ai recréé manuellement les “labels” de l’axe des abscisses, je ne sais pas comment faire pour que Matplotlib le fasse automatiquement.

Christine

Vous souhaiteriez donc avoir les mois de janvier à décembre en abscisse et une courbe pour chaque année?
Dans ce cas il vous suffit d’instancier plusieurs plt.plot() dans une même figure.

Par exemple:

plt.plot(Y1, label = "Y1")
plt.plot(Y2, label = "Y2")
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()

Si vous le souhaitez, je pourrai essayer sur votre jeu de données en me partageant votre notebook.

Laurène

Si vous le souhaitez, je pourrai essayer sur votre jeu de données en me partageant votre notebook.

Ok. Je vais tâcher de préparer ça cet après-midi. Merci. :slightly_smiling_face:

Ça y est, j’ai mis deux fichiers dans le répertoire “Pour Laurène” dans le dossier PyNetElec du GitHub de DataScientest…

Un fichier est la base de données pour la région Île-de-France du 23 au 27 janvier sur plusieurs années et l’autre fichier est le Notebook…

Si vous pouviez jeter un coup d’œil… :slightly_smiling_face:
Christine.

Pour chaque année, vous ne possédez que les échantillons sur les jours du 23 au 27 janvier.
Vous souhaitez donc avoir ces 4 jours en abscisses?

J’ai ajouté dans ce dossier le notebook Graphe_Laurène qui vous permettra d’obtenir ce graphique:
image

Ainsi que le code commenté pour comprendre les étapes

Merci, Laurène. :slightly_smiling_face:

Je ne comprends pas tout… mais je vais m’y pencher de façon approfondie : c’est en effet le résultat auquel je voulais arriver… :neutral_face:

Dîtes moi s’il vous reste des questions après avoir revu le code et ses commentaires :slight_smile: