Hinweis: Obwohl JavaScript für diese Website nicht unbedingt erforderlich ist, werden Ihre Interaktionsmöglichkeiten mit den Inhalten eingeschränkt sein. Bitte aktivieren Sie JavaScript für das volle Erlebnis.

Python für wissenschaftliche Datenvisualisierung

Hintergrund

MayaVi ist ein Open-Source-Tool zur wissenschaftlichen Datenvisualisierung, das vollständig in Python geschrieben ist.

Ich begann im Jahr 2000 mit der Arbeit an MayaVi. Zu dieser Zeit benötigten einige meiner Kollegen die Visualisierung ihrer Daten aus der computergestützten Fluiddynamik (CFD), aber die einzigen geeigneten Tools, die verfügbar waren, waren kommerzielle, proprietäre Programme, die unerschwinglich teuer waren.

Wir sahen uns einige Open-Source-Tools als Alternativen an. OpenDX war gerade öffentlich freigegeben worden und es war für mich damals schwierig, es zum Laufen zu bringen. OpenDX war auch ein ziemlich komplexes System mit einer steilen Lernkurve.

Eine weitere Visualisierungs-/Grafikbibliothek, VTK, war ebenfalls als Open Source verfügbar. VTK ist eine äußerst leistungsfähige Visualisierungsbibliothek, die in C++ geschrieben ist. Sie ist sehr portabel und läuft auf verschiedenen Unix-, Windows- und neuerdings auch Mac OS X-Varianten.

VTK wurde als die am besten geeignete Lösung ausgewählt, aber es reichte nicht aus, um das Problem zu lösen. Eine Anwendung war über der VTK-Bibliothek erforderlich, bevor Nicht-Programmierer, die nur über spezialisiertes Fachwissen verfügten, an einen Computer sitzen und ihre Daten visualisieren konnten.

Python wurde ausgewählt

Obwohl meine bisherige Erfahrung hauptsächlich in C und C++ lag, war ich der Meinung, dass eine andere Sprache eine bessere Wahl für die schnelle Entwicklung einer grafischen Benutzeroberfläche sein könnte. VTK ist in C++ geschrieben, wurde aber auch für Python, Tcl und Java "eingepackt". Ich habe mir jede davon angesehen.

Ich schloss Tcl aus, da ich fand, dass Pythons Syntax viel sauberer war, und weil ich gehört hatte, dass große Tcl-Programme schwer zu warten sein könnten. Java hatte den Nachteil, dass es bei jeder Codeänderung kompiliert werden musste, und die Möglichkeit, Code in jedem aktuellen Browser auszuführen, war für dieses Projekt nutzlos. Die im Vergleich zu Python ausführliche Syntax von Java sprach ebenfalls dagegen. Python war genauso portabel wie Java und eine viel einfacher zu erlernende und zu verwendende Sprache. Ich hatte auch das Python-Tutorial gelesen, verschiedene Python-Programme gesehen und mochte die Sprache sehr wegen ihrer Einfachheit, ihres objektorientierten Charakters, ihrer dynamischen Datentypen und ihrer großen Standardbibliothek.

Beginnend mit ein paar einfachen Python-Skripten, die VTK verwendeten, konnte ich meine Kollegen recht schnell mit ein paar benutzerdefinierten CFD-Visualisierungsskripten zum Laufen bringen. Zu dieser Zeit lernte ich noch Python und Tkinter (das GUI-Toolkit, das in MayaVi verwendet wird) und erstellte im Juni 2000 ein GUI-basiertes Tool namens VTK-CFD. Dieses durchlief mehrere Verbesserungsrunden, bis ich es schließlich komplett neu schrieb und MayaVi im Mai 2001 veröffentlichte.

Ergebnisse

MayaVi wurde zu 100 % in reinem Python geschrieben und ist dank der Portabilität von VTK, Python und Tkinter unter Linux, Unix und Windows lauffähig. Python erwies sich als einfach, leicht zu erlernen und dennoch äußerst leistungsfähig. Sein interaktiver Interpreter war ein großer Vorteil beim Lernen und Experimentieren. Es verfügt auch über ausgezeichnete, frei verfügbare Dokumentationen.

Ich fand den Entwicklungszyklus extrem schnell, da Python sowohl objektorientiert als auch interpretiert ist. Das Programm kann aus OO-Sicht gut gestaltet und somit besser wartbar sein, aber es gibt keine Kompilierung, auf die man jedes Mal warten muss, wenn man Änderungen am Code vornimmt.

Pythons Lesbarkeit und dynamische Typisierung machten das Schreiben, Warten und Erweitern des Codes noch einfacher. Ich musste mich nie um Typen kümmern, was es mir ermöglichte, mich auf das Problem zu konzentrieren, anstatt mich mit der Sprache und ihrer Syntax auseinanderzusetzen. Das machte mich viel produktiver als mit C und C++. Zum Beispiel konnte ich einen vollständigen VTK-Dokumentationsbrowser mit GUI und Suchmaschine in nur 400 Codezeilen schreiben.

Mayavi Screen Shot

Strömung über einen zylindrischen Pfosten, die Konfigurationsdialog, die VTK-Pipeline und den VTK-Dokumentationsbrowser zeigend. Daten mit freundlicher Genehmigung der NASA. Vergrößern

Die hervorragende Unterstützung für Introspektion, gepaart mit einer umfassenden Standardbibliothek, erleichterte das Schreiben datengesteuerter Codes wie des vtkPipeline-Browsers. Dieser generiert zur Laufzeit automatisch eine GUI, die die VTK-Grafikpipeline anzeigt. Er generiert auch einen GUI-Konfigurationsdialog für jedes VTK-Objekt, indem er die Methoden des Objekts mit Pythons regulärem Ausdrucksmodul parst, kategorisiert und die GUI entsprechend aufbaut. Dieser Code wird auch im Persistenzmechanismus von MayaVi verwendet, der die meisten VTK-Objekte durch Inspektion zur Laufzeit auf der Festplatte speichern kann. Die Verwendung von Introspektion zum Schreiben datengesteuerter Module wie dieser vermied erhebliche manuelle Codierungsarbeit und macht MayaVi selbst erweiterbar, wenn zusätzliche VTK-Objekte definiert werden.

Da Python eine Skriptsprache ist, war es die natürliche Wahl als Erweiterungssprache für MayaVi. Infolgedessen ist MayaVi nicht nur in Python geschrieben, sondern kann auch von Endbenutzern, die in Python arbeiten, skriptfähig gemacht werden, um es mit zusätzlicher nützlicher Funktionalität zu erweitern.

Ich bin kein Softwareentwickler oder Informatiker. Ebenso bin ich kein Grafikexperte. Obwohl ich viel Programmiererfahrung mit C/C++ hatte, kannte ich sehr wenig Python, als ich mit diesem Projekt begann. Dennoch konnte ich Python anhand seines Tutorials und der Standard-Python-Dokumentation lernen und dann schnell eine beachtliche Anwendung entwickeln. Ich war erfreut, dass Python so leicht gelernt und dann so leicht auf nicht-triviale Aufgaben angewendet werden konnte.

Es ist wichtig zu beachten, dass dieses Projekt nur eine Freizeitaktivität für mich war, was bedeutet, dass ich sehr wenig kontinuierliche Zeit hatte, daran zu arbeiten. Ich war der alleinige Entwickler und musste den Code schreiben, die Webseiten pflegen, die Dokumentation schreiben und Benutzerfragen beantworten – alles allein.

Dennoch konnte ich etwa 16.000 Zeilen Python-Code in der Größenordnung von etwa 4 Monaten Vollzeitarbeit schreiben und ein erfolgreiches Endprodukt hervorbringen. Diese Anstrengung erstreckte sich über etwa 5 Versionen von VTK-CFD und 3 Versionen von MayaVi. MayaVi wurde über 12.000 Mal von SourceForge heruntergeladen, mit über 3.500 Downloads der neuesten Version innerhalb von drei Monaten. Es gibt jetzt Tausende von Benutzern auf der ganzen Welt, die MayaVi in vielen Forschungsbereichen einsetzen. Es wurde kürzlich für Debian Linux paketiert und in seine neueste Version, Woody, aufgenommen.

Schlussfolgerung

Ohne Python gäbe es MayaVi nicht. Programmieren in Python ist eine solche Freude und so einfach, dass selbst ein Freizeitprojekt sehr erfolgreich sein kann, indem es das erreicht, was es sich vorgenommen hat. Es gab keine größeren Portierungsprobleme und MayaVi läuft unter Linux, Unix und Windows perfekt mit sehr wenigen von mir vorgenommenen Änderungen. Insgesamt war es eine wunderbare Erfahrung mit Python. Ich habe so viel gelernt, bin damit sehr produktiv geworden und habe hoffentlich auch andere mit den Werkzeugen produktiv gemacht, die ich schreiben konnte.

Über den Autor

Prabhu Ramachandran ist ein Luft- und Raumfahrtingenieur und Doktorand am Indian Institute of Technology - Madras, Chennai, Indien. Als Befürworter von OSS und GNU/Linux hat Prabhu auch zu VTK beigetragen, dem Open-Source-System für 3D-Computergrafik, Bildverarbeitung und Visualisierung, auf dem MayaVi basiert.