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

Calcul scientifique Python Discussion :

Extraire données fichier txt et tracer graphe


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Extraire données fichier txt et tracer graphe
    Bonjour,
    Je connais très peu le langage python (j'ai commencé hier) et je rencontre quelques difficultés.
    Je souhaiterais faire un graphe à partir de données extraites du fichier joint.
    Le format des données est de type:

    2011-09-05 00:00:00 4.250
    2011-09-06 07:30:00 4.310
    2011-09-06 07:35:00 4.360
    2011-09-07 07:40:00 4.390
    2011-09-08 07:45:00 4.430
    2011-09-08 07:50:00 4.460

    nous avons donc la date (aa-mm-jj) l'heure (hh:mn-ss) et la donnée affectée (valeur numérique).
    J'aimerai avoir
    - abscisses : le temps (fonction de la DATE et HEURE en même temps)
    - ordonnées : la donnée numérique de la 3ème colonne

    Ma principale difficulté est de lire date et heure et de les mettre en format lisible pour matplotlib.pyplot

    Si quelqu'un peut m'aider je l'en remercie d'avance!
    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur calcul et simulation
    Inscrit en
    Juin 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Ingénieur calcul et simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 41
    Points : 60
    Points
    60
    Par défaut
    Qu'est-ce que tu appelles un format lisible ? Comment sont-ils sensés être ? sous forme de time stamp ?
    Si oui, je ferai quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import time
     
    abscisse = []
     
    with open("path/to/file.txt", "r") as fichier :
        for ligne in fichier :
            my_date = ligne[:19]
            my_date_stamp = time.mktime(time.strptime(my_date, "%Y-%m-%d %H:%M:%S"))
            abscisse.append(my_date_stamp)
    Avec ça, tu as une liste de date sous la forme time stamp, facilement exploitable pour une abscisse.
    Eventuellement, tu peux soustraire à chaque temps le premier de la liste pour commencer ton graphique à l'abscisse 0

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    C'est un classique. En complément de la solution de Aegim, j'ai un exemple utilisant les tableaux numpy fait en python 2.7.

    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
    from __future__ import print_function
    from datetime import datetime
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
     
    dt = np.dtype( [ ('date','S10'), ('hour','S8'), ('value',np.float) ] )
     
    if __name__ == '__main__':
        data = np.loadtxt ("file.txt", dtype=dt )
     
        dates_str = map (''.join, zip( data['date'], data['hour']))
        dates = np.array ( [ datetime.strptime (item, "%Y-%m-%d%H:%M:%S") for item in dates_str ] )
     
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.plot_date( dates, data['value'], 'o-', color='g')
        ax.fmt_xdata = mdates.DateFormatter('%d/%m/%Y %H:%M:%S')
        fig.autofmt_xdate()
        plt.show()

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci à vous deux pour vos réponses aussi rapides, détaillées et utiles!

    Aegim lorsque je disais "lisible" c'était de mettre au format numérique car si je ne me trompe matplotlib n'utilise pas de données caractères pour tracer d'où l'utilité de transformer en timestamp. Que je réutiliserai à l'avenir.

    Merci Dardanos ton programme fait exactement ce que je souhaite avoir en tracé.
    Juste peux-tu m'expliquer la fonction exacte de cette ligne ou plus précisément de map() associé à __str
    dates_str = map (''.join, zip( data['date'], data['hour']))

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut!
    Ok, pas de problème. On peut faire la même chose en plus clair avec :

    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
    from __future__ import print_function
    from itertools import izip
    from datetime import datetime
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
     
    if __name__ == '__main__':
        dt = np.dtype ([ ('date', 'S10'), ('hour', 'S8'), ('value', np.float) ])
        data = np.loadtxt ("file.txt", dtype=dt )
     
        dates = [ datetime.strptime (d+h, "%Y-%m-%d%H:%M:%S")
                  for d, h in izip (data['date'], data['hour']) ]
     
        fig = plt.figure ()
        ax = fig.add_subplot (111)
        ax.plot_date (dates, data['value'], 'o-', drawstyle='steps-post')
        ax.fmt_xdata = mdates.DateFormatter ('%d/%m/%Y %H:%M:%S')
        fig.autofmt_xdate ()
        plt.show ()
    data['date'] et data['hour'] contiennent respectivement les premières et deuxièmes colonnes du fichier.
    izip permet d'itérer sur ces deux tableaux en même, c'est-à-dire qu'il retourne les deux valeurs d et h d'une même ligne.
    Pour chaque date et heure, la chaine complète est formée : d+h.
    Je crée pour chaque ligne un objet datetime en lisant la date avec la fonction strptime. Aegim utilise lui la fonction mktime du module time qui retourne un nombre de secondes.
    Tout ça se fait par une comprehension list.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour ce complément d'information.
    Du coup si je comprends bien ton 2ème exemple utilise bien une liste contrairement au 1er ex ou un tableau type array est utilisé.
    Pour manipuler des dates je peux les passer en objet (selon ta méthode ce qui vaut pour tout type de chaine de caractères) ou passer en nombre de secondes (timestamp unix) qui ce dernier me permet de faire aussi des calculs sur les dates (pas de temps ou autres).

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire données fichier txt puis tracer graphique
    Par mc4456 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/08/2013, 20h30
  2. [VBA Excel] Extraction de données fichier txt vers Excel et mise en forme
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 11h45
  3. Extraire données fichier txt
    Par thib1984 dans le forum MATLAB
    Réponses: 6
    Dernier message: 18/02/2008, 13h39
  4. extraire donné fichier txt afficher dans xml
    Par jasminrose dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/04/2007, 12h14
  5. Extraire données fichier txt
    Par philippef dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2005, 17h12

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