Wie kann ich in MATLAB fehlende Werte in einem Datensatz automatisch erkennen und ersetzen?
- Erkennen fehlender Werte
- Ersetzen fehlender Werte
- Arbeiten mit Tabellen und komplexeren Datentypen
- Zusammenfassung
In MATLAB treten fehlende Werte in Datensätzen häufig auf, besonders bei realen Messdaten oder beim Import von Daten aus externen Quellen. Diese fehlenden Werte können als NaN (Not a Number), leere Zellen ( ) oder spezielle Marker wie NaT bei Zeitreihen dargestellt sein. Das automatische Erkennen und Ersetzen fehlender Werte ist wichtig, um Auswertungen und weitere Analysen konsistent und korrekt durchzuführen.
Erkennen fehlender Werte
Zum Erkennen von fehlenden Werten verwendet MATLAB hauptsächlich die Funktion isnan(). Diese Funktion gibt ein logisches Array zurück, welches an den Stellen true enthält, wo Werte fehlen (NaN), und false, wo gültige Werte vorhanden sind. Bei Tabellen (Tabellen-Arrays) oder Zeitreihen gibt es auch spezifischere Funktionen wie ismissing(), die neben NaN auch andere fehlende Einträge erkennen (zum Beispiel leere Zellen, NaT, leere Strings).
Beispiel für einen Vektor x mit fehlenden Werten:
x = ;Erkennen mit isnan:
missingIndices = isnan(x); % Ergebnis:Ersetzen fehlender Werte
Nachdem fehlende Werte erkannt wurden, müssen sie je nach Zielsetzung durch geeignete Werte ersetzt werden. Es gibt verschiedene Strategien, die sich automatisch umsetzen lassen:
Eine einfache Möglichkeit ist es, die NaN-Werte durch einen festen Wert zu ersetzen, beispielsweise durch den Mittelwert aller vorhandenen Werte. Dies kann mit Hilfe von nanmean() (aus dem Statistics and Machine Learning Toolbox) geschehen, die den Mittelwert berechnet und NaN-Werte ignoriert:
avg = nanmean(x); % Mittelwert ohne NaN berechnenx(missingIndices) = avg; % NaN-Werte durch Mittelwert ersetzenAlternativ kann man auch die fehlenden Werte durch den Median (nanmedian) oder andere Werte wie den vorherigen oder nachfolgenden Wert ersetzen. Für Zeitreihen ist oft das Auffüllen mit dem zuletzt verfügbaren Wert (Last Observation Carried Forward) sinnvoll:
for i = 2:length(x) if isnan(x(i)) x(i) = x(i-1); % vorherigen Wert übernehmen endendArbeiten mit Tabellen und komplexeren Datentypen
Bei Tabellen können Sie die Funktion ismissing() nutzen, um fehlende Daten in mehreren Spalten zu identifizieren. Beispielsweise:
data = table( , {A; ; C}, VariableNames, {Wert, Kategorie});missingEntries = ismissing(data); % Logische Matrix mit fehlenden EinträgenMit fillmissing() bietet MATLAB eine sehr komfortable Möglichkeit, fehlende Werte mit verschiedenen Methoden automatisch zu ersetzen:
data.Wert = fillmissing(data.Wert, linear); % lineare Interpolationdata.Kategorie = fillmissing(data.Kategorie, previous); % letzten Wert übernehmenZusammenfassung
Zum automatischen Erkennen fehlender Werte nutzen Sie isnan() für numerische Arrays oder ismissing() für komplexere Datentypen. Zum Ersetzen kommen Standardmethoden wie Mittelwert, Median, vorheriger/nächster Wert oder Interpolation in Frage, die in MATLAB mit nanmean, fillmissing oder einfachen Schleifen realisiert werden können. Je nach Datenstruktur und Problemstellung wählen Sie die passende Methode, um die Daten für die weitere Verarbeitung robust zu machen.
