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
...