Ausreißer in GridDB-Zeitreihendaten effizient erkennen und ersetzen
Posted: 14 Jan 2025, 12:51
Ich analysiere in GridDB gespeicherte Zeitreihendaten. Mein Datensatz weist unregelmäßige Intervalle und einige Datenpunkte auf, bei denen es sich möglicherweise um Ausreißer handelt. Ich brauche eine Möglichkeit, diese Ausreißer beim Datenabruf zu identifizieren und durch interpolierte Werte zu ersetzen.
Aktuelles Setup
Ich verwende einen TimeSeries-Container in GridDB mit dieses Schema:
Hier ist ein Beispiel dafür, wie ich den Container fülle:
Problemstellung
Ich möchte:
Ich frage derzeit Daten wie ab Dies:
Dies ruft jedoch nur die gespeicherten Daten ab und hilft nicht bei der Erkennung oder Interpolation von Ausreißern.
Alle Erkenntnisse, Beispiele oder Best Practices für die Handhabung Dies wäre sehr hilfreich!
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!