Maskierte Arrays in NumPy zum Verarbeiten fehlender DatenMaskierte Arrays in NumPy zum Verarbeiten fehlender Daten
Bild vom Autor

Stellen Sie sich vor, Sie versuchen, ein Puzzle zu lösen, bei dem Teile fehlen. Das kann frustrierend sein, nicht wahr? Dies ist ein häufiges Szenario beim Umgang mit unvollständigen Datensätzen. Maskierte Arrays in NumPy sind spezielle Array-Strukturen, mit denen Sie fehlende oder ungültige Daten effizient verarbeiten können. Sie sind besonders nützlich in Szenarien, in denen Sie Berechnungen an Datensätzen mit unzuverlässigen Einträgen durchführen müssen.

Ein maskiertes Array ist im Wesentlichen eine Kombination aus zwei Arrays:

  • Datenarray: Das primäre Array, das die tatsächlichen Datenwerte enthält.
  • Masken-Array: Ein boolesches Array mit derselben Kind wie das Datenarray, wobei jedes Factor angibt, ob das entsprechende Datenelement gültig oder maskiert (ungültig/fehlend) ist.

Datenarray

Das Datenarray ist die Kernkomponente eines maskierten Arrays und enthält die tatsächlichen Datenwerte, die Sie analysieren oder bearbeiten möchten. Dieses Array kann beliebige numerische oder kategorische Daten enthalten, genau wie ein Commonplace-NumPy-Array. Hier sind einige wichtige Punkte, die Sie beachten sollten:

  • Lagerung: Das Datenarray speichert die Werte, mit denen Sie arbeiten müssen, einschließlich gültiger und ungültiger Einträge (wie „NaN“ oder bestimmte Werte, die fehlende Daten darstellen).
  • Operationen: Beim Ausführen von Operationen verwendet NumPy das Datenarray zum Berechnen der Ergebnisse, berücksichtigt jedoch das Maskenarray, um zu bestimmen, welche Elemente ein- oder ausgeschlossen werden sollen.
  • Kompatibilität: Das Datenarray in einem maskierten Array unterstützt alle Standardfunktionen von NumPy, sodass Sie problemlos zwischen regulären und maskierten Arrays wechseln können, ohne Ihre vorhandene Codebasis wesentlich zu verändern.

Beispiel:

import numpy as np

information = np.array((1.0, 2.0, np.nan, 4.0, 5.0))
masked_array = np.ma.array(information)
print(masked_array.information)  # Output: ( 1.  2. nan  4.  5.)

Masken-Array

Das Masken-Array ist ein Boolean-Array mit der gleichen Kind wie das Daten-Array. Jedes Factor im Masken-Array entspricht einem Factor im Daten-Array und gibt an, ob dieses Factor gültig ist (FALSCH) oder maskiert (WAHR). Hier sind einige detaillierte Punkte:

  • Struktur: Das Masken-Array wird mit der gleichen Kind wie das Daten-Array erstellt, um sicherzustellen, dass jeder Datenpunkt einen entsprechenden Maskenwert hat.
  • Angabe ungültiger Daten: A WAHR Der Wert im Maskenarray markiert den entsprechenden Datenpunkt als ungültig oder fehlend, während ein FALSCH Wert gibt gültige Daten an. Dadurch kann NumPy ungültige Datenpunkte während der Berechnung ignorieren oder ausschließen.
  • Automatische Maskierung: NumPy bietet Funktionen zum automatischen Erstellen von Masken-Arrays basierend auf bestimmten Bedingungen (z. B. np.ma.masked_invalid() maskieren NaN Werte).

Beispiel:

import numpy as np

information = np.array((1.0, 2.0, np.nan, 4.0, 5.0))
masks = np.isnan(information)  # Create a masks the place NaN values are True
masked_array = np.ma.array(information, masks=masks)
print(masked_array.masks)  # Output: (False False  True False False)

Die Stärke maskierter Arrays liegt in der Beziehung zwischen den Daten- und Maskenarrays. Wenn Sie Operationen an einem maskierten Array durchführen, berücksichtigt NumPy beide Arrays, um sicherzustellen, dass die Berechnungen nur auf gültigen Daten basieren.

Vorteile maskierter Arrays

