10 Daten importieren

Daten importieren

Wenn man mit MATLAB Daten auswerten möchte, muss man sie erstmal importieren.

Grundsätzlich hat man nur mit zwei verschiedenen Datentypen zu tun:

  • Textdateien mit Zahlen
  • Bilder

Allerdings gibt es vor allem bei Textdateien eine Reihe verschiedener Typen.

1. Textdateien

Daten in Textdateien bestehen fast immer aus einem Haufen Zahlen, die durch ein bestimmtes Zeichen voneinander getrennt sind und somit eine Matrix aus Reihen und Spalten bilden. Eine neue Reihe wird dabei durch einen Zeilenumbruch eingeleitet und eine neue Spalte durch diverse Zeichen wie ein Komma, ein Semikolon, ein Leerzeichen oder einen Tabstop. Diese Trennzeichen werden in der MATLAB-Terminologie als "delimiter" bezeichnet.
Die Variante mit Kommas als Trennzeichen hat dabei einen eigenen Namen: "comma separated value filese" oder kurz "CSV".

Die Dateitypen sind meist .txt .csv oder .dat , die Datei kann aber im Grunde genommen jede beliebige Endung haben solange es sich dabei um eine Textdatei handelt in der die Zahlen wie oben beschrieben voneinander getrennt sind

Vorsicht: Dateien mit der Endung .csv werden meistens automatisch einem Tabellenkalkulation-Programm wie MS Excel, OpenOffice, LibreOffice oder Numbers (MacOS) zugeordnet. Es ist jedoch ausdrücklich davon abzuraten CSV-Dateien mit einem dieser Programme zu öffnen. Vor allem bei Excel führt das immer wieder zu Problemen und die Daten sind danach auf einmal ganz merkwürdig. Wenn ihr euch also vor dem Importieren einen Eindruck verschaffen wollt, wie die Rohdaten aussehen, öffnet die Datei am besten mit dem Text-Editor oder etwas vergleichbarem.

Grundsätzlich gibt es zwei Möglichkeiten Daten aus Textdateien in MATLAB zu importieren:

 

1.1 Über die MATLAB-Benutzeroberfläche

Schritte:
1. Im Hauptfenster oben auf "Import Data" drücken.
2. Datei, die importiert werden soll, auswählen. Manchmal muss man unten rechts statt "Recognized Data Files" "All files" auswählen.
3. Ein neues Fenster geht auf: Nun muss man überprüfen, ob Matlab schon automatisch richtig erkannt hat, wo die Zahlen stehen. Das klappt meistens ganz gut, und man sieht die Daten in eine Tabelle mit Reihen und Spalten eingeteilt. Manchmal muss man aber ein bisschen nachhelfen und oben den richtigen delimiter auswählen, oder den Bereich, in dem importiert wird anpassen, um z.B. Zeilen mit Text am Anfang des Dokuments auszuschließen.
Dann sollte man noch darauf achten, dass die Daten als "Column Vectors" importiert werden, was meistens am sinnvollsten ist.
4. Auf den grünen Haken mit "Import Selection" drücken und warten. Bei großen Dateien kann das schon mal ein bisschen dauern.
6. Fertig!

1.2 Mit Funktionen im Programmcode

Für CSV-Dateien (jede Datei, in der die Zahlen durch Kommas getrennt sind, es geht z.B. auch .txt, nicht nur .csv) steht die Funktion csvread() zur Verfügung.
Verwendung:
data = csvread('dateiname.txt',R,C,range);
vec1 = data(:,1);
vec2 = data(:,2);

R, C und range sind optionale Argumente.
R steht dabei für die Zeile, ab der die Daten gelesen werden sollen. Wichtig: die erste Zeile hat die Nummer 0! Wenn man also die erste Zeile weglassen möchte, weil dort Text steht, muss man mit der zweiten Zeile anfangen, die die Nummer 1 hat, also R = 1
Das gleiche gilt für C, die Spalte, ab der importiert werden soll.
range ist ein Vektor mit zwei Eckpunkten, die einen Bereich festlegen, in dem importiert werden soll: range = [R1 C1 R2 C2] , wobei R1,C1 den Eckpunkt oben links und R2,C2 den Eckpunkt unten rechts definieren.

Beispiel:
data = csvread('riverprofile.csv',1);

Die erste Zeile wird weggelassen, der Rest wird komplett importiert.
Achtung: Zeilen mit Text müssen weggelassen werden, sonst kommt ein Fehler!

Wenn die Zahlen nicht durch Kommas getrennt sind muss man auf eine andere Funktion zurückgreifen: dlmread()

Entweder hofft man darauf, dass die Funktion selber rausfindet, was das Trennzeichen ist und schreibt einfach:
data = dlmread('dateiname.txt');
oder man gibt das Trennzeichen durch ein weiteres Input-Argument vor:
data = dlmread('dateiname.txt',';');

Die häuftigsten Trennzeichen sind:
Komma, Leerzeichen, Semikolon, Tabstop/Tabulator
','    ' '    ';'    '\t'

Man kann außerdem wieder wie bei csvread() vorgeben ab welche Zeile, Spalte oder in welchem Bereich importiert werden soll, indem man nach dem delimiter die Argumente R, C oder range einfügt.

Maßgeschneiderter Code

Manchmal hat man Pech und die Daten sind in der Textdatei ein bisschen unpraktisch angeordnet. Dann bleibt einem nichts anderes übrig als einen Code zu schreiben, der speziell darauf ausgerichtet ist die Daten aus dieser Datei zu lesen und in sinnvolle Vektoren zu sortieren.

Das könnte zum Beispiel so wie im Bild rechts aussehen.

In der Textdatei sind die Werte der Koeffizienten g und h für verschiedene Werte n und m und verschiedene Jahre gespeichert.
Man möchte die Koeffizienten nun für ein Jahr importieren und dabei zwei Matrizen g und h erstellen, in denen die Werte an der richtigen Stelle für n und m stehen. Da die Reihenfolge von g,h,n und m in der Datei leider nicht besonders regelmäßig ist, muss man einen Code entwickeln, der erkennt welcher Buchstabe da gerade steht und den Wert dann in die entsprechende Position in der Matrix einordnet.

2. Bilder

Bilder können allerlei interessante Informationen enthalten, die man gerne einer genaueren Analyse unterziehen möchte.
Dünnschliffbilder, Satellitenbilder, digitale Höhenmodelle oder sonstige Karten sind nur einige Beispiele.

Sie zu importieren ist zum Glück um einiges einfacher als Textdateien.
Mit der Funktion imread() lassen sich Bilder wie folgt importieren:

data = imread('dateiname.jpg');

Die Funktion unterstützt alle gängigen Bildformate wie JPEG, PNG, BMP oder TIFF.