4.3. Erreur#
Objectifs
Cette page de l’ENIBOOK participe à la zone généraliste de deuxième année
L’objectif est d’apprendre à générer une courbe d’erreur.
4.3.1. Données initiales#
A partir d’un fichier de données simulées : donnees_simulees.csv

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

Nous souhaitons produire la courbe d’erreur suivante :

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 time_series.py
4.3.2. time_series.py#
Suite aux activités des semaines précédentes, vous êtes en mesure de coder l’ensembles des méthode de la classe TimeSeries
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 de la classe vous est donné : time_series.py
(voir aussi ts1.csv
, ts2.csv
et HCSR04_data4_ressort_2022_03_10.csv
pour les tests)
Voici la description des méthodes de la classe TimeSeries
. Vous devez comprendre le code de ces fonctions.
4.3.2.1. Arrondir les réels#
L’arithmétique des nombres à virgule flottante pose un certain nombre de problèmes qui sont abordés dans cette page : https://docs.python.org/fr/3.7/tutorial/floatingpoint.html#tut-fp-issues.
la méthode def round_data(self, column_number,précision)
permet de d’arrondir les valeurs 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 séries temporelles pour éviter de générer des points inutile de de la fusion de séries temporelles.
4.3.2.2. Fusionner les séries#
la méthode def fuse(self, ts)
crée un série temporelle ts_out
qui est la fusion des 2 series self
et ts
.
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
4.3.2.3. Interpoler#
La méthode interpolate_missing_data(self)
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 notamment en étudiant le signal.
4.3.2.4. Dupliquer une séries temporelle#
La méthode clone(self)
créer une copie d’une série temporelle.
4.3.2.5. Filtrer les données brutes#
La méthode remove_outliers(self,column_number)
permet de supprimer des valeurs aberrantes d’une série temporelle. Ici nous avons considéré 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(self,column_number,f)
permet d’appliquer n’importe quelle fonction f
à chacune des valeurs d’une colonne.
4.3.2.6. Décaler#
La méthode shift(self,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 aux résultats théoriques.
4.3.2.7. Découper#
La méthode truncate(self, t_min, t_max)
enlève toutes les données ayant une date antérieure à t_min
et postérieure à t_max
.
4.3.2.8. Soustraire#
La méthode compute_error(self, 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.
4.3.2.9. Intégrer#
La méthode compute_area(self,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 paramètres
4.3.2.10. Supprimer un colonne#
La méthode pop(self,column_number)
supprime un colonne de la série. Cela est utile notamment en vue de tracer les courbes.
4.3.3. Courbe d’erreur#
À 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 time_series.py
.