Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Téléchargements

Aide

Series temporelles

Objectif :

Cette page de l’ENIBOOK participe à la zone généraliste de deuxième année

L’objectif est d’aprendre à importer des séries temporelles pour les afficher sur une courbe.

Encapsulation dans un type abstrait

Lors de l’objectif 4 du cours IPI, nous avons appris à programmer en utilisant les types abstraits de données. Cette méthode de programmation s’applique au développement du jeu de IPI mais peut évidemment s’appliquer à d’autre projet en programmation. Nous profitons donc de la zone généraliste pour appliquer à nouveau cette méthode.

Ainsi, vous pouvez vous fabriquer un outil réutilisable qui encapsule tout ce qu’il faut pour lire et afficher des données temporelles. Nous vous proposons une trame pour réaliser un code, mais bien évidamment, n’hésitez pas à personnaliser votre outil.

Commençons par définir un type abstait TimeSeries.

Type : TimeSeries = struct
    data : liste de liste de réels
    labels : liste de chaines de caractères
Ce type abstrait fournit au moins deux opérations :
  • create(filename) : un constructeur qui prend en paramètre un nom de fichier au format CSV
  • plot(ts) : une fonction qui dessinera sur une courbe les données récupérés dans le fichier.

Commençons par coder le module TimeSeries.py avec son constructeur, ses mutateurs/accesseurs et sa zone de test. Même si nous ne savons pas encore comment importer le fichier CSV et comment afficher une courbe, nous pouvons préparer débuter la programmation.

A faire :

Documentez-vous sur le module csv

Commençons par coder un module TimeSeries.py avec son constructeur, ses mutateurs/accesseurs et sa zone de test. Même si nous ne savons pas encore comment importer le fichier CSV et comment afficher une courbe, nous pouvons préparer débuter la programmation.

Coder également un programme principal : main.py qui importera le module TimeSeries.py.

Voici ce que pourrait être un programme principal utilisant le module TimeSeries.

import TimeSeries
import sys


def main():

    #retreive first parameter
    if len(sys.argv)>=2:
        filename = str(sys.argv[1])
    else :
        print("Usage : $python main.py file.csv [timestamp_col_number]")
        quit()

    #retreive second parameter
    if len(sys.argv)==3:
        timestamp_col_number = int(sys.argv[2])
    else :
        timestamp_col_number = 0

    #build time series
    ts=TimeSeries.create_from_csv(csv_filename=filename,
                                  time_stamp_column_number=timestamp_col_number,
                                  xlabel='temps en secondes',
                                  ylabel='distance en milimètres')

    #swap curves
    TimeSeries.swap_column(ts,1,2)

    #show and/or save curves
    TimeSeries.plot(ts,show=True,save=True)

if __name__=="__main__":

    main()

Le format CSV

Voici des données capteurs issues d’une mesure d’un système méca : HCSR04_data4_ressort_2022_03_10.csv

Le fichier est au format CSV. Le format CSV (Comma-separated values) est un format de fichier texte représentant des données tabulaires. Il s’agit de représenter des valeurs de tableau en les séparant par des virgules (ou d’autres séparateurs). Bien que le format n’ait jamais été vraiment formalisé, il est très utilisé.

Pour lire un fichier CSV en python il y a plusieurs méthode :
  • on peut l’ouvrir comme n’importe quel fichier texte et analyser soi-même le contenu du fichier
  • on peut utiliser un module qui fournit des fonctions didiés à la lecture de
A faire :

coder l’import de CSV

https://docs.python.org/fr/3/library/csv.html

Essayer et comprendre l’exemple de code de la fonction reader

Importer les données contenues dans ce csv HCSR04_data4_ressort_2022_03_10.csv

Intégrer le code dans le constructeur de TimeSeries.py

Matplotlib

Il existe plusieur bibliothèques python pour tracer des courbes. Une recherche sur internet fait assez rapidement aparaître matplotlib comme un outil très répandu. Par ailleurs, dans la suite de votre parcourt ENIB, certaines matière s’attendent à vous voir utiliser matplotlib. Nous choisissons donc cet outil pour tracer nos courbes.

Le site https://matplotlib.org/ fournit tout ce qu’il faut pour se documenter.

A faire :

coder l’affichage des courbes

En vous basant sur les exemples :

https://matplotlib.org/stable/plot_types/basic/plot.htm

et

tracer une courbe et intégrer les code dans la fonction plot()``de ``TimeSeries.

Attention, il vous faudra peut-être installer python sur votre ordinateur portable.

Bonnes pratiques pour les figures et les fichiers de données.

  • Nommage des fichiers : Les noms des fichiers CSV doivent indiquer la date à laquelle les mesures ont été faites, ce qu’on a mesuré et préciser si des données ont été artificiellement ajoutées (par exemple par interpolation).
  • Unités : chaque colonne doit commencer par un label qui indique ce que contient la colonne et surtout quelle est l’unité de la données.
  • Légendes : Lorsque vous utilisez des figures dans vos rapports, il faut nécessairement que les axes comportent une légende qui indique l’unité des données. Si il y a plusieurs courbes, il faut pouvoir les distinguer, là aussi au moyen d’une légende.