Comment représenter une série temporelle avec ggplot2

Dans cet article, je vais essayer de répondre à une question que l’on me pose souvent : comment représenter graphiquement une série temporelle avec le package ggplot2 ?

C’est vrai que cela n’est pas évident, car il y a trois difficultés à dépasser pour représenter une série temporelle :

  1. La variable indiquant le temps, (qui va être sur l’axe des x du graph), doit être considérée comme une date par R, et pas comme une chaîne de caractères. Autrement dit, la classe de cette variable temps doit être de type POSIXct ou Date.
  2. Le découpage du temps , autrement dit les marques (ou tick marks) de l’axe du temps (l’axe des x) va devoir être précisé : par exemple, tous les ans, tous les 2 ans, tous les 5 ans etc…)
  3. Le format de l’étiquette de la marque indiquant le temps va devoir être précisé : est ce que l’on veut voir écrire seulement l’année, ou bien le mois et l’année etc… .

 

1. Les data

Pour illustrer la représentation graphiques d’une série temporelle avec le package ggplot2, nous allons employer le jeu de données AtchisonUV_20150801_to_20151119.csv. Il s’agit de données de pollution entre le 01/08/2015 et le 19/11/2015 dans la ville Atchison aux Etats-Unis (Californie). Ce jeu de données est disponible à cette adresse : https://www.kaggle.com/nicapotato/ pollution-in-atchison-village-richmond-ca.

 

👉Cliquez ici pour le télécharger

En voici un extrait :

plotter une série temporelle

 

2.Passer la variable de temps en classe date ou POSIXct

Lorsque vous importez un fichier csv dans R,  avec une fonction read.csv() ou read.csv2(), par exemple, vous pouvez préciser que vous ne souhaitez pas que les chaînes de caractères soient converties en facteur, à l’aide de l’argument stringsAsFactors = FALSE….

J’ai placé le fichier AtchisonUV.csv, dans le dossier data du dossier de travail associé à un projet R.

👉 Pour plus de détail sur cette organisation de travail, vous pouvez consulter l’article 7 étapes pour organiser son travail sous R.

 

Pour importer les données dans R j’utilise alors la commande suivante :

Remarque : j’utilise la fonction read.csv() car le séparateur de colonne est une virgule, et le séparateur de décimale est un point.

👉 Vous trouverez plus d’information sur l’importation de fichier csv en consultant l’article Nettoyer et valider les données avec R 

En utilisant la fonction str() nous pouvons vérifier la classe des différentes variables :

 

La variable Date est bien une chaîne de caractères. Nous allons alors la convertir en classe date, ou en classe POSIXct. Pour cela, le plus simple est d’utiliser une fonction de parsing du package lubridate.

👉  Pour plus d’informations sur les fonctions de parsing du package lubridate, vous pouvez consulter l’article “Gérer les dates et les heures avec le package lubridate“.

 

 

En utilisant encore la fonction str(), nous pouvons voir que la variable Date a été convertie en POSIXct, c’est-à-dire dans une classe de date et d’heure.

 

Je vais alors créer, en utilisant la fonction date du package lubridate, une nouvelle variable Date, nommé Date_new qui ne contiendra que la partie date (j’espère que vous suivez 😜:

Nous pouvons voir que la classe de cette variable Date_new est date:

 

Voici les premières lignes du fichier :

 

3. Préciser le pas des marques de l’axe temps

Si nous représentons les données d’ozone par exemple, nous pouvons voir que, par défaut, le pas de temps utilisé est le mois, et que l’étiquette est constituée par les trois premières lettres.

plot séries temporelle avec R

 

Pour passer à un pas de temps plus fin, par semaine, il est nécessaire de créer la séquence de date correspondante, comme ceci :

 

Nous pouvons alors préciser ce pas de temps, à l’aide de l’argument breaks de la fonction scale_x_date(), comme ceci :

 

 

4. Modifier le format de l’étiquette de la marque

Pour cela, nous allons :

  • utiliser l’argument labels dans la fonction scale_x_date()
  • préciser le format du temps en utilisant la fonction date_format du package scales.

Par exemple, pour n’afficher que le jour et le mois, nous devons utiliser labels=date_format("%d %b"):

 

 

 

visualisation de serie temporelle

Ces format de dates ne sont pas très intuitifs, voici un tableau récapitulatif :

format date

 

D’après D’après Chang, W. (2018). R graphics cookbook: practical recipes for visualizing data. O’Reilly Media.

 

J’espère que cet article vous aidera à représenter vos séries temporelles.

Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel R

 

Crédits photos :Image par Gerd Altmann de Pixabay

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

6 commentaires

  1. Yacouba Répondre

    Merci, tes cours me sont d’un grand intérêt dans mes analyses. Merci encore pour les efforts malgré sûrement un boulot bien chargé.
    Merci
    Bonne continuation….

  2. yaya Répondre

    Excellent article encore une fois Claire !

    Vivement un prochain sur “Comment représenter des données longitudinales avec ggplot2”

    Merci beaucoup !

  3. galais Répondre

    Bonjour,
    J’ai refait les scripts et cet article m’est particulièrement utile. Il y a juste un élément que je ne comprend pas, c’est la troisième ligne ci dessous :

    Atch %
    mutate(Date_new=date(Date)) %>%
    select(Date, Date_new, everything())

    “mutate” crée bien une nouvelle colonne avec la fonction “date” mais que fait select et surtout “everything” ?
    Merci beaucoup.

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Olivier,

      la ligne select(Date, Date_new, everything()), permet de placer la variable Date en première position, la variable Date_new en seconde position, et toutes les autres variables ensuite.
      La fonction everything() permet de designer toutes les autres variables !
      Bonne continuation

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *