Aktuelles Setup
Ich verwende einen TimeSeries-Container in GridDB mit dieses Schema:
- Zeitstempel (TIMESTAMP)
- Wert (DOPPELT)
Hier ist ein Beispiel dafür, wie ich den Container fülle:
Code: Select all
import griddb_python as griddb
factory = griddb.StoreFactory.get_instance()
gridstore = factory.get_store(
notification_member="127.0.0.1:10001",
cluster_name="defaultCluster",
username="admin",
password="admin"
)
container_info = griddb.ContainerInfo(
"time_series_data",
[
["timestamp", griddb.Type.TIMESTAMP],
["value", griddb.Type.DOUBLE]
],
griddb.ContainerType.TIME_SERIES,
True
)
container = gridstore.put_container(container_info)
# Insert sample data with potential outliers
container.put([
("2024-01-01T00:00:00.000Z", 10.0),
("2024-01-01T01:00:00.000Z", 100.0), # Possible outlier
("2024-01-01T02:00:00.000Z", 20.0)
])
Ich möchte:
- Ausreißer in der erkennen value mithilfe einer statistischen Methode (z. B. Z-Score, IQR).
- Ersetzen Sie diese Ausreißer beim Abruf durch interpolierte Werte basierend auf ihren Nachbarpunkten.
- Interpolierter Wert = (10,0 + 20,0) / 2 = 15,0
- Unterstützt GridDB das native Erkennen und Ersetzen von Ausreißern während der Abfrageausführung?
- Wenn nicht, wie lässt sich dies unter Berücksichtigung großer Datensätze mit GridDB und Python am effizientesten erreichen?< /li>
- Verarbeitung nach der Abfrage: [/b]
Ich habe die Daten abgerufen und Python zur Ausreißererkennung verwendet Interpolation. Allerdings ist dieser Ansatz für große Datensätze rechenintensiv. - Vorverarbeitung:
Ich habe darüber nachgedacht, Ausreißer zu behandeln, bevor ich Daten in GridDB speichere, aber das erhöht den Speicherbedarf und macht den Datensatz weniger dynamisch.
Ich frage derzeit Daten wie ab Dies:
Code: Select all
SELECT * FROM time_series_data WHERE timestamp >= TIMESTAMP('2024-01-01T00:00:00.000Z')
Alle Erkenntnisse, Beispiele oder Best Practices für die Handhabung Dies wäre sehr hilfreich!