Ravi de vous rencontrer, tout le monde. Je m'appelle @tkmbn et je suis ingénieur SIG chez Optimind Co., Ltd.. Ceci est le premier message sur Qiita.
J'expliquerai la période (combinaison de la date et de l'heure, la date et l'heure de début à la date et l'heure de fin) et comment utiliser la bibliothèque time-window qui fait cela.
Il organise parfaitement les délais compliqués! ← Ce que je veux faire le plus avec cette bibliothèque.
Lors de l'acquisition de données avec une période de temps à partir de la base de données, il y avait une demande de récapitulation s'il y a un chevauchement dans la période de temps. J'ai essayé de l'implémenter moi-même d'une manière ou d'une autre, mais j'étais confus et je cherchais "Je me demande s'il existe un bon outil ..." Bibliothèque ci-dessus / time-window) a été rencontré. En plus de readme, il y avait diverses fonctions utiles, alors j'ai écrit un article comprenant un mémorandum pour moi-même.
Commentaire complet! Ce n'est pas le cas, donc je ne sais pas. .. ..
pip install time-window
Veuillez penser que le premier est une traduction japonaise de readme lol
Lorsque vous souhaitez créer une TimeWindow du 01 mars 2020 12: 00: 00
au
01 mars 2020 15: 00: 00`. .. ..
from datetime import datetime
from time_window import TimeWindow
t1 = datetime(2020, 3, 1, 12, 00, 00)
t2 = datetime(2020, 3, 1, 15, 00, 00)
tw1 = TimewWindow(t1, t2)
tw1
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))
À ce stade, notez que la période sera «[t1, t2)»!
Il peut également être créé avec timedelta.
from datetime import datetime, timedelta
from time_window import TimeWindow
t1 = datetime(2020, 3, 1, 12, 00, 00)
delta = timedelta(hours=3)
tw2 = TimeWindow.from_timedelta(t1, delta)
tw2
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))
Le même résultat a été obtenu.
delta, middle Si vous voulez connaître la différence dans le délai,
tw1.delta
-> datetime.timedelta(0, 10800)
Si vous voulez connaître le point au milieu de la période,
tw1.middle
-> datetime.datetime(2020, 3, 1, 13, 30)
overlaps
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw.overlaps(tw2)
-> True
Vrai s'ils se chevauchent, Faux dans le cas contraire.
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw4 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 14, 0))
tw.contains(tw4)
-> True
Vrai si inclus, Faux dans le cas contraire.
contiguous
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw3 = TimeWindow(datetime(2020, 3, 1, 15, 0), datetime(2020, 3, 1, 18, 0))
tw.contiguous(tw3)
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 15, 0), datetime.datetime(2020, 3, 1, 18, 0))]
Si elle touche, la liste de TimeWindow est retournée, et si elle ne touche pas, False est retournée.
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw.intersection(tw2)
-> TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 15, 0))
tw.union(tw2)
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0))
from datetime import datetime, timedelta
from time_window import TimeWindow, TimeWindowsCollection
tw = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
twc = TimeWindowsCollection([tw, tw2])
twc
-> [TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))]
##Je veux trier par heure de début!
twc.time_windows_sorted_by_since
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0))]
Maintenant, j'ai fait exactement ce que je voulais faire.
tw = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw3 = TimeWindow(datetime(2020, 3, 1, 19, 0), datetime(2020, 3, 1, 21, 0))
twc = TimeWindowsCollection([tw, tw2, tw3])
twc
-> [TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
twc.compressed()
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
Les périodes de chevauchement sont regroupées et les périodes de non chevauchement sont des périodes de temps différentes.
Cependant, il y avait un écueil. Quand j'ai essayé de récupérer TimeWindow en spécifiant l'index normalement,
twc.compressed()[0]
-> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'TimeWindowsCollection' object does not support indexing
En regardant le formulaire retourné, cela ressemble à une liste normale, mais il semble que ce soit différent. .. .. Puisque nous devons déplacer l'objet TimeWindowsCollection vers la liste TimeWindow,
twc.compressed().time_windows
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
twc.compressed().time_windows[0]
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0))
J'ai pu le sortir en toute sécurité! !!
Merci d'avoir lu jusqu'au bout! Si vous avez des questions ou des erreurs, veuillez commenter.
Recommended Posts