IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Exploitation d'un fichier de valeurs .txt


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Exploitation d'un fichier de valeurs .txt
    Bonjour,
    je voudrais exploiter un fichier .txt fourni par Arduino qui nous donne des valeurs de débit sanguin ( différence de tension recueuillie avec une photo-diode ), or je n'arrive pas à créer une liste de temps et une liste des valeurs de mon fichier pour afficher une courbe en fonction du temps ( électrocardiogramme).

    Merci d'avance

    Bisous

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Bonjour

    Il est toujours plus facile d'apporter son aide en ayant un bout de code et une explication du/des points de blocage.

    Sans ça, à part vous dire d'utiliser la méthode append; je ne vois pas comment vous aider.
    Le savoir est une arme alors soyons armés

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Fournit un exemple de fichier aussi !

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut exemple
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import numpy as np
    import matplotlib.pyplot as plt
     
     
     
    t1 =[]
    t1=np.linspace(0,15,750)
     
    def lecture(fichier):
        f = open(fichier) # Ouverture du descripteur de fichier
        a = [] # Initialisation des listes de données
        for line in f: # On itère sur chaque ligne du fichier
            a_ = line.split('{1}\n') # On sépare (par défaut suivant les espaces)
            a.append(float(a_)) 
        f.close() # Ne pas oublier de fermer le fichier.
        return a
     
     
    a = lecture('tipe1.txt')
     
    plt.plot (t1,a)
    plt.show()


    Le fichier est une acquisition d'arduino, le voici en pièce jointe

    merci de votre aide
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Pour l'instant, vu ce que vous avez écrit ligne 13 et 14:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           a_ = line.split('{1}\n') # On sépare (par défaut suivant les espaces)
           a.append(float(a_))
    Python doit vous envoyer bouler.

    Est ce que line.split('{1}\n') découpe effectivement une ligne suivant les espaces?
    Pour y répondre c'est pas si compliqué de lancer la console Python et regarder:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> ligne = 'a b c'
    >>> ligne.split('{1}\n')
    ['a b c']
    >>>
    Vous voyez çà ne fait pas ce que çà dit.

    Une autre question est de savoir si le .split est utile: votre fichier étant composé d'une seule colonne de nombres flottants... Là encore, la console Python peut répondre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> ligne = '123\n'
    >>> float(ligne)
    123.0
    Pour avoir ces réflexes de base, il faut passer un peu de temps à essayer de lire un tuto. et faire les exercices (c'est la pratique qui va vous forcer à jouer avec la console, essayer de comprendre pourquoi Python ne fait pas ce que vous voulez qu'il fasse,...) et si vous n'avez pas encore ces bases là, difficile de vous aider sauf à écrire du code à votre place (ce que je ne ferais pas).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import numpy as np
     
    data = np.loadtxt("tipe1.txt")
    Et l'avantage d'utilisé numpy, c'est qu'en plus ca passe direct pour tracer des courbes derrières avec matplotlib

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut recherche fréquence
    Bonsoir,


    Tout d'abord, merci beaucoup pour vos réponses qui nous ont permis de bien avancer

    Voici où nous en sommes sur notre programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import numpy as np
    import matplotlib.pyplot as plt
     
     
    i=[] #création d'une liste vide
    i=np.loadtxt("tipe3.txt") #On affecte les valeurs de notre fichier txt à notre liste 
    N=len(i) #permet de connaître le nombre d'éléments dans i
    print(N)
     
     
    t =[] #création d'une liste vide qui comportera la variable de temps
    t=np.linspace(0,0.02*N,N) #création de la variable temps, elle doit être de la même dimension que i
                # Sachant de le delay de notre acquisition Arduino est de 20 ms, on multiplie N par 0.02s
     
     
     
    def lissage(data,largeur):   # On prend la moyenne glissante avec un nombre "largeur" de points consécutifs"
        L = [] 
        for i in range(len(data)-largeur): 
            val = 0 
            for j in range(largeur): 
                val += data[i+j] 
            val /= largeur 
            L.append(val) 
        return L # 
     
     
    # Application de la procédure de lissage
    largeur = 15
    donnees_lissees = lissage(i,largeur)
    temps_lisse = t[largeur//2:-largeur//2] # On réduit aussi la liste des temps
    plt.plot(temps_lisse,donnees_lissees)
    plt.title('Variation cardiaque en fonction du temps - moyenne glissante')
    plt.show()
    Nous avons rajouté une fonction de lissage afin d'enlever les imperfections sur notre courbe.

    Nom : courbe tipe.PNG
Affichages : 386
Taille : 65,1 Ko

    Nous cherchons maintenant à obtenir la fréquence liée à cette courbe, soit notre pulsation cardiaque.
    Peut être serait-il possible de passer par un repérage des crêtes ?...

    Nous avons aussi effectué une acquisition Arduino plus fiable que je vous mets en pièce jointe.

    Merci beaucoup pour votre aide
    Fichiers attachés Fichiers attachés

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    D'abord quelques remarques sur le code :

    1) numpy créé des arrays. Les arrays peuvent souvent être vu comme des listes, mais ils n'en sont pas !
    Du coup écrire i=[] ou t=[] ne sert absolument à rien, la fonction numpy que vous appelez derrière va vous retourner un array, qui viendra écraser (et non remplir) la liste vide que vous avez précédemment assignée.

    2) i c'est un très mauvais nom pour une liste. Si jamais vous avez besoin de faire une boucle, vous écrirez qqch comme "for i in range(len(i))" et là vous avez perdu votre liste car vous avez appelez i deux choses différentes. Donner lui un nom plus explicite. releves_cardio par exemple si ca correspond bien. Pas hésiter à mettre un mot, voire 2.

    3) La puissance de numpy, c'est d'offrir des opérations mathématiques sur des arrays (des tableaux de valeurs).
    Si A, et B sont des listes, alors A+B est une liste qui contient les éléments de A suivis de ceux de B.
    Si A et B sont des arrays numpy, alors A+B n'est valide que si A et B ont la meme taille, et renvoie un tableau C également de meme taille dont chaque composante est la somme des valeurs des arrays A et B.
    Et comme numpy a été construit pour faire des opérations mathématiques rapidement sur des tableaux de nombres, il vous offre bien sûr des fonctions min, max, moyenne, valeur absolue, et bien d'autres trucs encore.

    Du coup la fonction lissage donnerait plutot qqch comme ça (qui vous donne une valeur de plus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def lissage(data,largeur):
        L=[]
        for i in range(len(data)-largeur): 
            val = np.mean(data[i:i+largeur])
            L.append(val) 
        return L
    que l'on peut encore améliorer comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def lissage(data,largeur):
         return np.convolve(data,np.ones((largeur,))/largeur, 'valid')
    en utilisant des maths (une régularisation, c'est une convolution) et encore la puissance de numpy, mais je vais m'arrêter là. Faites un tuto sur numpy sa vous sera bénéfique, car là vous ne pouvez pas vous en passer.


    Ensuite concernant votre deuxième point pour identifier les extrema, numpy à lui seul peut également faire l'affaire. Son complément scipy fournit également des outils utiles. Regardez ici, il semblerait que des personnes aient déjà eu le même problème :
    https://stackoverflow.com/questions/...1d-numpy-array

Discussions similaires

  1. Convertion fichier .bak en .txt
    Par memed dans le forum Linux
    Réponses: 6
    Dernier message: 28/12/2006, 11h38
  2. Conversion fichier .bak en .txt
    Par memed dans le forum Oracle
    Réponses: 2
    Dernier message: 28/12/2006, 09h03
  3. vb6: Mettre les données d'un textbox sous un fichier de type txt
    Par flav66 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/09/2006, 12h01
  4. Exploitation d'un fichier csv
    Par kinixys dans le forum C
    Réponses: 7
    Dernier message: 20/05/2006, 15h34
  5. Réponses: 12
    Dernier message: 27/06/2005, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo