24
Auswertung von Messdaten mit Excel - SciDAVis - Python Dennis Mayer Stefan Zeiske April 2017 Inhaltsverzeichnis 1 Zielsetzung 2 2 Excel 3 2.1 Importieren von Messdaten ......................... 3 2.2 Darstellung und Bearbeitung von Messwerten ............... 3 2.3 Erstellen und Bearbeiten von Diagrammen ................. 5 2.4 Einfügen von Trendlinien- und gleichungen ................. 6 2.5 Export von Diagrammen ........................... 7 3 SciDAVis 8 3.1 Importieren von Messdaten ......................... 8 3.2 Darstellung und Bearbeitung von Messwerten ............... 9 3.3 Erstellen und Bearbeiten von Diagrammen ................. 10 3.4 Einfügen von Trendlinien- und gleichungen ................. 12 3.5 Export von Diagrammen ........................... 13 3.6 Kurvenanpassungsassistent .......................... 13 3.7 Differenzieren ................................. 16 4 Python 17 4.1 Einleitende Hinweise ............................. 17 4.1.1 Hinweise zur Installation/Wichtige Pakete ............. 17 4.1.2 Antworten auf Fragen ........................ 18 4.2 Einlesen und Manipulieren von Daten mit Numpy ............. 18 4.3 Darstellen von Daten mit Matplotlib .................... 20 4.4 Kurvenanpassung mit Numpy und SciPy .................. 21 4.5 Statistik mit Numpy, Matplotlib und SciPy ................. 22 1

AuswertungvonMessdatenmit Excel - SciDAVis - Python · für das wissenschaftliche Arbeiten mit Python. Ebenso sind in diesen Paketen unter- Ebenso sind in diesen Paketen unter- schiedliche

  • Upload
    others

  • View
    65

  • Download
    0

Embed Size (px)

Citation preview

Auswertung von Messdaten mitExcel - SciDAVis - Python

Dennis Mayer Stefan Zeiske

April 2017

Inhaltsverzeichnis1 Zielsetzung 2

2 Excel 32.1 Importieren von Messdaten . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Darstellung und Bearbeitung von Messwerten . . . . . . . . . . . . . . . 32.3 Erstellen und Bearbeiten von Diagrammen . . . . . . . . . . . . . . . . . 52.4 Einfügen von Trendlinien- und gleichungen . . . . . . . . . . . . . . . . . 62.5 Export von Diagrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 SciDAVis 83.1 Importieren von Messdaten . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Darstellung und Bearbeitung von Messwerten . . . . . . . . . . . . . . . 93.3 Erstellen und Bearbeiten von Diagrammen . . . . . . . . . . . . . . . . . 103.4 Einfügen von Trendlinien- und gleichungen . . . . . . . . . . . . . . . . . 123.5 Export von Diagrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.6 Kurvenanpassungsassistent . . . . . . . . . . . . . . . . . . . . . . . . . . 133.7 Differenzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Python 174.1 Einleitende Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.1.1 Hinweise zur Installation/Wichtige Pakete . . . . . . . . . . . . . 174.1.2 Antworten auf Fragen . . . . . . . . . . . . . . . . . . . . . . . . 18

4.2 Einlesen und Manipulieren von Daten mit Numpy . . . . . . . . . . . . . 184.3 Darstellen von Daten mit Matplotlib . . . . . . . . . . . . . . . . . . . . 204.4 Kurvenanpassung mit Numpy und SciPy . . . . . . . . . . . . . . . . . . 214.5 Statistik mit Numpy, Matplotlib und SciPy . . . . . . . . . . . . . . . . . 22

1

1 ZielsetzungFür die computergestützte Auswertung der aufgenommenen Messdaten ist ein sichererUmgang mit Auswerteprogrammen, wie Microsoft Excel, Origin oder SciDAVis, erfor-derlich. Dies umfasst das

• Importieren von Messdaten (.txt; .asci; etc.)

• Verarbeitung von Messwerten

• Darstellen von Messdaten in einem Diagramm (Achsenbeschriftung- sowie Skalie-rung)

• Einfügen von Trendgleichungen sowie Ausgaben der entsprechenden Trendglei-chung

• Exportieren von Diagrammen (.png; .jpg; .pdf; etc.)

In der Praxis kann es sich als hilfreich erweisen, solche Auswertungen mit Hilfe kleinerProgramme automatisiert ablaufen zu lassen. Hierfür ist jedoch der (sichere) Umgangmit einer Programmiersprache unbedingt notwendig. Im wissenschaftlichen Betrieb wer-den eine Vielzahl unterschiedlicher Programmiersprachen verwendet, von denen manchekommerziell und andere frei verfügbar sind.Im Zuge dieses Tutoriums sollen die oben erwähnten Aufgaben für die Software Excel(sowie die open source- Variante LibreOffice) und SciDAVis sowie für die Programmier-sprache Python eingegangen werden. Alle erwähnten Programme sind auf den Rechnernim Grundpraktikum vorinstalliert. Die Software SciDAVis sowie Python können kosten-los im Internet heruntergeladen werden.

In dem folgenden Tutorium werden Grundkenntnisse in der Eingabe von Daten und dermathematischen Verknüpfung bzgl. Excel vorausgesetzt. Das Handbuch für Excel 2007findet man unter folgendem Link:⇒ http://hervepage.ch/documents/bureautique/excel2007d.pdfFür die Software SciDAVis findet man das Handbuch unter dem Link:⇒ http://scidavis.sourceforge.net/manual/Auf die Grundlagen der Programmierung mit Python wird verzichtet, da durch das In-ternet ausreichend Material zur Verfügung steht. Hier sei bspw. auf die offizielle Python-Dokumentation verwiesen, wo auch ein Tutorial zu finden ist:⇒ https://docs.python.org/3/Eine näher an der Wissenschaft angesiedelte Einführung in Python bietet das Buch vonH.P. Langtangen: „A Primer on Scientific Programming with Python“ aus dem SpringerVerlag. Das Buch ist in der 4. Auflage (2014) sowohl in Papierform als auch als PDFüber die Uni-Bibliothek erhältlich.

2

2 Excel2.1 Importieren von MessdatenGrundsätzlich ist es möglich, Daten verschiedenster Typen in Excel zu importieren. Dazu

• in der Kopfzeile Datei Öffnen bzw. strg + O wählen

• über Suche in die Datei auswählen und über Öffnen importieren

• bei .txt Dateien als Dateityp Alle Dateien wählen

Abbildung 1: Öffnen von Daten verschiedenen Typs zum Bearbeiten in Excel.

2.2 Darstellung und Bearbeitung von MesswertenWerte bearbeiten: Zellen mathematisch Verknüpfen

• in freier Zelle “= “eingeben

• mit Pfeiltasten oder Maus erste der Zellen auswählen (gestrichelte Maske wirdüber die Tabelle bewegt, in der Editierzeile erscheint die aktuelle Zellennummer)

• Rechenoperation angeben (zum Beispiel +, −, oder ·, ....)

• Zweite Zelle auswählen

• Eingabe mit Drücken von Enter oder Tab beenden (Ergebnis sollte erscheinen)

3

Abbildung 2: Erstellung eines Diagramms gegebener Messwerte.

Multiplikation einer Zahlenspalte mit einer Konstante:

• gegeben sei eine Spalte (z.b. A2, A3, A4, ....) sowie eine in einer Zelle (z.B. C2)befindliche Zahl 3

• “= A2*$C$3 in Zelle B2 eingeben (Wichtig: vor C und 3 unbedingt Sonderzeichen$ setzen)

• Formel in B2 nach unten ziehen und damit weitere Zellen in Spalte B2 markieren

Das Sonderzeichen $ teilt Excel mit, dass der Bezug auf eine Zellen (z.B. C2) ein “abso-luter Bezug “ist. Dies bedeutet, dass hier immer auf die Zelle C2 verwiesen wird, wenndie Formel in ein andere Zelle kopiert werden sollte. Wird das Sonderzeichen in der For-mel nicht gesetzt, so ändert Excel die Formel selbstständig, sodass in Zelle B3 stehenwürde: = A3*C3Funktionsassistent:

• unbedingt zuerst die Editierzeile durch Anklicken aktivieren (⇒ blinkender Cursor)danach f(x) anklicken (falls nicht in der Symbolleiste vorhanden, dann Einfügenund dort f(x) wählen. Es erscheint ein Fenster mit allen ausführbaren Funktionen

• Mathematische Operationen– Kategorie Math. & Trigonom. und gewünschte Funktion jeweils per Maus

oder Tastatur markieren, Weiter anklicken

4

– Eingabelfeld anklicken, nötige Werte mit der Maus markieren (dazu evtl. dasFenster verschieben)

– Eingabe abgeschlossen: Ende anklicken– Formel mit Enter oder Tab bestätigen (erst jetzt erscheint der Wert)

Spezial:

• Lineare Regression, numerisch (RGB- Tabelle):

• Bestimmt Regressionsgerade (Trendfunktion) mit der Gleichung f(x) = m · x+ b

• WICHTIG: VORHER einen 5 Zeile hohen und 2 Spalten breiten Bereich mit derMaus markieren

• Beim Funktionsassistenten in der Kategorie Statistik die Funktion RGB auswäh-len

• Angaben bei RGB– y- Werte: Feld anklicken, dann y- Werte mit der Maus in der Tabelle markie-

ren– x- Werte: x- Werte angeben (keine Eingabe x- Werte := Zahlen von 1 bis n)– Konstante: "0"⇒ y- Achsenabschnitt ("Konstante")gleich Null

2.3 Erstellen und Bearbeiten von Diagrammen• wichtig für Diagramme sind die Messgrößen sowie ihre entsprechenden Einheiten

• Werte für x- und y- Achse markieren

• unter Einfügen ⇒ Diagramme und einen Diagramm- Typ wählen

• Wichtig: Titel, Achsenbeschriftung- und skalierung sowie Legende werden meistensnicht automatisch gesetzt

Objekte, wie Achsenbeschriftung- und skalierung, Diagramm- Titel, Gitternetz, Legen-den etc., können jeweils bearbeitet und angepasst werden. Dazu doppelter Linksklickmit der Maus auf das entsprechende Objekt, d.h.:

• Titel: (Einfügen von Diagrammtitel und Achsenbeschriftung)

• Achsen: (Hinzufügen oder Entfernen der Achsenskalierung)

• Gitternetzlinien: (Hinzufügen oder Entfernen)

• Datenpunkte: (x- und y- Werte überprüfen oder neu festlegen)

5

Abbildung 3: Bearbeitung einer Diagrammes.

2.4 Einfügen von Trendlinien- und gleichungen• einzelne Messpunkte im Diagramm mit linker Maustaste anklicken, sodass alle

Wertepaare markiert sind

• Rechter Mausklick und auf Trendlinie hinzufügen klicken

• unter Trendlinienoptionen gewünschte Trendlinien- Regression wählen

• Wichtig: Häkchen setzen bei Formel im Diagramm zeigen

Regressionsfunktionen:

• linear: y = mx+ b

• logarithmisch: y = a · ln(x) + b

• polynomisch (bis 6. Ordnung): y = a · x6 + b · x5 + ....+ c

• potentiell: y = a · xb

• exponentiell: y = a · eb·x

6

Abbildung 4: Hinzufügen einer Trendlinie zur Anpassung der Messwerte.

2.5 Export von DiagrammenDiagramm kann als Bild (.jpg; .png; etc.) oder als .pdf in das Auswerteprotokoll einge-bunden werden. Dazu

• Ziel Bildatei: Diagramm anklicken und mit strg + C in ein Bildbearbeitungspro-gramm (zum Beispiel Paint) mit strg + V einfügen und im gewünschten Bildfor-mat speichern

• Ziel pdf: Datei ⇒ Speichern unter ⇒ PDF oder XPS anklicken

Abbildung 5: Exportieren eines Diagrammes als Bilddatei oder .pdf- Datei.

7

3 SciDAVisDas kostenlose Programm SciDAVis wurde zur Analyse und Visualisierung wissenschaft-licher Messdaten entwickelt und findet deshalb unter anderem im wissenschaftlichen Be-trieb seine Anwendung. Ähnlich wie bei Excel kann man Messwerte direkt eingebenoder diese, verschiedenster Dateitypen, importieren. Die Software läuft auf allen gän-gigen Betriebssystemen und ist kostenlos im Internet verfügbar. Unter folgendem Linksind weitere Informationen zur Software SciDAVis zu finden:

http : //scidavis.sourceforge.net/

Die Software ist auf allen Rechner im Grundpraktikum bereits installiert.

3.1 Importieren von Messdaten• Obere Kopfzeile: Datei wählen und unter Datei öffnen oder unter ASCII- Im-

port Datei auswählen⇒ Beachte bei Import- Assistent: Trenner, Dezimaltrenner, etc.

• alternativ kann eine Datei (.asci; .txt) auch einfach in das die leere Arbeitsflächedes Programmes hinein gezogen werden⇒ evtl. ist der Trenner etc. falsch gesetzt...

Abbildung 6: Öffnen und Importieren von Messwerte aus verschiedene Dateitypen, wie.txt oder .asc. .

8

3.2 Darstellung und Bearbeitung von Messwerten• Messwerte eines Arbeitsfensters können wie folgt bearbeitet werden:

– Description: Name der Spalte (d.h. Name und Einheit der Messgröße) undKommentare (zum Beispiel Kennzeichnung der Messreihe)

– Typ: Art der Darstellung der Zahlen, wie zum Beispiel Decimal, Scientific;Einstellung der Anzahl der Stellen hinter dem Komma

– Formula: Eingabe zur Berechnung von Spalten (d.h. Umrechnung von anderenSpalten etc.)

• Hinzufügen von weiteren Spalten: oberste Menüzeile Tabelle unter Add Column

• jede Spalte kann als x- oder y- Achse gesetzt werden (Beachte: bei mehreren y-Spalten beziehen sich alle auf EINE x- Achse)→ die Art der Achse wird hinter dem Tabellennamen in eckigen Klammern ange-geben⇒ das setzen von x- und y- Achsen spielt für das Erstellen von Diagrammen einewichtige Rolle

Abbildung 7: Erstellung, Ver- und Bearbeitung von Messwerten in Tabellen.

9

3.3 Erstellen und Bearbeiten von Diagrammen• x- Achse richtig setzen

• die Daten der gewünschten y- Achse markieren (entweder gesamte Tabelle ankli-cken oder nur einzelne Messwerte auswählen)

• unter Symbol 1 die gewünschte Art der Darstellung auswählen; die wichtigstensind dabei:– Linie: alle Messwerte werden paarweise zusammenhängend durch eine Linie

verbunden– Punkt: es werden lediglich die Messwerte dargestellt– Linie+ Symbol: die Messwerte werden dargestellt UND immer paarweise zu-

sammenhängend miteinander verbunden

• in de erzeugten Diagramm können evtl. Achsentitel etc. nicht richtig gesetzt sein

Abbildung 8: Hinzufügen eines Diagrammes zur Darstellung der Messwerte.

• Bearbeitung von Diagramm- Titel, Legende sowie Achsenbeschriftung durch Dop-pelklick auf das entsprechende Objekt (dabei kann Textfarbe, Schriftart, etc. selbstgewählt werden)

• Bearbeitung der Achsenskalierung durch Doppelklick auf die gewünschte Achse

10

– (d.h. Start- und Endwert; Anzahl der Zwischenschritte sowie allgemein Dar-stellung der Daten)

– unter Skalierung kann zum Beispiel auch eine logarithmische Skalierung derAchse gewählt werden

• durch Doppelklick auf einen Messwert kann die Darstellung der Messwerte geän-dert werden, d.h Farbe, Symbol (Kreis, Viereck, Dreieck, Kreis, Punkt, etc.)

• mit Symbol 2 (bzw. 3) kann man einen Ausschnitt des Diagrammes vergrößern(bzw. verkleinern)

• über Symbol 4 wird die Achsenskalierung automatisch gesetzt und die Ansicht sogewählt, dass alle Messwerte dargestellt werden

Abbildung 9: Bearbeitung eines Diagrammes, wie die Änderung des Diagrammtitels, derAchsenbeschriftung, der Legende etc. .

11

3.4 Einfügen von Trendlinien- und gleichungen• Diagramm mit den Messwerten anklicken

• in der obersten Menüzeile unter Analye zum Stichpunkt Quick- Fit gehen

• gewünschte Art der Trendgleichung auswählen:– Lineare Anpassung: y = m · x+ b

– Polynominale Anpassung y = a · xn + b · xn−1 + ....+ c

– Fit Exponential Decay y = a · e−a·x mit a < x

• in der Legende wird die Trendgleichung ebenfalls angezeigt (Bearbeitung des Na-men siehe oben)

• durch Doppelklick auf Trendgleichung Bearbeitung dieser möglich, wie Farbe,Linienart- und stärke, etc.

• im Ergebnis- Log wird die Funktion samt ihren wichtigsten Eigenschaften (Stan-dartabweichung etc.) angegeben

Abbildung 10: Einfügen und Ausgabe einer Trendgleichung zur Analyse der Messwerte.

12

3.5 Export von Diagrammen• Diagramm auswählen

• in der obersten Menüzeile unter Datei den Punkt Grafik exportieren wählen

• Dateiname und Speicherort wählen

• unter Files of type kann das Dateiformat gewählt werden, darunter .bmp, .pdf,.png. etc.

• unter Erweitert können zusätzliche Einstellungen (bei Bildateien zum Beispiel 8-Bit, etc) getroffen werden

Abbildung 11: Export von Diagrammen im gewünschten Datei- Typ, wie .bmp; .pdf; etc..

3.6 Kurvenanpassungsassistent• Diagramm erzeugen

13

• in oberster Menüleiste unter Analyse auf Kurvenanpassungsassistent klicken

• gewünschte Kategorie sowie Funktion auswählen

• am rechten Rand des Fensters auf Ausdruck hinzufügen klicken und im Editor-Fenster Funktion mit gewünschten Parametern hinzufügen (Beachte: Parameterim Fenster Parameter müssen mit denen im Editor- Fenster identisch sein)

• im rechten Rand des Fensters auf Anpassen klicken

• unter Anfangsschätzwerte für Parameter Orientierungswerte hinzufügen

• Intervallgrenzen angeben und auf Anpassen klicken

Abbildung 12: Auswahl des Kurvenanpassungsassistenten

14

Abbildung 13: Auswahl der Funktion sowie Eingabe der Funktionsparameter

Abbildung 14: Auswahl der Anfangsschätzwerte für Parameter sowie Eingabe der Inter-vallgrenzen.

15

3.7 Differenzieren• Diagramm erzeugen oder auswählen

• in oberster Menüzeile unter Analyse auf Differenzieren klicken

Abbildung 15: Analyse mittels Differenzieren.

PS: Falls man sich lediglich für einen bestimmten Abschnitt des Diagrammmes/ derFunktion interessiert, kann man die entsprechenden Datenpunkte auch einfach in eineneue Tabelle kopieren. Über den Kurvenanpassungsassistenten kann man dann Informa-tionen über die dazugehörige Trendgleichung bekommen.SciDAVis ist auch in der Lage, eine Funktion über ein gewähltes Intervall zu integrieren,gibt jedoch lediglich den Endwert (klassisch: die Fläche unter der Kurve) an.

16

4 PythonAls Beispiel für die Datenauswertung mit einer Programmiersprache soll hier die Skript-sprache Python dienen. Durch die Python Software Foundation License sind alle notwen-digen Pakete/Programme kostenlos verfügbar. Da ein Grundsatz bei der Entwicklungvon Python ein übersichtlicher, strukturierter Programmcode war, ist das Erlernen die-ser Sprache relativ einfach. Grundlagen können unter anderem in den in Abschnitt 1genannten Quellen erworben werden. Hier sollen lediglich die Grundlagen der Datenver-arbeitung diskutiert werden.

4.1 Einleitende Hinweise4.1.1 Hinweise zur Installation/Wichtige Pakete

Auf https://www.python.org/ kann das Grundpaket inklusive Interpreter heruntergela-den werden. Dies enthält bereits viele wichtige Funktionen, unter anderem Module fürmathematische Operationen auf reellen und komplexen Zahlen sowie zum Lesen undSchreiben von ASCII-Dateien. Allerdings gestaltet sich die Auswerten von Daten äu-ßerst umständlich mit den dort zur Verfügung stehenden Paketen. Aus diesem Grundsollte vorher die Python-Installation um die folgenden Module ergänzt werden:

• SciPy: Scientific Python LibraryStellt wichtige Funktionen aus bspw. Analysis, Linearer Algebra, Statistik undSignalanalyse sowie physikalische Konstanten bereit.

• NumPy: Numerical PythonNeben einem für die Datenanalyse praktischem Datentyp - dem Array - stellt esanalytische, algebraische und statistische Operationen für die Datensätze bereit.Außerdem enthält es ein FFT-Paket.

• matplotlib: Mathematical Plotting LibraryWie der Name schon sagt, stellt matplotlib notwendige Funktionen zur graphischenDarstellung von Datensätzen bereit.

• PIL: Python Imaging LibraryFalls es vorkommen sollte, dass die Daten als Bilder vorliegen, kann dieses Modulweiterhelfen. Es enthält viele Funktionen zum Auslesen und Manipulieren vonBildern.

Ebenfalls nützlich sind pySerial sowie pandas und seaborn.Um allerdings das Suchenund die Installation der einzelnen Pakete zu umgehen, wird empfohlen, eineder folgenden wissenschaftlichen Distributionen zu installieren:

• Canopy (Enthought): https://store.enthought.com/downloads/#default

• Anaconda (Continuum Analytics): https://www.continuum.io/downloads

17

• Python(x,y): https://python-xy.github.io/downloads.html

Die grundlegenden Versionen sind alle kostenlos und enthalten die wichtigsten Paketefür das wissenschaftliche Arbeiten mit Python. Ebenso sind in diesen Paketen unter-schiedliche integrierte Entwicklungsumgebungen (bspw. Spyder) enthalten, die durchSyntaxhervorhebung, automatische Befehlsvervollständigung und -überprüfung die Ar-beit erleichtern.

4.1.2 Antworten auf Fragen

Es kann beim Programmieren des Öfteren vorkommen, dass beim Interpretieren desProgrammcodes vom Computer unverständliche Fehlermeldungen ausgegeben werdenoder man nicht weiß, wie genau diese eine Funktion im gefundenen Beispielcode funk-tioniert. Hier hilft häufig nur eine genaue Analyse des geschriebenen Codes und dasStudium der entsprechenden Modul-Dokumentation, um den Fehlern auf die Schliche zukommen. Neben der in Abschnitt 1 verlinkten Dokumentation finden sich für die obenbeschriebenen Module die Referenzen auf den jeweiligen Internetseiten:

• SciPy (v0.18.1): https://docs.scipy.org/doc/scipy/reference/

• Numpy (v1.11): https://docs.scipy.org/doc/numpy/reference/

• Matplotlib: http://matplotlib.org/contents.html

• PIL/pillow (v3.4): https://pillow.readthedocs.io/en/3.4.x/

In den meisten Fällen kann man jedoch auch in einschlägigen Foren wie bspw. StackOverflow recht schnell Lösungen zu seinen Problemen finden.

4.2 Einlesen und Manipulieren von Daten mit NumpyPython ist in der Lage, eine große Anzahl unterschiedlicher Dateiformate zu lesen. Dieüblichen Dateiformate wie .txt, .csv und .dat sollten ohne zusätzliche Pakete von Pythongelesen werden können. Durch zusätzliche Module ist es auch möglich, Datenbankenoder Excel-Sheets zu lesen und zu bearbeiten. Mit dem Modul Pillow können sogarBilder eingelesen und verändert werden. In diesem Abschnitt sollen jedoch nur einfacheTextdateien (txt, csv, dat) betrachtet werden.Um Daten aus Dateien einzulesen, gibt es in Python zwei Möglichkeiten. Entweder mannutzt die Python-internen Funktion open() und liest die Datei eigenständig in einerfor-Schleife Zeile für Zeile aus1 oder man nutzt die NumPy-Routine genfromtxt().Letztere reduziert den Code auf einen Einzeiler, beinhaltet jedoch neben dem Einlesender Daten zusätzlich deren Anordnung in ein numpy.array sowie die Konversion in dasgewünschte Datenformat. Um den Nutzen der NumPy-Routine zu verdeutlichen, soll imnachfolgenden Beispiel Daten aus einer Datei mit Header (1. Zeile) als Gleitkommazahlen(float numbers) eingelesen werden:

1Dank der Comprehensions in Python kann das Erstellen von Listen recht kurz notiert werden.

18

# Erste Variante mit open()file = open("pfad/zur/datei.txt","r") # oeffne Datei zum Lesendata = [lines.split("\t") for lines in file] # Spalten mit Tabulator (\t) getrenntfile.close()data = [[ float(j) for j in i] for i in data[1:]]# konvertiere Daten von String zu float und vernachlässige Header

# Zweite Variante mit Numpyfrom numpy import genfromtxtdata = genfromtxt("pfad/zur/datei.txt", delimiter="\t",

dtype=float, skip_header=1)

In beiden Fällen ist die resultierende Datenmatrix genauso organisiert wie die ursprüng-liche Datei. Wenn also die zwei Spalten in der Datei die x- und y-Daten eines möglichenGraphen darstellen, so sind dies die Spalten bei der Ausgabe mit print(data) eben-falls. Das ist unhandlich für die spätere Datenmanipulation oder -darstellung, da Aufrufder Listen- bzw. Array-Einträge in Python erst zeilen- und dann spaltenweise erfolgt,d.h. data[Zeile,Spalte]. Obwohl man also nur einen Datensatz aufrufen will, müs-sen im Code zwei Indizes angegeben werden. Um dies zu vermeiden, kann der obere Codefolgendermaßen geändert werden:# Erste Variante mit open()file = open("pfad/zur/datei.txt","r")data = [lines.split("\t") for lines in file]file.close()data = [[ float(j[i]) for j in data] for i in range(len(data[0]))]

# Zweite Variante mit Numpyfrom numpy import genfromtxtdata = genfromtxt("pfad/zur/datei.txt", delimiter="\t",

dtype=float, skip_header=1).transpose()

Man merkt, dass sich die Verwendung der Routine genfromtxt() lohnt, denn im Ge-gensatz zur ersten Variante, in der die zweite List-Comprehension umstruktiert werdenmusste, um das gewünschte Ergebnis zu erhalten, reicht mit NumPy lediglich der zusätz-liche Aufruf der Methode transpose(). In der Tat wurde auch nichts weiter gemacht,als die Datenmatrix zu transponieren.Nicht nur bei dem Einlesen der Daten ist es von Vorteil, NumPy zu benutzen, sondernauch bei der Manipulation der Daten. Denn der von dem Modul mitgebrachte DatentypArray verhält sich wie eine klassische Matrix, so dass man alle bekannten Rechenope-rationen an diesem ausführen kann:

import numpy as npdata = np.genfromtxt("pfad/zur/datei.txt", delimiter="\t",

dtype=float, skip_header=1).transpose()

a = data[0] + data[1] # Grundrechenarten werden punktweise durchgeführtb = np.dot(data[1],data[2]) # Matrixprodukt (Skalarprodukt)c = np.sin(data[2]) # Anwenden von Funktionen erfolgt ebenfalls punktweised = data.sum() # gibt die Summe der Einträge zurück

19

Eine umfangreiche Darstellung der Möglichkeiten von NumPy kann auf der entsprechen-den Homepage gefunden werden. Als Alternative für die Datenmanipulation insbeson-dere zu statistischen Zwecken bietet das Paket pandas.

4.3 Darstellen von Daten mit MatplotlibEin wichtiger Punkt bei der Auswertung der Daten ist das Darstellen eben dieser. InPython bietet sich hierfür bspw. das Modul Matplotlibmit dessen Submodul PyPlotan, das ein MATLAB-ähnliches „Plotting framework“ bietet. Alternativen hierzu sindbspw. die Module Bokeh, GR, Plotly, die - ebenso wie Matplotlib - nicht in derGrundvariante von Python enthalten sind.Einfache Graphen können relativ simpel mit dem plot-Befehl erstellt werden:import numpy as npimport matplotlib.pyplot as plt

x = np.linspace(0,10,20,endpoint=True) # erzeuge Array mit x in [0,10]y = 2 * x + 1

plt.plot(x,y) # plotte y über xplt.show() # zeige den Plot

Standardmäßig werden die Datenpunkte miteinander verbunden. Bei wenigen Daten-punkten, zwischen denen die mathematische Beziehung a priori nicht bekannt ist bzw.experimentell bestimmt werden soll (also bei Messdaten), bietet sich das Verbinden derPunkte nicht an. Mit einem zusätzlichen String hinter den Daten können dieser Markerangepasst werden:plt.plot(x,y,"o")

Mehrere geplottete Datensätze können mittels Marker, Linienfarben und Labels ausein-andergehalten werden:plt.plot(x,y,"ro",label="Data1") # rote Punkteplt.plot(x,3*x,"b^",label="Data2") # blaue Dreiecke

Die Labels können als Legende in den Plot eingefügt werden:plt.legend(loc=2) # zeige Labels und positioniere Legende neu

Um den Plot zu personalisieren, können Achsenbeschriftungen und Titel eingefügt sowiedie Skalen angepasst werden:plt.xlabel("Zeit (s)", fontsize=14)plt.ylabel("Weg (m)", fontsize=14)plt.title("Weg-Zeit-Gesetz")

