Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Téléchargements

Aide

Tracé d’une courbe d’erreur

Objectif :

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

L’objectif est d’aprendre à générer une courbe d’erreur.

Données initiales

A partir d’un fichier de données simulées : donnees_simulees.csv

_images/simulated.png

Données produite par simulation avec la méthode d’Euler explicite. Pas de simulation : 0.000001 sec. . Temps de simulation 0.02 sec.

Et à partir d’un fichier de données mesurée : donnees_brutes.csv

_images/raw.png

Nous souhaitons produire la courbe d’erreur suivante :

_images/error.png

courbe d’erreur générée avec correction des données brutes : (à compléter: décalage, filtrage...) Pour cela nous devrons effectuer un certains nombre de traitements sur les séries temporelles grâce au module TimeSeries.py

TimeSeries.py

Suite aux activités des semaine précédente, vous êtes en mesure de coder l’ensembles des fonctions du module TimeSeries.py nécessaire à la production de la courbe d’erreur. Cependant, pour que nous puissions réaliser une courbe d’erreur en une seul séance, le code du module est donné : TimeSeries.py (voir aussi ts1.csv, ts2.csv et HCSR04_data4_ressort_2022_03_10.csv pour les tests)

Voici la description des fonctions du module. Vous devez comprendre le code de ces fonctions.

Arrondir les réels

L’arithmétique des nombres à virgule flottante pose un certain nombre de problème qui sont abordés dans cette page : https://docs.python.org/fr/3.7/tutorial/floatingpoint.html#tut-fp-issues.

la fonction def round_data(ts, column_number,precision) permet de d’arondir les valeur d’une colonne de la séries temporelles en appliquant la fonction python round() sur chacune des données d’une colonne. Cette fonction nous servira à arrondir les dates des series temporelles pour éviter de générer des points inutile de de la fusion de séries temporelles.

Fusionner les séries

la fonction def fuse(ts1, ts2) crée un série temporelle ts_out qui est la fusion des 2 series ts1 et ts2. La colonne 0 de ts_out contient toutes les dates des 2 séries. Attention si les dates des deux séries diffèrent, certaines valeur de colonnes seront indéfinies et prendrons la valeur "missing".

Par exemple la fusion de :

time(s); C1; C2
1.0; 1.0; 0.0
2.0; 2.0; 0.0
3.0; 3.0; 0.0
time(s); C3
0.0; 0.0
3.0; 30.0

donnera la serie suivante :

time(s); C1; C2; C3
0.0; "missing"; "missing"; 0.0
1.0; 1.0; 0.0; "missing"
2.0; 2.0; 0.0, "missing"
3.0; 3.0; 0.0; 30.0

Interpoler

La fonction interpolate_missing_data(ts) permet d’inventer une valeur par interpolation pour chaque donnée manquante.

time(s); C1; C2; C3
0.0; "missing"; "missing"; 0.0
1.0; 1.0; 0.0; "missing"
2.0; 2.0; 0.0, "missing"
3.0; 3.0; 0.0; 30.0

devient

time(s); C1; C2; C3
0.0; 1.0; 0.0; 0.0
1.0; 1.0; 0.0; 10.0
2.0; 2.0; 0.0, 20.0
3.0; 3.0; 0.0; 30.0

On interpole en linéarisant par partie. Cette méthode est très rudimentaire mais suffisante pour notre besoin. Il existe des méthodes plus élaborées que vous pourrez découvrir notament en étudiant le signal.

Dupliquer une series temporelle

La fonction clone(ts_in) créer une copie d’une serie temporelle.

Filtrer les données brutes

La fonction remove_outliers(ts,column_number) permet de supprimer des valeur aberrantes d’une serie temporelle. Ici nous avons considérer qu’une valeur était aberrante si elle variait d’un facteur 5 par rapport à la donnée suivante. Là encore la méthode utilisée est très rudimentaire.

La fonction apply_to_column(ts,column_number,f) permet d’appliquer n’importe quelle fonction f à chacune des valeurs d’une colonne.

Décaler

La fonction shift(ts,time_shift) ajoute la valeur time_shift à toutes les dates de la série temporelle. Cela a pour effet de décaler dans le temps les données. Cela permet par exemple de recaler la mesure expérimentale avant comparaison au résultats théoriques.

Découper

La fonction truncate(ts, t_min, t_max) enlèves toutes les données ayant une date antérieure à t_min et postérieure à t_max.

Soustraire

La fonction compute_error(ts, column_number_1,column_number_2,error_label) produit une colonne représentant la différence entre 2 colonnes. C’est ce qui produit la courbe d’erreur.

Intégrer

La fonction compute_area(ts,column_number) calcule l’aire d’une courbe. Ainsi il est possible d’attribuer une “note” à la courbe d’erreur. Ce qui nous permet d’imaginer des algorithmes pour minimiser l’erreur en explorant des valeurs de parametres

Supprimer un colonne

La fonction pop(ts,column_number) supprime un colonne de la série. Cela est utile notament en vue de tracer les courbes.

Courbe d’erreur

A faire :

Tracer des courbes d’erreur

Ecrire un fichier main.py qui trace une courbe d’erreur qui a l’aire la plus petite possible en utilisant les fonctionnalités de ``TimeSeries.py`.