Datenanalyse

Wir zeigen Dir, wie's geht!

Wie lade ich Daten?

Daten sind die zentrale Grundlage, wenn es um Datenanalyse geht. Daher ist die Frage natürlich absolut verständlich. Um Daten zu laden verwendest Du das Kommando load zusammen mit dem Dateinamen. Die Daten werden dabei in die Tabelle data() geladen, aber Du kannst auch eine Tabelle erzeugen lassen, die dem Dateinamen oder der Bezeichnung der eingebetteten Tabelle (bei *.ndat-Dateien) entspricht, wenn Du die Option totable verwendest.

Die Daten müssen in tabellarischer Form vorliegen und sollten rein numerisch sein. Zeichenketten, die nicht als numerischer Wert interpretierbar sind, werden zur Spaltenüberschrift hinzugefügt. Dateiformate, die unterstützt werden, sind unter Anderem *.ndat, *.txt, *.csv, *.xls und *.xlsx.

Wie stelle ich Daten graphisch dar?

Ein guter erster Schritt, um Daten zu analysieren, ist es, die geladenen Daten einfach mal graphisch darzustellen, um sich damit einen ersten Überblick über die Daten zu verschaffen. Vorab kann es auch helfen, wenn Du Dir die Spaltenüberschriften der Daten anzeigen lässt. Damit kannst Du vielleich schon erahnen, wie das Format der Daten ist. Zur Illustration verwenden wir den Datensatz <scriptpath>/examples/amplitude.dat, den Du in Deiner NumeRe-Distribution finden kannst.

Laden wir also die Daten und lassen uns die Überschriften der Spalten anzeigen. Das geht, indem man als Zeilenindex das Zeichen # auf den Datensatz verwendet: data(#, :). Das sollte dann

ans = { "omega", "b=3", "b=5", "b=0"}

im Terminal anzeigen. Wir wissen also, dass es eine gemeinsame Spalte omega und drei Messungen b=3 bis b=0 gibt. Mit dieser Information können wir den korrekten Plotbefehl verwenden.

Um einen gewöhnlichen Linien- oder Punktplot zu erzeugen, verwendest Du das Kommando plot gefolgt von den zu plottenden Ausdrücken oder Datensätzen. In unserem Fall lautet das also

plot data(:, 1:2), data(:, 1:3), data(:, 1:4)

Es erscheint ein neues Fenster, in dem der Plot mit den drei Datensätzen als unverbundene Punkte zu sehen ist. Wir können also erahnen, dass es sich bei diesen Daten um Resonanzmessungen handelt.

Eine andere Möglichkeit, Daten graphisch darzustellen, ist der Boxplot und ein Histogramm. Der Boxplot (aktivierbar mit der boxplot-Option) zeigt Dir eine direkte Darstellung der Datenbreite sowie wo sich der hauptsächliche Teil der Datenpunkte befinden (jeder Querstrich teilt das Datenintervall in 25%, so dass die mittlere Box 50% aller Werte enthält). Ein Histogramm im Gegensatz (erzeugbar mit dem hist-Kommando) zeigt Dir direkt die Verteilung der Datenpunkte als Summationsbalken an. Daran kann man z.B. eine Schiefe der Daten erkennen.

Was muss ich tun, um eine Funktion an meine Daten anzupassen?

Ah ja. Das Thema mit den Funktionsanpassungen. Da kannst Du beliebig viel falsch aber auch viel richtig machen. Wir wollen hier aber gar nicht groß in die Thematik einsteigen; dazu gibt es im Netz genug Quellen, die das korrekte herangehen ans Fitten beschreiben und Hinweise geben, was man tun soll und was nicht. Stattdessen fokussieren wir uns hier darauf, wie man den Fitalgorithmus von NumeRe verwendet.

Was Du in erster Linie brauchst, sind Daten. Wir verwenden dazu wieder das vorherige Beispiel, in dem wir ja bereits festgestellt hatten, dass es um Resonanzmessungen geht. Wie Dir vielleicht bewusst ist, werden Resonanzkurven durch die Lorentz-Funktion beschrieben:

lorentz(x, x0, amplitude, damping, offset) := amplitude / sqrt((x^2 - x0^2)^2 + 4*damping^2*x^2) + offset

Wenn wir diese Funktion über define definieren, können wir sie komfortabel im Fitalgorithmus verwenden. Der Fitalgorithmus wird mit dem Kommando fit gestartet, auf das die ausgewählten Daten und durch die Option with die anzupassende Funktion angegeben werden muss. Du kannst außerdem auch die anzupassenden Parameter angeben; wenn Du es aber nicht tust, verwendet NumeRe automatisch alle Variablen außer x und y als Parameter:

fit DATA() -with=FUNCTION(x, ...)

fit DATA() -with=FUNCTION(x, ...) params=[...]

Wenn Du das Kommando fit erfolgreich verwendest, wird es Deine Fitfunktion automatisch in der Funktion Fit(x) definieren, so dass eine graphische Darstellung der angepassten Funktion gar kein Problem ist.

Fortsetzung folgt ...