[PYTHON] Ich habe versucht, das Zeitfenster zu verwenden

Einführung

Schön euch kennenzulernen, alle zusammen. Mein Name ist @tkmbn und ich bin GIS-Ingenieur bei Optimind Co., Ltd.. Dies ist der erste Beitrag zu Qiita.

Überblick

Ich werde den Zeitrahmen (Kombination aus Datum und Uhrzeit, Startdatum und Uhrzeit bis Enddatum und Uhrzeit) und die Verwendung der Bibliothek Zeitfenster erläutern, die dies tut. Screen Shot 2020-03-02 at 11.29.07.png

Es organisiert komplizierte Zeitrahmen ordentlich! ← Was ich mit dieser Bibliothek am liebsten machen möchte.

Warum ich geschrieben habe

Screen Shot 2020-03-01 at 23.09.29.png Beim Erfassen von Daten mit einem Zeitrahmen aus der Datenbank wurde angefordert, zusammenzufassen, ob sich der Zeitrahmen überschneidet. Ich habe versucht, es irgendwie selbst zu implementieren, war aber verwirrt und suchte nach "Ich frage mich, ob es ein gutes Tool gibt ..." Bibliothek oben / Zeitfenster) wurde gefunden. Zusätzlich zur Readme-Datei gab es verschiedene nützliche Funktionen, sodass ich einen Artikel mit einem Memorandum für mich selbst schrieb.

Vollständiger Kommentar! Das ist nicht der Fall, also weiß ich es nicht. .. ..

Hauptthema

Wie installiert man

pip install time-window

Spezifische Verwendung

Bitte denken Sie, dass die erste eine japanische Übersetzung von readme lol ist

TimeWindow-Objekt

Wie man ... macht

Wenn Sie ein Zeitfenster vom 1. März 2020 um 12:00 Uhr bis zum 1. März 2020 um 15:00 Uhr erstellen möchten. .. ..

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

Beachten Sie zu diesem Zeitpunkt, dass der Zeitrahmen "[t1, t2)" ist!

Es kann auch mit timedelta erstellt werden.

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

Das gleiche Ergebnis wurde erhalten.

delta, middle Wenn Sie den Unterschied im Zeitrahmen wissen möchten,

tw1.delta

-> datetime.timedelta(0, 10800)

Wenn Sie den Punkt in der Mitte des Zeitrahmens wissen möchten,

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

Richtig, wenn sie sich überlappen, andernfalls Falsch.

enthält (Readme nicht veröffentlicht)
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

Richtig, wenn enthalten, sonst falsch.

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))]

Wenn es berührt wird, wird die Liste von TimeWindow zurückgegeben, und wenn es nicht berührt wird, wird False zurückgegeben.

Sie können auch Dinge wie Set-Typ tun
Produktset
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))
Summensatz
tw.union(tw2)

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

TimeWindowsCollection-Objekt (Readme nicht angezeigt)

Wie man ... macht
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))]

##Ich möchte nach Startzeit sortieren!
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))]
Ich möchte mehrere Zeitrahmen zusammenstellen

Jetzt habe ich genau das getan, was ich tun möchte.

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))]

Die überlappenden Zeitrahmen sind zusammen gruppiert, und die nicht überlappenden Zeitrahmen sind unterschiedliche Zeitrahmen.

Screen Shot 2020-03-01 at 23.41.07.png

Es gab jedoch eine Falle. Als ich versuchte, das TimeWindow durch normale Angabe des Index abzurufen,

twc.compressed()[0]   
           
-> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'TimeWindowsCollection' object does not support indexing

Wenn Sie das zurückgegebene Formular betrachten, sieht es wie eine normale Liste aus, aber es scheint anders zu sein. .. .. Da wir das TimeWindowsCollection-Objekt zurück in die TimeWindow-Liste verschieben müssen,

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

Ich konnte es sicher herausnehmen! !!

Verweise

Schließlich

Vielen Dank für das Lesen bis zum Ende! Wenn Sie Fragen oder Fehler haben, kommentieren Sie bitte.

Recommended Posts

Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, Rotrics Dex Arm zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe versucht zu kratzen
Ich habe PyQ ausprobiert
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen