Navigation

Tag5

A) Exportieren und Importieren verschiedener Datenformate

Wie wir bereits wissen speichert Matlab seine Daten standardmaessig als .mat Dateien ab, die ausschliesslich von Matlab selber  vernuenftig weiterverarbeitet werden koennen. Haeufig moechte man jedoch Matlab mit anderen Programmen kombinieren, die andere Dateiformate verwenden.

Wir werden uns zunaechst etwas ausfuehrlicher mit verschiedenen Grafik-Formaten beschaeftigen, da diese extrem haeufig gebraucht werden, anschliessend kommen wir kurz zum Einlesen von Text-Dateien und zur Kompatibilitaet mit Excel. Wenn Sie Bedarf an ausfuehrlicheren Informationen zum Im- oder Exportieren bestimmter Dateiformate haben, schauen Sie bitte in der Hilfe nach.

T5A1) Eine wichtige Voraussetzung zum Verstaendnis von Grafik-Formaten ist die Farbkodierung, mit der man die in einer Grafik genutzten Farben genau festlegen kann. Farben werden in der sogenannten RGB-Kodierung dargestellt, d.h. sie werden durch einen Vektor farbe=[rot gruen blau] definiert. In Matlab werden zur Kodierung fuer rot, gruen und blau Werte zwischen 0 und 1 angegeben,  z.B. ist [1 0 0] rot, [0 0 0] schwarz, [1 1 0] gelb, [0.6 0 0.6] dunkel-violett. So lassen sich beliebige Farben mischen.
*) Wenn Sie Lust auf ausgefeilte Grafik haben: Stellen Sie den Vektor 0:1:10 mit einer durchgezogenen dunkelroten Linie und die einzelnen Punkte mit tuerkis gefuellten Kreisen dar (hierfuer braucht man "line properties", siehe T1H6).

T5A2) Ein wichtiges Grafik-Format ist jpg. jpg-Dateien koennen in Matlab eingeladen und bearbeitet werden. Darin ist jeder Punkt durch einen Vektor von drei Farbwerten kodiert (allerdings etwas unterschiedlich zum in Matlab ueblichen Format). Bei zweidimensionalen Abbildungen ergibt sich also eine 3 dimensionale Matrix der Groesse MxNx3 (M und N ist die Anzahl Pixel in vertikaler und horizontaler Richtung). Schauen Sie sich die Arbeitsweise folgendes Skripts an:
[meisenshow.m] hierzu brauchen Sie ausserdem die Datei [bmeise.jpg]
Wie unterscheidet sich die Farbkodierung dieser jpg-Datei von der in Matlab ueblichen?
Erweitern Sie die Show um eine Meise mit zwei Koepfen.
Teilen Sie die Matrix in drei Teile, um sich die Rot-, Gruen- und Blau-Anteile des Bildes einzeln anzusehen. 

T5A3) Man kann Matlab-Abbildungen abspeichern und erneut in Matlab oeffnen. Die einfachste Moeglichkeit dazu ist, den Menuepunkt ">File >Save as" zu benutzen. Der Standard ist dann, dass die Abbildung mit der Endung .fig abgespeichert wird - dabei handelt es sich um ein Format, was nur von Matlab vernuenftig verarbeitet werden kann, dort aber beim wieder einladen alle Eigenschaften der Abbildung beibehaelt.

Probieren Sie aus: Erzeugen Sie sich einen plot mit zwei dargestellten Graphen, z.B. zwei Glockenkurven wie am ersten Kurstag. Stellen Sie sich die Grafikoptionen so ein, dass sie Ihnen gefallen und beschriften Sie die Achsen. Speichern Sie die Abbildung im Standardformat ab. Zoomen Sie in die Abbildung hinein und speichern Sie die Abbildung unter einem anderen Namen wieder ab. Schliessen Sie dann das Grafikfenster und laden die beiden gerade gespeicherten Abbildungen ueber ">File >open" im Hauptmenue ein. Probieren Sie, bei der Abbildung des Ausschnitts wieder den gesamten Graphen zu reproduzieren.

T5A4) Wenn man die Abbildungen mit einem anderen Programm benutzen will, z.B. um sie in ein mit Word geschriebenes Protokoll einzubinden, muss man ein anderes Dateiformat benutzen als .fig  Dazu kann man wie oben beschrieben abspeichern, muss jedoch  das gewuenschte Dateiformat auswaehlen und die Endung der Datei entsprechend anpassen.
Probieren Sie aus, Ihre eben erzeugte Abbildung als jpg-Datei zu speichern, zu schliessen und wieder mit Matlab zu oeffenen. Was muss man tun, um sie sich wieder anzusehen? Kann man aus einem Ausschnitt der Kurve wieder zur gesamten Kurve zurueckkommen?
*) Probieren Sie aus, sowohl eine Abbildung im .fig Format als auch im .jpg Format in Word zu importieren.

T5A5) Da man Grafik meistens sowieso ansehen moechte, bevor man sie abspeichert, bietet sich meistens der Weg ueber die Menueleiste an. In manchen Faellen moechte man jedoch aus einem Skript oder einer Funktion heraus Abbildungen speichern. Hierfuer gibt es den Befehl saveas. Damit dieser Befehl weiss, welche Grafik gespeichert werden soll, muss diese jedoch beim plotten benannt werden. Probieren Sie aus:
x=1:1:100; y=sqrt(x);
h=plot(x,y);
saveas(h,'testbild.fig')
Schliessen Sie die Abbildung und laden Sie testbild.fig neu ein.

Das Praktische an dieser Art des Speicherns ist, dass Matlab direkt verschiedene Formate speichern kann und das gewuenschte Dateiformat an der Endung des Dateinamens erkennt. Unter anderem koennen .jpg, .eps, .pdf und .bmp benutzt werden. (Die gesamte Liste moeglicher Formate und ihrer Endungen findet man in der Hilfe unter saveas.)
* Probieren Sie, die Abbildung z.B. als bmp abzuspeichern und in Word zu importieren.

T5A6) Eine haeufig gebrauchte Anwendung ist das Einlesen von Text-Dateien, die mit einem anderen Programm abgespeichert wurden.

a) Wenn es sich bei der Datei ausschliesslich um Zahlen handelt und in jeder Zeile der Datei gleich viele Zahlen enthalten sind, kann man in Matlab den normalen load Befehl verwenden. Erstellen Sie mit einem Textprogramm eine Testdatei testdatei.txt z.B. mit den Eintraegen

5 7 9 13.6

0.5 100 1 17

Speichern Sie sie als TEXT-Datei (NICHT word!) z.B. als testdatei.txt ab und laden Sie sie in Matlab mit A=load('testdatei.txt') ein.

b) Manchmal hat man Dateien, in denen die numerischen Eintraege durch bestimmte Zeichen getrennt sind. z.B. koennten Sie eine Datei testdatei2.txt haben, die ein Semikolon zum trennen benutzt:

5; 7; 9; 13.6

0.5; 100; 1; 17

Um diese einzulesen, muss Matlab das Trennzeichen mitgeteilt werden. Hierfuer gibt es die Funktion dlmread (delimited characters read):

A= dlmread('testdatei2.txt',';')

Probieren Sie auch das aus.

* c) Komplizierter ist die Sache, wenn eine Datei gemischte numerische und ASCII Daten enthaelt. Hierfuer gibt es die Funktion textread. Sie basiert darauf, dass man durch eine Abfolge von %s (string) und %f (float Zahlen) das Muster angibt, mit dem jede der Zeilen aufgebaut ist. Schauen Sie sich bei Interesse in der Hilfe an, wie diese Funktion funktioniert und probieren Sie sie aus.

* T5A7)  Speziell fuer Nutzerinnen und Nutzer von Excel: Matlab kann excel-Dateien einlesen mit dem Befehl variable=xlsread('dateinme.xls'). Probieren Sie das mit der Datei [entfernungen.xls] aus.  Der Befehl xlswrite('dateiname',variable) soll eine Datei im xls-Format speichern (funktioniert aber auf meinem Apple nicht), probieren Sie ihn auf den Windows-Rechnern aus, indem Sie ein grosse Matrix erzeugen, abspeichern und in Excel oeffnen. Man kann auch mit copy-paste direkt zwischen dem Array Editor in Matlab und Excel hin und her kopieren, allerdings muss man in Excel zunaechst den Bereich markieren, in den eine Matrix kopiert werden soll. Probieren Sie auch das aus.     

* T5A8) Matlab kann im Prinzip sehr viele Formate importieren, dies per Hand zu tun ist aber oft anstrengend. Deshalb gibt es den "Matlab import wizard", um dabei zu helfen. Schauen Sie bei Interesse in der Hilfe nach, wie man ihn verwendet. Fuer eine Auflistung verschiedener Importfunktionen fuer verschiedene Fileformate (inklusive Sound und Filmen) suchen Sie bitte in der Hilfe nach dem Schlagwort "File Formats".

B) Grafische Darstellung von Daten

Daten graphisch darzustellen ist eine extrem wichtige Aufgabe bei der wissenschaftlichen Datenauswertung. Der wichtigste Befehl hierfuer ist der bereits bekannte plot Befehl. In diesem Abschnitt wollen wir einige zusaetzliche Moeglichkeiten der grafischen Darstellung betrachten.

T5B1)  Haeufig verarbeitet man mehr Daten als man sinnvoll in einer Abbildung unterbringen kann. Man kann eine Abbildung in mehrere kleine Abbildungen teilen. Mit subplot(2,3,5) erzeugt man eine Matrix aus kleinen Abbildungen mit 2 Zeilen und 3 Spalten, wobei das 5. Fenster aktiv ist. In diesem kann der plot-Befehl normal verwendet werden. Machen Sie eine Abbildung bestehend aus 4 subplots, in denen fuer x=-5:0.1:5 die Kurven x.^1 bis x.^4 dargestellt sind. 

T5B2) Matlab kann auch mehr als ein Grafikfenster gleichzeitig benutzen. Eine neue Abbildung bekommt man mit figure. Mit figure(1) und figure(2) springt man zwischen den aktiven Fenstern. close(1) schliesst das zuerst erzeugte Fenster, close all schliesst alle Grafikfenster. clf loescht den Inhalt des aktuellen Fensters. Oeffenen Sie zwei Grafikfenster plotten Sie im fuer den x-Vektor 0.1:0.1:10 im ersten Fenster die Quadratwurzel, im zweiten Fenster das Quadrat von x. Probieren Sie die oben genannten Befehle aus.

T5B3) Kuchengrafiken sind eine beliebte Darstellungsmoeglichkeit fuer Prozentanteile. Um die Stimmenverteilung bei der letzten Wahl des Oldenburger Stadtrates darzustellen, wuerde man z.B. schreiben
prozente=[32.74 25.99 21.24 6.33 7.24 5.44 0.99];
pie(prozente) 

Wenn man es noch etwas huebscher haben moechte, kann man z.B. auch benutzen:
pie3(prozente)
pie(prozente,{'SPD','CDU','Gruene','FDP','Linke','BFO','NPD'})
, oder
pie3(prozente,[0 0 1 0 0 0 0]).
Was passiert dabei jeweils?

T5B4) Haeufigkeitsverteilungen stellt man in Histogrammen dar (das werden wir am naechsten Kurstag noch ausfuehrlich besprechen). Dazu gibt es in Matlab den sehr praktischen Befehl hist. In seiner einfachsten Form, wendet man ihn auf einen Vektor v mit hist(v) an. Ein armer Student musste bei 100 Sonnenblumen einer neuen Zuchtform die Samen zaehlen, die Samenzahlen stehen im Vektor sbkerne.mat bzw sbkerne_v6.mat
Schauen Sie sich die Verteilung der Samenanzahlen als Histogramm an.

T5B5) Wir haben vor einiger Zeit schonmal den Befehl imagesc benutzt, um uns den Inhalt einer Matrix anzeigen zu lassen. Benutzen Sie ihn, um sich die Verteilung einzelliger Algen in einer Petrischale anzusehen, die als Matrix population in [algen.mat] bzw [algen_v6.mat] gespeichert ist.
Was bedeuten in dieser Abbildung die beiden Achsen?
In den Vektoren x und y sind Abstaende der Messbereiche in x und y Richtung der Petrischale gespeichert. Mit imagesc(x,y,population) bekommt man aussagekraeftige Achsenbeschriftungen.
Der Befehl colorbar erzeugt eine Legende fuer die Farbkodierung der Werte. 

T5B6) Dieselbe Algenverteilung laesst sich auch

dreidimensional

