DA-Martin-Laufzeit-Bokeh

Perfektes Python Setup für MATLAB liebende Ingenieure

by Paul Balzer on 25. November 2013

No Comments

Als Ingenieur ist man von der Informatik meilenweit entfernt. Im Studium wird man manchmal an Mathworks Matlab herangeführt, versteht es aber im Allgemeinen erstmal nicht. In Fleisch und Blut geht es ohnehin nie über, weil es nahezu unbeschränkte Möglichkeiten bietet, das Studium aber nur eine kurze Zeit dauert.

Während man die ersten Semester Diagramme und Protokolle lieber mit Excel erstellt, reduziert sich die Zeit, in welcher man sich mit Matlab beschäftigen kann, noch weiter. In den letzten Semestern, vielleicht erst in der Diplomarbeit, merkt man dann aber, dass es echt gut ist! Warum nicht eher?

Kommt man aus dem Uni-Umfeld heraus, wird es leider sehr teuer mit Matlab! Eine Standard Einzelplatz Lizenz ohne eine einzige Toolbox kostet 2.000€ Netto. Nur um ein paar Diagramme zu erstellen?

Ich habe mir daher vor einiger Zeit Python angesehen, welches nach einiger Zeit zunehmend Spaß macht! Da es zu Beginn relativ schwer war, einen Einstieg zu finden, möchte ich mein Setup mal vorstellen.

Python

Das Herz der Angelegenheit und bei Linux, Unix und MacOS schon von Haus aus an Board. Für Windows muss man es manuell nachinstallieren. Generell ist die einfachste Variante Anaconda zu installieren, weil dort so ziemlich alle Pakete (Plug-Ins) dabei sind, die wichtig werden für die tägliche Arbeit.

In der Kommandozeile oder im Terminal kann man nun Python nutzen.

python-console-mac

Plug-Ins

Python an sich ist nun schon mächtig, aber immernoch ein zahnloser Tiger, so lange es ohne Zusatzpakete auskommen muss. Zum installieren der Pakete kann man auf Paketmanager zurückgreifen, die die Arbeit in den meisten Fällen übernehmen. Hat man Anaconda installiert, sind die meisten Pakete schon dabei.

PIP Paketmanager

Der Paketmanager, welcher  nachfolgend die Arbeit der Installation/Upgrades übernimmt, ist PIP. Die Installation von PIP erfolgt betriebssystemabhängig. Am einfachsten mit der get-pip.py, welche dort herunter geladen werden kann. Da wir ja Python installiert haben, können wir einfach:

python get-pip.py

eingeben, dann müsste alles automatisch funktionieren. Da es nun für jedes Betriebssystem immer ein paar Unterschiede gibt, möchte ich aus diesem Beitrag kein Installationstutorial machen, sondern einfach nur zeigen, was meiner Meinung nach am besten geeignet ist, ohne Support.

Scipy

Das wichtigste Paket, wenn man in großen Schritten Richtung Matlab gehen möchte: Scipy. Es enthält viele elementare Pakete, wie z.b.

  • Matplotlib zum Erstellen von Plots
  • IPython zum angenehmen arbeiten
  • Numpy zur effizienten und einfachen numerischen Berechnung

Arbeitsumgebung IPython

Ich habe einige Python IDEs ausprobiert, aber bin nun bei IPython hängen geblieben. IPython kommt mit Scipy mit und ist sehr umfangreich. Gestartet wird die Arbeitsumgebung über die Kommandozeile mit

ipython notebook --script

Der Befehl notebook startet einen lokalen Server, welcher über den Browser unter localhost angesprochen werden kann. Auf der ‚Webseite‘ ist es dann möglich so genannte Notebooks zu öffnen, welche ähnlich wie MATLAB .m Files zu nutzen sind. Der Schalter –script sorgt dafür, dass immer parallel eine .py (also eine Python Datei) gespeichert wird, wenn man das Notebook (.ipynb) speichert.

ipython-start-mac

Import

Der große Unterschied zu MATLAB ist nun, dass man bei Python immer erst mal sagen muss, welche Plug-Ins man nutzen möchte im aktuellen Projekt (ähnlich der ‚path‘ Umgebung in MATLAB). Möchte man beispielsweise ein Plot erstellen, so ist vorher mitzuteilen, dass die mit Scipy gelieferte Bibliothek Pyplot zu verwenden ist.

