Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren...

21
M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 1 / 21 Anwendungssoftware III (MATLAB) VII – Import und Export von Daten Michael Liedlgruber Fachbereich Computerwissenschaften Universit ¨ at Salzburg Sommersemester 2014

Transcript of Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren...

Page 1: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 1 / 21

Anwendungssoftware III (MATLAB)VII – Import und Export von Daten

Michael LiedlgruberFachbereich Computerwissenschaften

Universitat Salzburg

Sommersemester 2014

Page 2: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Import und Export von Daten

Import & Export von Daten

Import

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 2 / 21

Wir haben bereits gesehen, dass man in MATLAB relativ einfach Daten inDateien schreiben und wieder lesen kann.

Im Folgenden beschaftigen wir uns mit dem Importieren und Exportieren vonverschiedenen Datentypen, darunter zum Beispiel:

� Excel-Dateien� CSV-Dateien� MATLAB mat-Files� Bilder

Page 3: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Formatierung fur einen Import

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 3 / 21

Das Importieren von Daten in MATLAB kann eine sehr komplizierteAngelegenheit sein . Dies hangt sehr stark von den zu importierenden Daten ab.

Beherzigt man folgende Ratschlage, wird es auf jeden Fall etwas leichter, Datenin MATLAB zu importieren:

� eine zu importierende Datei sollte nur Zahlen beinhalten (bis aufSpaltenbezeichner in der ersten Zeile).

� um Daten vor einem Import zu manipulieren , sollte ein anderes Programm(z.B. MS Excel, OpenOffice, LibreOffice) verwendet werden.

� die Daten sollten nur Werte fur eine Variable pro Spalte beinhalten.� um Datumswerte zu importieren, sollten diese vor dem Import in ein

numerisches Format umgewandelt werden (Vermeidung vonKonvertierungproblemen bei Daten).

Page 4: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 4 / 21

Der einfachste Weg, Daten auf robuste Art und Weise in MATLAB zu importieren,ist der Import von Excel-Dateien.

Dazu mussen in Excel ein paar Punkte beachtet werden:

� nur eine Variable pro Spalte� Spaltenbeschriftungen verwenden (werden dann als Variablennamen

verwendet)� nur Zahlen verwenden (speziell bei Datumswerten)

Um Datumswerte in Zahlen umzuwandeln geht man in Excel wie folgt vor (inOpenOffice und LibreOffice funktioniert dies ahnlich):

1. Datumswerte auswahlen2. Rechtsklick auf die Auswahl3. Im Kontextmenu “Format” wahlen4. Beim Format auf “Zahl” umstellen

Page 5: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 5 / 21

Excel-Dateien uber den “Import Wizard” importierenDer Import von Excel-Dateien ist in MATLAB am einfachsten uber denWorkspace Browser (Button “Import Data”) zu bewerkstelligen.

Alternativ kann der Import auch uber den Current Directory Browser erfolgen:

1. in das Verzeichnis wechseln, welches die Excel-Datei beinhaltet2. Rechtsklick auf die Excel-Datei3. im Menu “Import Data...” wahlen

In beiden Fallen, erscheint nach der Dateiauswahl der “Import Wizard” .

Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welcheeinen fiktiven Temperaturverlauf fur den Janner 2012 beinhaltet. Dazu haben wirfolgende Spalten:

� Datum (bereits in eine Zahl konvertiert)� Mittlere Tagestemperatur� Tagestiefstwerte� Tageshochstwerte

Page 6: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 6 / 21

Wichtig: um die einzelnen Spalten als einzelne Variablen zu importieren(Vektoren), muss die entsprechende Option im Dialog ausgewahlt werden.

Nach erfolgreichem Import sehen wir die Variablen im Workspace Browser.

Page 7: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 7 / 21

Abschließend mussen wir nun noch die Datumswerte korrigieren.

MATLAB und Excel interpretieren Datumswerte unterschiedlich:

� MATLAB: Anzahl der Tage seit dem 1. Janner 0000� Excel: Anzahl der Tage seit dem 1. Janner 1900

Daher mussen wir die Datumswerte noch korrigieren. Dazu addieren wir den 31.Dezember 1899 zu den importierten Datumswerten in Date (mit Hilfe derFunktion datenum):

Date = Date + datenum(’30 DEC1899 ’);

Hinweis: da die Angabe der Tage bei datenum bei 0 startet, geben wir 30 statt31 ein.

Um die korrigierten Zahlenwerte als Datumswerte auszugeben, gibt es dieMATLAB-Funktion datestr:

>> datestr(Date (1))

ans =

01-Jan -2012 % Korrektur erfolgreich!

Page 8: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 8 / 21

Import von Excel-Dateien uber die KommandozeileAlternativ zum “Import Wizard”, kann man auch den Befehl xlsread verwenden,um Excel-Dateien einzulesen.

Fur unsere Testdatei temperatures.xls:

data = xlsread(’temperatures.xls’);

Dieses Kommando liest den Inhalt des ersten Tabellenblattes in die Matrix data.Um ein Arbeitsblatt mit dem Namen Arbeitsblattname einzulesen, gibt manfolgendes ein:

data = xlsread(’temperatures.xls’, ’Arbeitsblattname’);

Fur xlsread gibt es noch zahlreiche Optionen (z.B. Importbereich wahlen oderArbeitsblatt wahlen). Eine ausfuhrliche Beschreibung dieser Moglichkeiten ist inder MATLAB-Hilfe zu finden (doc xlsread).

Zusatzliche Informationen zu einer Excel-Datei (z.B. Namen von Arbeitsmappen)konnen mit Hilfe des Kommandos xlsfinfo ausgegeben werden (siehedoc xlsfinfo).

Page 9: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

CSV-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 9 / 21

CSV-Dateien (Comma Separated Values) sind Textdateien , welche Werteenthalten, die durch ein bestimmtes Spaltentrennzeichen getrennt sind(ublicherweise , oder ;).

Die Temperaturdaten aus Excel konnten im CSV-Format zum Beispiel wie folgtaussehen:

40909 ,1.1 ,0.2401943739,1.9598056261

40910 , -3.2 , -4.0770937883, -2.3229062117

40911, -3.1 , -3.99331443, -2.20668557

40912 ,0.1 , -0.8084478088 ,1.0084478088

...

Hinweis: fur einen Import von CSV-Dateien in MATLAB, muss alsDezimaltrennzeichen immer ein Punkt verwendet werden.

Um eine CSV-Datei in MATLAB zu importieren gibt es wieder zwei Moglichkeiten:

� uber den “Import Wizard”� uber den Befehl csvread

Page 10: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

CSV-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 10 / 21

Import einer CSV-Datei mit dem “Import Wizard”Die Auswahl der CSV-Datei funktioniert wie beim Import von Excel-Dateien.

Im Import-Wizard kann man das gewunschte Trennzeichen angeben:

Ist alles korrekt eingestellt, kann man nach einem Klick auf “Next”, den Namender Variable(n) angeben, in welche die Daten importiert werden sollen.

Enthalt die CSV-Datei Spaltenbeschriftungen, kann automatisch fur jede Spalteein Vektor angelegt werden. Ansonsten wird eine Matrix erzeugt.

Page 11: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

CSV-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 11 / 21

Import einer CSV-Datei mit csvread

Mit dem Befehl csvread konnen CSV-Dateien von der Konsole aus importiertwerden.

WichtigIm Gegensatz zum “Import Wizard” wird in diesem Fall ein Beistrich alsSpaltentrennzeichen vorausgesetzt . Zudem darf die CSV-Datei keineSpaltenbeschriftungen enthalten.

Die Datei temperature.csv wird folgenderweise importiert:

>> A = csvread(’temperatures.csv’);

Will man den Import bei einer bestimmten Zelle (Position) starten, erreicht mandies mittels:

>> A = csvread(’temperatures.csv’, 4, 3);

In diesem Beispiel beginnt der Import mit der 5. Zeile und der 4. Spalte (Indizesstarten bei 0 ! ).

Page 12: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

CSV-Dateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 12 / 21

