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 :

Format date pour recherche coordonnées point intersection


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut Format date pour recherche coordonnées point intersection
    Bonjour à tous,

    Je vous sollicite aujourd'hui car je tourne en rond sur mon projet de recherche des coordonnées du point d'intersection de deux droites, mon problème se situe je pense (pas certain) autour de la représentation des dates.

    Mes x sont des dates et mes y des integer. Le script se déroule de la façon suivant :
    1. Transformation du format datetime en EPOCH
    2. Trie de la liste par date
    3. A partir de deux éléments consécutifs de la liste création de l'équation de la droite
    4. Recherche du point d'intersection (abscisse uniquement) avec la droite de la forme y = a*x
    5. Stockage des point dans liste
    6. Transformation des abscisses des points d'intersection en date "humaine"


    c'est dans la partie 6 de mon code que les choses se complique, le résultat n'est pas bon j'ai des dates des années 70 (ex: 01/01/70-16:16:11)

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
        # mise en forme horodatage pour trie par date
        data = []
        epoch = datetime.datetime.utcfromtimestamp(0)
        for date, val in data_to_plot:
            dt = datetime.datetime.strptime(date, '%d/%m/%y-%H:%M:%S')
            delta = dt - epoch
            seconds = delta.seconds
            total_seconds = delta.total_seconds()
            line = total_seconds, val
            data.append(line)
     
        # trie par date
        data_by_date = []
        getcount = itemgetter(0, 1)
        data_by_date = sorted(data, key=getcount)
     
        # equation des droites http://www.mathforu.com/cours-103.html
        print len(data_by_date)
        cp, y_b = 0, 0
        duree = []
        for item in data_by_date:
            if cp == 0:
                x_a, y_a = item[0], item[1]
            if cp == 1:
                x_b, y_b = item[0], item[1]
                cp = -1
            cp += 1
            # equation segment puissance y=mx+p
            if y_a < puis_sous and y_b >= puis_sous:
                m = (y_b - y_a) / (x_b - x_a)
                p = y_a - m * x_a
                x_intersec = ((-p) / (m - puis_sous))
                print x_a, y_a, x_b, y_b, m, p, x_intersec
                duree.append(x_intersec)
     
        print len(duree)
        for i in duree:
            try:
                dt_obj = datetime.datetime.fromtimestamp(i).strftime('%d/%m/%y-%H:%M:%S')
                print i, dt_obj
            except ValueError:
                pass
    Résultat du dernier print :
    55851.3833463 01/01/70-16:30:51
    28301.6688498 01/01/70-08:51:41
    98271.1714435 02/01/70-04:17:51
    52113.4012105 01/01/70-15:28:33
    99670.3390544 02/01/70-04:41:10
    14463.6733246 01/01/70-05:01:03
    54971.0143553 01/01/70-16:16:11
    ...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Reprenons... Avec la première valeur de i:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> i = 55851.3833463
    >>> datetime.datetime.fromtimestamp(i).strftime('%d/%m/%y-%H:%M:%S')
    '01/01/70-16:30:51'
    >>>
    Ce qui est normal puisqu'on compte les "timestamps" à partir du 01/01/1970: 55851 secondes, çà fait un peut plus de 15 heures.
    Si vous voulez récupérer la date "à partir de maintenant":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import time
    >>> datetime.datetime.fromtimestamp(time.time()+i).strftime('%d/%m/%y-%H:%M:%S')
    '31/08/16-02:33:37'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci wiztricks c'est exactement ce que je souhaitais faire mais c'est bizarre car le résultat obtenu est au delà de la date du jour ce qui n'est pas possible (le résultat ne devrait pas dépacer le 24/08/16)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jouclar Voir le message
    Merci wiztricks c'est exactement ce que je souhaitais faire mais c'est bizarre car le résultat obtenu est au delà de la date du jour ce qui n'est pas possible (le résultat ne devrait pas dépacer le 24/08/16)
    hu? chez moi la date du jour est le 30/08/1016, vous êtes tombé dans un trou noir?

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

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    non pas encore un trou noir...

    en fait le résultat obtenu est l'intersection d'un droite y = 350000*x et de segments créés à partir de points ayant tous une date inférieure au 24/08/2016

    j'ai mis en PJ représentant les segments, il faut imaginer la droite y = 350000*x, le résultat du script étant les dates pour lesquelles il y a intersection
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jouclar Voir le message
    en fait le résultat obtenu est l'intersection d'un droite y = 350000*x et de segments créés à partir de points ayant tous une date inférieure au 24/08/2016
    Vos explications sont embrouillées et votre code aussi.

    De toutes façons si vos "x" sont des nombres de secondes depuis 01/01/1970 qui tombent dans la semaine dernière, si vous trouvez des valeurs entre 20000 et 99000, elles sont probablement fausses. A part reprendre vos calculs pour voir où çà m...
    Essayez de poster un code plus complet avec un échantillon de données. Si çà intéresse quelqu'un 'y jeter un œil, là tout de suite j'ai des tas d'autres choses à faire.

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

Discussions similaires

  1. format date pour calendrier input
    Par Claudeine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2011, 12h50
  2. format date pour importer sous mysql
    Par morgan47 dans le forum Excel
    Réponses: 2
    Dernier message: 20/02/2011, 09h43
  3. Problème format date pour utilisation DateDiff
    Par sat478 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/05/2010, 16h28
  4. Format Date pour Excel
    Par lucazzo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/04/2010, 09h19
  5. [Dates] Formatage de date pour recherche
    Par Diss dans le forum Langage
    Réponses: 7
    Dernier message: 13/09/2006, 15h07

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