import matplotlib.pyplot as plt

Danach stehen alle Funktionen von Matplotlib unter dem Objektnamen plt zur Verfügung.

Plot erstellen

Ein Plot lässt sich beispielsweise erstellen mit

x=range(5)
y=range(5)
plt.plot(x,y)
plt.show()

Diese Bibliothek ist sehr mächtig, wie die Beispiele zeigen!

Beispiel

import numpy as np
import matplotlib.pyplot as plt
import random
import time

n = 1100000
m=0.0
v=0.0
elapsed=[]
vals=[]
for i in xrange(0,n,1000):
    # Python reagiert auf Einrückungen (Leerzeichen oder <tab>)
    # Alles was eingerückt ist, gehört zur Schleife!

    #print 'Berechne für ' + str(i) + ' Werte.'
    values = np.random.sample(i)

    start = time.clock()
    m = np.mean(values)
    v = np.var(values)

    elapsed.append((time.clock() - start))
    vals.append(i)

fig = plt.figure(figsize=(12,5))
plt.plot(vals,elapsed, 'ro')
plt.xlabel(u'Anzahl Werte')
plt.grid()
plt.ylabel(u'Berechnungszeit [s]')
plt.title(u'Berechnungsdauer für var() und mean()')
plt.savefig('Berechnungsdauer.png',dpi=72)

plt.close()
print('Done.')

Berechnungsdauer

  Download IPython Notebook

 

Zusatzbibliotheken machen Python mächtig

Zwar gibt es für MATLAB unzählige Toolboxen und auch das Matlab Central, wo Zusatzfunktionen herunter geladen werden können, aber der große Vorteil an Python ist: Es ist kostenfrei!

Ein Blick auf die kompilierten Windows Versionen der Pakete zeigt, dass man überhaupt nicht überblicken kann, was alles möglich ist. Die Pakete die ich bisher genutzt habe, sind folgende:

  • Pandas, der Allrounder und mit Abstand das wichtigste Paket, wenn es um Datenhandling (Zeitreihen usw.) geht
  • Numpy um Vektoren und Arrays effizient zu benutzen
  • requests um Anfragen an Server stellen zu können
  • BeautifulSoup um HTML Antworten einfach auslesen zu können
  • Basemap um Karten zu erstellen
  • simplekml um Google Earth .kml Dateien zu erstellen
  • Bokeh für schönere Plots, Interaktivität und HTML Export

Schönere Plots

Möchte man das Plot jetzt auch noch mal in „schön“ haben, so bietet sich Bokeh an. Es muss natürlich importiert werden

from bokeh.plotting import *

aber anschließend geht es sogar einfacher und ansehnlicher als mit Matplotlib:

scatter(vals, elapsed, title='Berechnungsdauer')
show()

DA-Martin-Laufzeit-Bokeh

Learning by Doing

Weiterführend ist der Kurs „Introduction to scientific computing with Python“ von   J.R. Johansson empfohlen! Hier insbesondere der Teil 4: matplotlib – 2D and 3D plotting in Python.

Nachteil ggü. MATLAB

Der Nachteil ist ganz eindeutig, dass viele viele viele verschiedene Menschen die Zusatzpakete erstellen und jeder so seine eigene Art hat, dies umzusetzen. Das führt dazu, dass zum einen die Webseiten, wo die Pakete zu bekommen sind, nicht einheitlich aussehen und teilweise wirklich schlecht gepflegt werden (Installationshinweise usw..) und zum anderen auch die Art, wie man die Pakete nutzen kann, verschieden ist.

Bei MATLAB ist alles zentral durch Mathworks organisiert, d.h. man kann sich drauf verlassen, dass es eine ordentliche Hilfe gibt, dass die Funktion genau so funktioniert wie dort dargestellt und das es vom Syntax her eindeutig ist.

Bei einigen Python Paketen ist es eher ein Rätselraten, wie man das nun so benutzt, dass es macht was man möchte. Da wird http://stackoverflow.com/ schnell der beste Freund!

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>