Zudem kann man auch einen Bereich angeben, welcher importiert werden soll.

Zum Beispiel:

>> A = csvread(’temperatures.csv’, 0, 2, [0 2 7 3]);

In diesem Beispiel werden die 3. und 4. Spalte und die 1. Zeile bis zur 8. Zeileimportiert (Indizes wieder 0-basierend ).

Der zweite und der dritte Parameter (Startzelle) sollten dabei dem Startpunkt desangegebenen Bereichs entsprechen (in unserem Beispiel [0 2]).

Page 13: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Textdateien importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 13 / 21

Liegen Daten in einer Textdatei vor, kann der Import auch mit Hilfe desKommandos textread erfolgen:

>> A = textread(’temperatures.txt’);

Dieses Kommando liest den Inhalt der Datei in die Matrix A ein.

Das Format der Textdatei sollte dabei so einfach wie moglich gehalten werden (inunserem Beispiel wurde ein Leerzeichen als Spaltentrenner benutzt):

40909 1.1 0.2401943739 1.9598056261

40910 -3.2 -4.0770937883 -2.3229062117

40911 -3.1 -3.99331443 -2.20668557

40912 0.1 -0.8084478088 1.0084478088

...

Das Kommando textread unterstutzt aber noch viele andere Formate (ubereine Formatanweisung ). Nahere Informationen dazu findet man in derMATLAB-Hilfe doc textread.

Page 14: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

MATLAB mat-Files importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 14 / 21

MATLAB hat auch ein eigenes Dateiformat um Daten zu speichern (mat-Files).

mat-Files beinhalten sowohl den Namen als auch den Wert von Vari ablen.Es ist daher nicht notwendig, beim Laden eines mat-Files einen Variablennamenanzugeben.

Geladen wird ein mat-File mit dem Befehl load. Das folgende Beispiel ladt dieDatei test.mat und erstellt alle darin enthaltenen Variablen im Workspace:

>> load test.mat

Sind in der zu ladenden Datei z.B. die Variablen X, Y und Z enthalten, kann manauch nur bestimmte Variablen laden. Zum Beispiel:

>> load test.mat Y Z

Diese Anweisung erstellt nur die Variablen Y und Z aus der Datei test.mat imWorkspace.

Page 15: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Bilder importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 15 / 21

MATLAB bietet auch Funktionen, um Bilder zu laden. Dabei unterstutzt MATLABverschiedene Dateiformate, z.B. JPEG, PNG, BMP und TIFF.

Will man ein Bild laden, verwendet man dazu den Befehl imread (Bild wird ineine Matrix geladen):

>> I = imread(’lena.jpg’); % bild laden

>> imshow(I); % bild anzeigen

Das Ergebnis ist folgende Figure:

imshow ist einer von mehreren MATLAB-Befehlen, um ein Bild anzuzeigen(siehe doc imagesc, doc image und doc imshow).

Page 16: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Bilder importieren

Import & Export von Daten

Import

Formatierung

Excel-Dateien

CSV-Dateien

Textdateien

mat-Files

Bilder

Export

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 16 / 21

Um nahere Informationen zu einer Bilddatei zu erhalten, verwendet man inMATLAB den Befehl imfinfo:

>> imfinfo(’lena.jpg’)

ans =

Filename: ’lena.jpg’

FileModDate: ’23-Feb -2012 10:22:26’

FileSize: 29338

Format: ’jpg’

FormatVersion: ’’

Width: 512

Height: 512

BitDepth: 24

ColorType: ’truecolor’

FormatSignature: ’’

NumberOfSamples: 3

CodingMethod: ’Huffman ’

CodingProcess: ’Sequential’

Comment: {}

Page 17: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Excel-Dateien exportieren

Import & Export von Daten

Import

Export

Excel-Dateien

CSV-Dateien

mat-Files

Bilder

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 17 / 21

Viele der Dateiformate, welche MATLAB importieren kann, konnen in MATLABauch exportiert werden.

Wir haben gesehen, dass man Excel-Dateien mit dem Kommando xlsreadeinlesen kann.