als "Gebirge" darstellen. Der Befehl dafuer ist surf(population).  Um aussagekraeftige Achsen zu bekommen, muss jedem Punkt der Matrix ein x- und ein y-Wert zugeordnet werden (die Werte der Matrix population werden auf der z-Achse aufgetragen). Benutzen Sie dafuer die mit abgespeicherten Matrizen xmatrix und ymatrix. Der Befehl colorbar funktioniert auch hier. Probieren Sie den alternativen Befehl mesh aus. Was ist der Unterschied zu surf?

C) Suchen und Sortieren

Daten nach bestimmten Kriterien zu durchsuchen ist eine sehr haeufige Aufgabe bei der wissenschaftlichen Datenauswertung. Prinzipiell laesst sich das gut mit Hilfe von logischen Operatoren, Fallunterscheidungen und Schleifen erreichen. Es gibt aber auch den speziellen Befehl find, mit dem man Matrizen nach bestimmten Kriterien durchsuchen kann.

Es kommt haeufig vor, dass man Daten nicht in der Reihenfolge belassen moechte, wie man sie gewonnen hat, sondern nach bestimmten Kriterien sortieren. Im Prinzip geht auch das "per Hand", es kann aber schnell ziemlich viel Arbeit werden. Deshalb gibt es in Matlab den praktischen Befehle sortrows. m2=sortrows(m1,n) sortiert die Zeilen der Matrix m1 gemaess ihren Eintraegen in der n-ten Spalte in aufsteigender Reihenfolge. [m2,index]=sortrows(m1,n) gibt zusaetzlich einen Vektor der Indizes zurueck.

T5C1) Laden Sie folgende Beobachtungsreihe: [fuetterungen.mat] oder [fuetterungen_v6.mat]
In dieser Matrix wurden an 31 Tagen eines Monats eingetragen, wie gross die Niederschlagsmenge des Tages in mm war (1. Spalte) und wie oft ein Meisenweibchen sein Nest zum Fuettern angeflogen hat (2. Spalte).
Finden Sie mit Hilfe von Schleifen, Fallunterscheidungen und / oder logischen Operatoren heraus:
An welchen Tagen dieses Monats ist kein Regen gefallen?
An welchen Tagen hat die Meise haeufiger als 50 mal gefuettert?
An welchen Tagen ohne Niederschlag hat die Meise haeufiger als 50 mal gefuettert?
Wie haeufig ist es vorgekommen, dass die Meise an zwei aufeinanderfolgenden Tagen ueber 100 mal gefuettert hat?

T5C2) Es gibt in Matlab auch einen Befehl, der das Suchen uebernimmt: find. Dieser Befehl gibt die Indizes derjenigen Elemente eines Vektors oder einer Matrix zurueck, die ungleich 0 sind. Probieren Sie aus:
v=[1 7 5 0 8 0 3 1]; ind_ungleich_0=find(v); ind_gleich_1=find(v==1);
m=[ 0 1; 5 9; 1 0]; [row_not0,col_not0]=find(m); [row_1,col_1]=find(m==1);

T5C3) Beantworten Sie die Fagen aus T5C1 durch Benutzung des Befehls find.

T5C4) Sortieren Sie die Matrix fuetterungen einmal nach der Anzahl Fuetterungen und einmal nach der Niederschlagsmenge.

D) Hausaufgabe


*T5H1) Ueben Sie den find Befehl, indem Sie Ihr Wunschkatzen-Programm (oder die Musterloesung) von Tag 3 (T5H4) so erweitern, dass es die Daten (Geschlecht, Alter, Farben) saemtlicher gefundener Wunschkatzen ausgibt. Sortieren Sie diese Angaben nach dem Alter.

*T5H2) Benutzen Sie das am zur Aufgabe T4H9 entstandene Programm (wenn Sie selber die Aufgabe nicht geloest haben, laden Sie sich eine Musterloesung herunter: vogeltabelle_insa.m), um sich eine Matrix gefangener Voegel zu erstellen. Sortieren Sie diese so, dass, zuerst die Amseln, dann die Rotkehlchen und zuletzt die Meisen in der Matrix stehen, wobei innerhalb dieser Gruppen jeweils zuerst die Maennchen und dann die Weibchen aufgelistet werden. Die Tiere einer Art und eines Geschlechts sollen jeweils nach dem Gewicht sortiert sein.

Zum 6. Kurstag

Weqo65bm+s3astvjer:jfh Jutta Kre2u+2tzb7l02erg (juttiua.kxrkrnqletzberg@uol.wm+xdeua) (Stand: 21.08.2020)