detect_anomalies_thresholds
Die Funktion dient der Erkennung von Anomalien in Sensordaten basierend auf definierten oberen und unteren Grenzwerten. Diese Grenzwerte werden aus einer MongoDB-Collection abgerufen und gruppieren die Sensoren nach einer Sensorgruppe (sensorGroup
), die in der Fahrzeugdatenbank (vehicles
) hinterlegt ist. Anomalien werden für jeden Sensortyp identifiziert und sowohl im DataFrame markiert als auch separat ausgegeben.
sensor_df
(Pandas DataFrame):
sensorType
: Typ des Sensors (z. B. Temperatur, Druck).value
: Gemessener Wert des Sensors.db
(MongoDB-Datenbankverbindung):
sensorThresholds
) und Fahrzeugdaten (vehicles
) abzurufen.vehicle_id
(string):
sensor_df
(Pandas DataFrame):
anomaly
, die Anomalien markiert:
1
für Anomalien.0
für normale Werte.anomalies_dict
(list of dict):
timestamp
: Zeitpunkt der Messung.sensorType
: Typ des Sensors.value
: Wert des Sensors.anomaly
: Markierung als Anomalie (1
).vehicles
ab.sensorGroup
nicht existiert, wird ein Fehler ausgelöst:
vehicle_data = db["vehicles"].find_one({"vehicleId": vehicle_id}, {"_id": 0, "sensorGroup": 1})
if not vehicle_data or "sensorGroup" not in vehicle_data:
raise ValueError(f"Das Fahrzeug mit ID {vehicle_id} enthält kein Feld 'sensorGroup'.")
sensorGroup
wird extrahiert.sensorGroup
werden die Grenzwerte (sensorThresholds
) aus der MongoDB-Collection sensorThresholds
abgerufen.threshold_data = db["sensorThresholds"].find_one({"sensorGroup": sensor_group}, {"_id": 0, "thresholds": 1})
if not threshold_data or "thresholds" not in threshold_data:
raise ValueError(f"Keine Grenzwerte für sensorGroup {sensor_group} gefunden.")
sensorType
im DataFrame werden die oberen und unteren Grenzwerte geprüft:
is_anomaly = (sensor_df["sensorType"] == sensor_type) & (
(sensor_df["value"] < min_value) | (sensor_df["value"] > max_value)
)
sensor_df.loc[is_anomaly, "anomaly"] = 1
anomaly
wird mit 1
für Anomalien und 0
für normale Werte gesetzt.anomaly == 1
, werden in ein separates Dictionary konvertiert:
anomalies = sensor_df[sensor_df["anomaly"] == 1]
anomalies_dict = anomalies.to_dict(orient="records")
Sensordaten (sensor_df
):
| timestamp | sensorType | value |
|———————|————–|——-|
| 2024-01-01 12:00:00 | temperature | 150 |
| 2024-01-01 12:01:00 | pressure | 350 |
| 2024-01-01 12:02:00 | vibration | 10 |
Grenzwerte (sensorThresholds
):
{
"sensorGroup": "groupA",
"thresholds": {
"temperature": {"min": -20, "max": 120},
"pressure": {"min": 0, "max": 300},
"vibration": {"min": 0, "max": 50}
}
}
Aktualisiertes sensor_df
:
| timestamp | sensorType | value | anomaly |
|———————|————–|——-|———|
| 2024-01-01 12:00:00 | temperature | 150 | 1 |
| 2024-01-01 12:01:00 | pressure | 350 | 1 |
| 2024-01-01 12:02:00 | vibration | 10 | 0 |
anomalies_dict
:
[
{ "timestamp": "2024-01-01 12:00:00", "sensorType": "temperature", "value": 150, "anomaly": 1 },
{ "timestamp": "2024-01-01 12:01:00", "sensorType": "pressure", "value": 350, "anomaly": 1 }
]
anomalies_dict
) zur Erstellung von Berichten oder zur Visualisierung.Die Funktion detect_anomalies_thresholds
ist ein robuster Mechanismus zur Anomalieerkennung, der flexibel Grenzwerte aus einer Datenbank abruft und diese gruppenbasiert anwendet. Sie integriert nahtlos Sensordaten, Fahrzeuginformationen und Grenzwerte, um aussagekräftige Ergebnisse zu liefern, die direkt für die Überwachung und Analyse genutzt werden können.
Die Grenzwert-basierte Methode kann durch folgende Techniken ergänzt werden:
Die Anomalieerkennung anhand von oberen und unteren Grenzwerten ist eine effektive Methode zur Identifikation von ungewöhnlichen Werten in Sensordaten. Sie ist besonders geeignet, wenn klare Schwellenwerte bekannt sind. Für dynamische und komplexere Szenarien kann die Methode erweitert oder durch maschinelles Lernen ergänzt werden.
Autor: Jörg Harzmann
Dieser Inhalt ist unter einer CC BY-NC Lizenz veröffentlicht. Jeglicher Quellcode ist urheberrechtlich geschützt!