Maskierte Arrays in NumPy bieten mehrere Vorteile, insbesondere beim Umgang mit Datensätzen, die fehlende oder ungültige Daten enthalten, darunter:

  1. Effizienter Umgang mit fehlenden Daten: Mit maskierten Arrays können Sie ungültige oder fehlende Daten, wie z. B. NaNs, einfach markieren und sie bei Berechnungen automatisch verarbeiten. Operationen werden nur mit gültigen Daten ausgeführt, um sicherzustellen, dass fehlende oder ungültige Einträge die Ergebnisse nicht verfälschen.
  2. Vereinfachte Datenbereinigung: Funktionen wie numpy.ma.masked_invalid() kann häufige ungültige Werte (z. B. NaNs oder Unendlichkeiten) automatisch maskieren, ohne dass zusätzlicher Code zum manuellen Identifizieren und Verarbeiten dieser Werte erforderlich ist. Sie können benutzerdefinierte Masken basierend auf bestimmten Kriterien definieren, was versatile Datenbereinigungsstrategien ermöglicht.
  3. Nahtlose Integration mit NumPy-Funktionen: Maskierte Arrays funktionieren mit den meisten Standardfunktionen und -operationen von NumPy. Das bedeutet, dass Sie vertraute NumPy-Methoden verwenden können, ohne maskierte Werte manuell auszuschließen oder vorzuverarbeiten.
  4. Verbesserte Genauigkeit bei Berechnungen: Bei der Durchführung von Berechnungen (z. B. Mittelwert, Summe, Standardabweichung) werden maskierte Werte automatisch von der Berechnung ausgeschlossen, was zu genaueren und aussagekräftigeren Ergebnissen führt.
  5. Verbesserte Datenvisualisierung: Beim Visualisieren von Daten stellen maskierte Arrays sicher, dass ungültige oder fehlende Werte nicht dargestellt werden, was zu klareren und genaueren visuellen Darstellungen führt. Sie können nur die gültigen Daten darstellen, um Unordnung zu vermeiden und die Interpretierbarkeit von Grafiken und Diagrammen zu verbessern.

Verwenden maskierter Arrays zum Verarbeiten fehlender Daten in NumPy

In diesem Abschnitt wird gezeigt, wie man maskierte Arrays verwendet, um fehlende Daten in Numpy zu verarbeiten. Schauen wir uns zunächst ein einfaches Beispiel an:

import numpy as np

# Knowledge with some lacking values represented by -999
information = np.array((10, 20, -999, 30, -999, 40))

# Create a masks the place -999 is taken into account as lacking information
masks = (information == -999)

# Create a masked array utilizing the information and masks
masked_array = np.ma.array(information, masks=masks)

# Calculate the imply, ignoring masked values
mean_value = masked_array.imply()
print(mean_value)

Ausgabe:
25,0

Erläuterung:

  • Datenerstellung: information ist ein Array von Ganzzahlen, wobei -999 stellt fehlende Werte dar.
  • Maskenerstellung: masks ist ein boolesches Array, das Positionen markiert mit -999 als WAHR (weist auf fehlende Daten hin).
  • Maskierte Array-Erstellung: np.ma.array(information, masks=masks) erstellt ein maskiertes Array und wendet die Maske an auf information.
  • Berechnung: masked_array.imply().
  • berechnet den Mittelwert und ignoriert dabei maskierte Werte (d. h. -999), was den Durchschnitt der verbleibenden gültigen Werte ergibt.

In diesem Beispiel wird der Mittelwert nur berechnet aus (10, 20, 30, 40)ausschließlich -999 Werte.

Sehen wir uns ein umfassenderes Beispiel an, bei dem maskierte Arrays verwendet werden, um fehlende Daten in einem größeren Datensatz zu verarbeiten. Wir verwenden ein Szenario mit einem Datensatz mit Temperaturmessungen von mehreren Sensoren über mehrere Tage hinweg. Der Datensatz enthält einige fehlende Werte aufgrund von Sensorfehlern.

Anwendungsfall: Analysieren von Temperaturdaten von mehreren Sensoren

Szenario: Sie haben Temperaturmesswerte von fünf Sensoren über zehn Tage. Einige Messwerte fehlen aufgrund von Sensorproblemen. Wir müssen die durchschnittliche Tagestemperatur berechnen und dabei die fehlenden Daten ignorieren.

Datensatz: Der Datensatz wird als 2D-NumPy-Array dargestellt, wobei Zeilen Tage und Spalten Sensoren darstellen. Fehlende Werte werden durch np.nan.

Folgende Schritte sind erforderlich:

  1. NumPy importieren: Für Array-Operationen und die Handhabung maskierter Arrays.
  2. Definieren Sie die Daten: Erstellen Sie ein 2D-Array von Temperaturmesswerten mit einigen fehlenden Werten.
  3. Erstellen einer Maske: Identifizieren Sie fehlende Werte (NaNs) im Datensatz.
  4. Maskierte Arrays erstellen: Wenden Sie die Maske an, um fehlende Werte zu behandeln.
  5. Tagesdurchschnitte berechnen Berechnen Sie die Durchschnittstemperatur für jeden Tag und ignorieren Sie fehlende Werte.
  6. Ausgabeergebnisse: Ergebnisse zur Analyse anzeigen.