Graphen können mit dem Befehl savefig in nahezu jedem Format gespeichert werden:plt.savefig("pfad/zum/speicherort/plot.png")

20

Abbildung 16: Ergebnis der graphischen Darstellung mit PyPlot

4.4 Kurvenanpassung mit Numpy und SciPyEine Analyse der Daten erfordert häufig auch eine Kurvenanpassung. In der Regel sollteman versuchen, die Daten soweit zu manipulieren, dass eine lineare Regression sinn-voll erscheint. Dies kann bspw. möglich werden, indem man statt der Rohdaten derenLogarithmen verwendet (sinnvoll um Potenzfunktionen herauszufinden) und so die Ab-hängigkeiten neu definiert (z.B. wird y = ea/x mit y′ = log y und x′ = 1/x wird zu einerlinearen Funktion y′ = ax′). Lineare Abhängigkeiten lassen sich durch Kurvenanpas-sungen am sichersten Herausfinden. Der Erfolg nichtlinearer Kurvenanpassungen kannunter Umständen stark von den gewählten Anfangsbedingungen abhängen.Zur Realisierung linearer Regressionen gibt es in Python unterschiedliche Wege. NumPybietet bspw. die Methode polyfit(), mit der man in der Lage ist, polynomiale Kur-venanpassungen durchzuführen. SciPy bietet zwei weitere Möglichkeiten; die Methodelinregress() aus dem Stats-Submodul sowie curve_fit() aus dem optimize-Submodul. Nachfolgend ein kleines Beispiel mit allen drei Varianten:

import numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import linregressfrom scipy.optimize import curve_fit

f = lambda x,a,b : a * x + b # definiere Fitfunktion fuer curve_fit

x = np.linspace(0,10,20,endpoint=True)y = f(x,2,1.5) - np.random.rand(len(x)) # verrauschtes Signal mit random

21

(a1, b1) = np.polyfit(x,y,1) # 1 entspricht dem Grad des Polynomsprint(a1, b1)a2, b2, r2, p2, s2 = linregress(x,y)print(a2, b2)(a3, b3), cov = curve_fit(f, x, y, p0=(1.,1.))print(a3, b3)

Die print-Befehle geben den jeweiligen Anstieg und Schnittpunkt mit der y-Achse aus.Das Ergebnis ist bspw>1.99348076258 1.004000096211.99348076258 1.004000096211.99348076566 1.00400008895

Wie man sehen kann, gibt lediglich die curve_fit-Methode ein leicht anderes Ergebnisaus (Unterschied in der neunten bzw. achten Nachkommastelle!).Wie bereits erwähnt, bietet polyfit die Möglichkeit, Polynomfunktionen zu fitten.curve_fit wiederum ermöglicht es, prinzipiell jede analytische Funktion an Daten an-zupassen. Wie aber ebenfalls weiter oben erwähnt, hängt der Erfolg nichtlinearer Kurven-anpassungen mitunter stark von den gewählten Anfangsbedingungen ab. Ein wichtigesBeispiel solcher Anpassungen ist die gaußsche Glockenkurve, die im nachfolgenden Ab-schnitt zur Statistik noch einmal beleuchtet wird. Davor jedoch soll noch kurz geklärtwerden, was die anderen ausgegebenen Parameter im obigen Beispiel sind und wie mandie Ergebnisse graphisch darstellt.Wie man sieht, gibt polyfit ohne zusätzliche Einstellungen lediglich die gewünsch-ten Parameter des Polynoms wieder nicht jedoch deren Fehler. Mit dem zusätzlichenSchlüsselwort cov = True beim Aufruf der Methode wird zusätzlich die Kovarianz-matrix zurückgegeben. linregress hingegen spuckt insgesamt drei weitere Parameteraus. Dies sind der Korrelationskoeffizient R, den sogenannten Signifikanzwert p sowiedie abgeschätzte Standardabweichung des Anstiegs σa. curve_fit gibt hingegen alszusätzlichen Parameter die Kovarianzmatrix der Parameter aus. Aus dieser lässt sichmit dem Befehls = np.sqrt(np.diag(cov))

die Standardabweichung der einzelnen Parameter abschätzen.Das Darstellen der Kurvenanpassungen kann wieder ganz einfach durch plot() ge-schehen. Ist die Fitfunktion vorher definiert wurden, so kann diese im plot()-Befehlzur Bestimmung der y-Werte dienen. Zum Angeben der Parameter in der Legende kannman sich die String-Formatierung mit .format() zunutze machen:plt.plot(x, f(x,a1,b1),

label="Kurvenanpassung:\na={0:.3f}, b={1:.3f}".format(a1,b1))

4.5 Statistik mit Numpy, Matplotlib und SciPyZum Abschluss soll noch kurz auf statistische Methoden mit Python eingegangen wer-den. Dies sind insbesondere das Berechnen der Momente einer Verteilung sowie das

22

Abbildung 17: Ergebnis der graphischen Darstellung der Kurvenanpassung mit PyPlot

Erzeugen von Histogrammen und Gaußfits. Das nachfolgende Skript beinhaltet dieseentsprechenden Punkte:# coding: utf-8import numpy as npimport matplotlib.pyplot as pltimport scipy.stats as statsfrom scipy.optimize import curve_fit

r = np.random.randn(1000) # get a couple of random numbers# and plot them as a histogramn, bins, patches = plt.hist(r, 50, color="gray", label="Histogram")

# Mean value and standard deviation with numpymu = np.mean(r)sigma1 = np.std(r)print """mean value and standard deviation with NumPy:{0:.3f}, {1:.3f}""".format(mu, sigma1)

# central moments with scipy.statssigma2 = stats.moment(r,moment=2)print "Second moment with stats: {0:.3f}".format(np.sqrt(sigma2))

# plot mean value and standard deviation as vertical linesplt.axvline(mu,color="r",label="$<X>$ (arithm.)")plt.axvline(mu-sigma1,c="r",ls="dashed", label=r"$<X> \pm \sigma$ (arithm.)")plt.axvline(mu+sigma1,c="r",ls="dashed")

23

# make gaussian fitdef gauss(x,A,mu,sigma):

return A*np.exp(-(x - mu)**2 / (2 * sigma**2))

popt, pcov = curve_fit(gauss, bins[1:len(bins)], n, p0=(1.,0.01,1.))print "Gauss-Fit: {0:.3f}, {1:.3f}".format(popt[1],popt[2])

# plot gaussian fit into figureplt.plot(bins, gauss(bins,popt[0],popt[1],popt[2]), label="Gaussian fit")plt.axvline(popt[1],c="g", label="$<X>$ (gauss.)")plt.axvline(popt[1]-popt[2],c="g",ls="dashed",label=r"$<X> \pm \sigma$ (gauss.)")plt.axvline(popt[1]+popt[2],c="g",ls="dashed")

# characterize axis and show legend and plotplt.xlabel("Values",fontsize=14)plt.ylabel("Number of points",fontsize=14)plt.legend()plt.show()

Das Ergebnis des Skriptes könnte dann wie folgt aussehen:>mean value and standard deviation with NumPy:-0.018, 1.021Second moment with stats: 1.021Gauss-Fit: 0.039, 1.057

Abbildung 18: Ergebnis der statistischen Analyse

24