[PYTHON] J'ai essayé d'utiliser la fenêtre de temps

introduction

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.

Aperçu

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. Screen Shot 2020-03-02 at 11.29.07.png

Il organise parfaitement les délais compliqués! ← Ce que je veux faire le plus avec cette bibliothèque.

Pourquoi j'ai écrit

Screen Shot 2020-03-01 at 23.09.29.png 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. .. ..

Sujet principal

Comment installer

pip install time-window

Utilisation spécifique

Veuillez penser que le premier est une traduction japonaise de readme lol

Objet TimeWindow

Comment faire

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.

contient (readme non publié)
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.

Vous pouvez également faire des choses comme définir le type
Ensemble de produits
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))
Ensemble de somme
tw.union(tw2)

-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0))

Objet TimeWindowsCollection (readme non affiché)

Comment faire
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))]
Je veux assembler plusieurs délais

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.

Screen Shot 2020-03-01 at 23.41.07.png

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é! !!

Les références

finalement

Merci d'avoir lu jusqu'au bout! Si vous avez des questions ou des erreurs, veuillez commenter.

Recommended Posts

J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé d'utiliser Rotrics Dex Arm
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow