3.1. Traitement de données en Python#

Marc BUFFAT, dpt mécanique, UDCB Lyon 1

%matplotlib inline
import os,sys
import numpy as np
import matplotlib.pyplot as plt
from validation.validation import check_function,liste_functions,info_etudiant
from validation.valide_markdown import test_markdown
from validation import lissajous
from IPython.display import Markdown, display
def printmd(string):
    display(Markdown(string))
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None     
# test si numero étudiant spécifier
if type(NUMERO_ETUDIANT) is not int :
    printmd("**ERREUR:**numéro d'étudiant non spécifié!!!")
    NOM,PRENOM,NUMERO_ETUDIANT = info_etudiant()
# parametres spécifiques
_uid_    = NUMERO_ETUDIANT 
_precis_ = 1.0e-5
printmd("**Login étudiant {} {} uid={}**".format(NOM,PRENOM,_uid_))
# generation des données
T0,X0,Y0,_p_,_q_=lissajous.create_Lissajous(_uid_)
fichier= "mon_fichier.dat"
entete = " donnees t,x,y pour uid={}".format(_uid_)
np.savetxt(fichier,np.transpose([T0,X0,Y0]),header=entete)
printmd("**Mise sur fichier des données dans : {}**".format(fichier))

3.1.1. Objectif#

On veut traiter des données stockées dans un fichier mon_fichier.dat contenant la valeur de 2 quantités X et Y périodique en fonction du temps t sur une période T.

Ces valeurs sont stockées par colonne suivant la structure ci dessous:

    # titre
    t0 x0 y0
    t1 x1 y1
    .......

La valeur de t dans ce fichier n’est pas forcement triée et les données X,Y sont bruitées.

L’objectif de cette étude est d’analyser ces données \(X_i,Y_i\) en fonction du temps t et d’en déduire leurs pulsations, puis les paramêtres de Lissajous p et q.

On demandera aussi d’écrire un compte rendu monCR.tex au format \(\LaTeX\) et de fournir la version au format pdf dans monCR.pdf

echo "nbre de lignes et taille du fichier:"
wc mon_fichier.dat
echo "contenu du fichier:"
head mon_fichier.dat

3.1.2. Création d’une bibliotheque pour traiter les données#

En utilisant le canevas python fourni, créer une bibliothèque de fonctions python dans le fichier bibliothèque mabib.py pour traiter les informations stockées dans un fichier de données.

On écrira les fonctions suivantes

  1. lecture(fichier):

écrire une fonction lecture(fichier) qui lit les données dans fichier et renvoie les tableaux T,X,Y

Verification: la taille des tableaux doit correspondre au nombre de lignes du fichier - 1. On appelle donc la fonction et on peut afficher la taille des tableaux renvoyés

  1. tri_bulles(T,X,Y):

Pour trier les données suivant T, écrire une fonction tri_bulle(T,X,Y) qui trie sur place les 3 tableaux T,X,Y passées en argument, le trie s’éffectuant par rapport au premier tableau T.

Les valeurs des tableaux passés en argument sont donc modifiées et la fonction ne renvoie rien.

Vous devez implémenter un algorithme de trie bulle dans cette fonction et ne pas utiliser la fonction sort de numpy.

  1. spectre(T,U):

Pour un signal discret 𝑈 échantillonné à des temps 𝑇, écrire une fonction spectre(T,U) qui calcul et trace le spectre d’un signal. On utilisera la fonction fft de la bibliothéque numpy.

  1. analyse_spectral(T,U):

Pour un signal discret 𝑈 échantillonné à des temps 𝑇, écrire une fonction analyse_spectrale(T,U) qui retourne l’amplitude, la phase et la frequence fondamentale du signal. On utilisera la fonction fft de la bibliothéque numpy

pour le signal \(u=2 \cos{t}\) sur \([0,2\pi]\) , l’amplitude est égale à 2, la phase à 0., et la fréquence \(f=\frac{1}{2\pi}\approx 0.159155 \)

  1. ecriture(fichier,T,X,Y):

Ecrire une fonction ecriture qui ecrit dans un fichier la courbe de lissajous filtrée avec le format suivant:

 # courbe lissajous N=zz
 t0 x0 y0
 t1 x1 y1
 ....

### Travail demandé:

  1. Accéder à l’interface jupyterlab, en cliquant sur le lien suivant:

et se déplacer dans le répertoire de travail:

  • MGC2367M/TPI1_traitement_de_donnees

  1. éditer le fichier mabib.py

  2. pour chaque fonction:

    • on écrira le code python de la fonction

    • un exemple de vérification de la fonction (a la fin du fichier)

    • executer le code python dans une fenêtre

  3. pour lister les tests des fonctions de la bibliothéque

       test_exo -l S220
    
  • pour valider une fonction func par rapport à un exo

      test_exo mabib.py exo func 
    

3.1.3. Validation bibliothéque#

Enfin, une fois les vérifications faites on passera les tests de validation suivants

  • valider les fonctions dans le terminal à l’aide de test_exo

    test_exo mabib.py exo220 lecture
    
    test_exo mabib.py exo221 tri_bulles
    
    test_exo mabib.py exo222 analyse_spectral
    
    test_exo mabib.py exo223 ecriture
    

3.1.4. Analyse des données#

en utilisant la bibliothéque précédente:

  • lire les données T,X,Y

  • trier des donnees suivant T

  • calcul des modes principaux (valeurs X1,Y1 en T)

  • détermination des coefficients entiers p et q

  • tracée de la courbe de lissajous

  • sauvegarder le résultat dans un fichier lissajous.dat

3.1.4.1. comparer le signal et son mode principal (2 points)#

calculer les valeurs X1 et Y1 des modes principaux de X et Y

  • tracer le spectre de T,X et T,Y

  • déterminer les modes principaux et les valeurs de p,q de X,Y

  • calculer le signal X1,Y1 non bruité

  • tracer T,X et T,X1 sur un meme graphe

from mabib import lecture,tri_bulles,spectre,analyse_spectral

## BEGIN SOLUTION
## END SOLUTION

3.1.4.2. calculer les 2 coefficients de Lissajous (1 point)#

calculer les 2 valeurs entieres p et q

p=0
q=0
## BEGIN SOLUTION
## END SOLUTION
print("coefficients de Lissajous p={} q={}".format(p,q))
assert (p==_p_ and q==_q_)

3.1.4.3. Tracer de la courbe de lissajous Y fonction de X#

tracer sur un meme figure Y fonction de X et Y1 fonction de X1

## BEGIN SOLUTION
## END SOLUTION

3.1.5. Compte rendu#

Ecrire votre analyse et votre conclusion dans le compte rendu en insistant sur

  1. Description de la méthode d’analyse

  2. Résultat de l’analyse

  3. Conclusion

Le compte rendu est à écrire dans le fichier CompteRendu.md

  1. Génération de la version HTML du Compte Rendu (avec mise en page)

  • Exécution de la commande ci-dessous pour générer le fichier html

  1. Visualisation du Compte Rendu (version html)

# génération de la version html du CR
!genereTPhtml CompteRendu
# test sur les commentaires (a executer)
assert(test_markdown('CompteRendu.md',None,minm=200,maxe=0.25))

3.1.6. FIN#