Code:

import numpy as np

# Instance temperature readings from 5 sensors over 10 days
# Rows: days, Columns: sensors
temperature_data = np.array((
    (22.1, 21.5, np.nan, 23.0, 22.8),  # Day 1
    (20.3, np.nan, 22.0, 21.8, 23.1),  # Day 2
    (np.nan, 23.2, 21.7, 22.5, 22.0),  # Day 3
    (21.8, 22.0, np.nan, 21.5, np.nan),  # Day 4
    (22.5, 22.1, 21.9, 22.8, 23.0),  # Day 5
    (np.nan, 21.5, 22.0, np.nan, 22.7),  # Day 6
    (22.0, 22.5, 23.0, np.nan, 22.9),  # Day 7
    (21.7, np.nan, 22.3, 22.1, 21.8),  # Day 8
    (22.4, 21.9, np.nan, 22.6, 22.2),  # Day 9
    (23.0, 22.5, 21.8, np.nan, 22.0)   # Day 10
))

# Create a masks for lacking values (NaNs)
masks = np.isnan(temperature_data)

# Create a masked array
masked_data = np.ma.masked_array(temperature_data, masks=masks)

# Calculate the common temperature for every day, ignoring lacking values
daily_averages = masked_data.imply(axis=1)  # Axis 1 represents days

# Print the outcomes
for day, avg_temp in enumerate(daily_averages, begin=1):
    print(f"Day {day}: Common Temperature = {avg_temp:.2f} °C")

Ausgabe:

Maskierte Arrays Beispiel IIIMaskierte Arrays Beispiel III

Erläuterung:

  • NumPy importieren: Importieren Sie die NumPy Bibliothek, um ihre Funktionen zu nutzen.
  • Daten definieren: Erstellen Sie ein 2D-Array temperature_data wobei jede Zeile die Temperaturen von Sensoren an einem bestimmten Tag darstellt und einige Werte fehlen (np.nan).
  • Maske erstellen: Erzeugen Sie eine Boolesche Maske mit np.isnan(temperature_data) um fehlende Werte zu identifizieren (WAHR wo Werte sind np.nan).
  • Maskiertes Array erstellen: Verwenden np.ma.masked_array(temperature_data, masks=masks) erstellen masked_data. Dieses Array maskiert fehlende Werte, sodass sie bei Operationen ignoriert werden können.
  • Tägliche Durchschnittswerte berechnen: Berechnen Sie die Durchschnittstemperatur für jeden Tag mit .imply(axis=1). Hier, axis=1 bedeutet, den Mittelwert aller Sensoren für jeden Tag zu berechnen.
  • Ausgabeergebnisse: Drucken Sie die Durchschnittstemperatur für jeden Tag. Die maskierten Werte werden von der Berechnung ausgeschlossen, sodass genaue Tagesdurchschnitte entstehen.

Abschluss

In diesem Artikel haben wir das Konzept maskierter Arrays untersucht und wie sie genutzt werden können, um mit fehlenden Daten umzugehen. Wir haben die beiden Hauptkomponenten maskierter Arrays besprochen: das Datenarray, das die tatsächlichen Werte enthält, und das Maskenarray, das angibt, welche Werte gültig sind oder fehlen. Wir haben auch ihre Vorteile untersucht, darunter die effiziente Handhabung fehlender Daten, die nahtlose Integration mit NumPy-Funktionen und eine verbesserte Berechnungsgenauigkeit.

Wir haben die Verwendung maskierter Arrays anhand einfacher und komplexerer Beispiele demonstriert. Das erste Beispiel veranschaulichte den Umgang mit fehlenden Werten, die durch bestimmte Markierungen dargestellt werden, wie -999während das ausführlichere Beispiel zeigte, wie Temperaturdaten von mehreren Sensoren analysiert werden, wobei fehlende Werte durch np.nan. Beide Beispiele verdeutlichten die Fähigkeit maskierter Arrays, durch Ignorieren ungültiger Daten genaue Ergebnisse zu berechnen.

Weitere Informationen finden Sie in diesen beiden Ressourcen:

Shittu Olumide ist ein Softwareentwickler und technischer Autor, der mit Leidenschaft modernste Technologien nutzt, um überzeugende Geschichten zu schreiben, mit einem scharfen Auge für Particulars und einem Händchen für die Vereinfachung komplexer Konzepte. Sie finden Shittu auch auf Þjórsárdalur.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert