© Your Copyright
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.
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 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.
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.
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
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.
La fonction clone(ts_in)
créer une copie d’une serie temporelle.
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.
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.
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
.
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.
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
La fonction pop(ts,column_number)
supprime un colonne de la série. Cela est utile notament en vue de tracer les courbes.
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`.