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 :
- Transformation du format datetime en EPOCH
- Trie de la liste par date
- A partir de deux éléments consécutifs de la liste création de l'équation de la droite
- Recherche du point d'intersection (abscisse uniquement) avec la droite de la forme y = a*x
- Stockage des point dans liste
- 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:
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
...