Um bestehende Daten in eine Excel-Datei zu exportieren, verwendet man denBefehl xlswrite.

>> A = rand (100, 100);

>> xlswrite(’random.xls’, A);

Wie bei xlsread, gibt es auch bei xlswrite diverse Optionen. Eineausfuhrliche Beschreibung dieser Moglichkeiten ist in der MATLAB-Hilfe zu finden(doc xlswrite).

Wichtig: xlswrite funktioniert nur unter Windows (mit einer Excel-Installation).Ist kein Excel installiert oder verwendet man Linux, versucht MATLAB, eineCSV-Datei zu erzeugen.

Page 18: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

CSV-Dateien exportieren

Import & Export von Daten

Import

Export

Excel-Dateien

CSV-Dateien

mat-Files

Bilder

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 18 / 21

Auch fur CSV-Dateien gibt es ein Gegenstuck zur Funktion csvread – namlichdie Funktion csvwrite.

Das folgende Beispiel zeigt, wie man Daten in eine CSV-Datei exportiert:

>> A = rand (100, 100);

>> csvwrite(’random.csv’, A);

Auszug aus der resultierenden Datei:

0.99859 ,0.014034 ,0.59533 ,0.65084 ,0.45868 , ...

0.59436 ,0.66201 ,0.67865 ,0.29553 ,0.73434 , ...

.

.

.

Zu beachten:

� die Spalten sind immer durch ein Komma getrennt.� es ist nur eine Prazision von funf Nachkommastellen moglich (fur mehr

Prazision siehe doc dlmwrite).

Page 19: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

MATLAB mat-Files exportieren

Import & Export von Daten

Import

Export

Excel-Dateien

CSV-Dateien

mat-Files

Bilder

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 19 / 21

Naturlich kann man auch Daten in ein mat-File speichern. Dazu wird der Befehlsave verwendet.

Dabei gilt zu beachten, dass das Kommando save standardmaßig denkompletten Workspace in die angegebene Datei speichert:

>> A = rand (100, 100);

>> B = rand (100, 100);

>> save test.mat

Die Datei test.mat enthalt nun die Variablen A und B.

Will man nur bestimmte Variablen speichern, muss man zusatzlich den Namender zu speichernden Variable angeben. Zum Beispiel:

>> A = rand (100, 100);

>> B = rand (100, 100);

>> C = rand (100, 100);

>> save test.mat A C

Page 20: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

MATLAB mat-Files exportieren

Import & Export von Daten

Import

Export

Excel-Dateien

CSV-Dateien

mat-Files

Bilder

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 20 / 21

mat-Files sind ublicherweise binare Dateien. Will man die Daten als Textdateispeichern , kann man dies zusatzlich als Option bei save angeben (-ascii).

>> A = rand (100, 100);

>> B = rand (100, 100);

>> save test.mat B -ascii -double

Die resultierende Datei ist nun eine Textdatei (die Spalten sind durch Tabulatorengetrennt).

Wichtig: will man eine solche Textdatei mittels load wieder laden, muss manMATLAB mitteilen, dass die Datei nicht binar ist:

>> load test.mat -ascii

Page 21: Anwendungssoftware III (MATLAB)mliedl/data/matlab_filehandling_VII.pdf · Im Folgenden importieren wir eine Excel-Datei (temperatures.xls), welche einen fiktiven Temperaturverlauf

Bilder exportieren

Import & Export von Daten

Import

Export

Excel-Dateien

CSV-Dateien

mat-Files

Bilder

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 21 / 21

Um in MATLAB Bilder zu speichern, gibt es den Befehl imwrite.

>> X = peaks (256)*30;

>> imwrite(uint8(abs(X)), ’peaks.png’, ’png’);

Der erste Parameter gibt die Variable an, welche als Bild gespeichert werden soll(eine Matrix). Der dritte Parameter gibt das Dateiformat fur das Bild an.

Das Ergebnis ist folgendes Graustufenbild:

Informationen zu weiteren Parametern und Optionen bei imwrite sind in derMATLAB-Hilfe zu finden (doc imwrite).