Einführung
Dieses Buch soll dich mit dem meiner Meinung nach leistungsstärksten Datenvisualisierungs-Stack vertraut machen, den es gibt: Python und JavaScript. Du lernst genug über große Bibliotheken wie Pandas und D3, um deine eigenen Webdatenvisualisierungen zu erstellen und deine eigene Toolchain zu verfeinern. Das Fachwissen kommt mit der Praxis, aber dieses Buch bietet eine flache Lernkurve, um grundlegende Kompetenzen zu erwerben.
Hinweis
Wenn du das hier liest, würde ich mich über jedes Feedback freuen, das du hast. Bitte sende es an pyjsdataviz@kyrandale.com. Herzlichen Dank!
Auf meiner Website findest du auch eine Arbeitskopie der Nobel-Visualisierung, auf die das Buch buchstäblich und im übertragenen Sinne hinarbeitet.
Der Hauptteil dieses Buches erzählt eine der unzähligen Geschichten der Datenvisualisierung, die sorgfältig ausgewählt wurde, um einige leistungsstarke Python- und JavaScript-Bibliotheken und -Tools zu präsentieren, die zusammen eine Toolchain bilden. Diese Toolchain sammelt am Anfang rohe, unbearbeitete Daten und liefert am Ende eine reichhaltige, ansprechende Webvisualisierung. Wie alle Geschichten der Datenvisualisierung ist es eine Geschichte der Transformation - in diesem Fall die Umwandlung einer einfachen Wikipedia-Liste der Nobelpreisträger in eine interaktive Visualisierung, die die Daten zum Leben erweckt und die Erkundung der Geschichte des Preises einfach und unterhaltsam macht.
Egal, welche Daten du hast und welche Geschichte du damit erzählen willst, die natürliche Heimat für die Visualisierungen, die du daraus machst, ist das Web. Als Bereitstellungsplattform ist es um Größenordnungen leistungsfähiger als alles, was vorher da war, und dieses Buch soll dir den Übergang von der desktop- oder serverbasierten Datenanalyse und -verarbeitung zum Web erleichtern.
Die Arbeit mit diesen beiden mächtigen Sprachen liefert nicht nur leistungsstarke Web-Visualisierungen, sondern macht auch Spaß und ist ansprechend.
Viele potenzielle Dataviz-Programmierer/innen gehen davon aus, dass es eine große Kluft zwischen der Webentwicklung und dem gibt, was sie gerne tun würden, nämlich in Python und JavaScript programmieren. Die Webentwicklung erfordert jede Menge geheimnisvolles Wissen über Markup-Sprachen, Style-Skripte und Verwaltung und ist ohne Tools mit seltsamen Namen wie Webpack oder Gulp nicht möglich. Heutzutage kann diese große Kluft zu einer dünnen und sehr durchlässigen Membran zusammengeschrumpft werden, die es dir ermöglicht, dich auf das zu konzentrieren, was du gut kannst: mit minimalem Aufwand Dinge zu programmieren (siehe Abbildung I-1) und die Webserver für die Datenbereitstellung zu nutzen.
Für wen dieses Buch ist
Zunächst einmal richtet sich dieses Buch an alle, die Python oder JavaScript einigermaßen beherrschen und einen der aufregendsten Bereiche in der Datenverarbeitung erkunden wollen: das explodierende Feld der Datenvisualisierung für das Web. Außerdem geht es darum, einige spezifische Herausforderungen zu meistern, die meiner Erfahrung nach ziemlich häufig auftreten.
Wenn du den Auftrag bekommst, ein technisches Buch zu schreiben, wird dich dein Redakteur wahrscheinlich darauf hinweisen, dass du in deinem Buch an Schmerzpunkte denken sollst, die du behandeln könntest. Die beiden Hauptprobleme dieses Buches lassen sich am besten anhand einiger Geschichten veranschaulichen, darunter eine meiner eigenen und eine, die mir von Javaskriptern, die ich kenne, in unterschiedlicher Form erzählt wurde.
Vor vielen Jahren stieß ich als Wissenschaftlerin auf Python und verliebte mich sofort. Ich hatte einige ziemlich komplexe Simulationen in C++ geschrieben, und die Einfachheit und Leistungsfähigkeit von Python war ein frischer Wind im Vergleich zu all den Makefiles, Deklarationen, Definitionen und dergleichen. Programmieren machte Spaß. Python war der perfekte Klebstoff, der gut mit meinen C++-Bibliotheken zusammenspielte (Python war damals und ist auch heute noch kein Geschwindigkeitsdämon) und all die Dinge, die in Low-Level-Sprachen so mühsam sind (z. B. Datei-I/O, Datenbankzugriff und Serialisierung), mit Leichtigkeit erledigte. Ich habe angefangen, alle meine grafischen Benutzeroberflächen (GUIs) und Visualisierungen in Python zu schreiben und dabei wxPython, PyQt und eine ganze Reihe anderer erfrischend einfacher Tools verwendet. Obwohl einige dieser Tools ziemlich cool sind und ich sie gerne mit der Welt teilen würde, stellt der Aufwand, der nötig ist, um sie zu verpacken, zu verteilen und sicherzustellen, dass sie mit modernen Bibliotheken funktionieren, leider eine Hürde dar, die ich wahrscheinlich nicht überwinden kann.
Zu dieser Zeit gab es theoretisch das perfekte universelle Vertriebssystem für die Software, die ich so liebevoll entwickelt hatte - den Webbrowser. Webbrowser waren (und sind) auf so ziemlich jedem Computer der Welt verfügbar und verfügten über eine eigene, integrierte, interpretierte Programmiersprache: einmal schreiben, überall laufen lassen. Aber Python spielte im Sandkasten der Webbrowser nicht mit, und die Browser waren nicht in der Lage, anspruchsvolle Grafiken und Visualisierungen zu erstellen, sondern beschränkten sich auf statische Bilder und die eine oder andere jQuery-Transformation. JavaScript war eine "Spielzeugsprache", die an einen sehr langsamen Interpreter gebunden war, der zwar für kleine DOM-Tricks gut war, aber sicher nicht an das heranreichte, was ich auf dem Desktop mit Python machen konnte. Also wurde dieser Weg von vornherein verworfen. Meine Visualisierungen wollten ins Internet, aber es gab keinen Weg dorthin.
Dank eines von Google initiierten Wettrüstens mit der V8-Engine ist JavaScript heute um Größenordnungen schneller als Python.1 Auch HTML hat mit HTML5 ein wenig aufgeräumt. Die Arbeit damit ist viel angenehmer, und es gibt viel weniger Kesselstein-Code. Lose befolgte und äußerst wackelige Protokolle wie Scalable Vector Graphics (SVG) haben sich dank leistungsfähiger Visualisierungsbibliotheken, insbesondere D3, gut gefestigt. Moderne Browser müssen mit SVG und zunehmend auch mit 3D in Form von WebGL und seinen Abkömmlingen wie THREE.js gut funktionieren. Die Visualisierungen, die ich in Python erstellt habe, sind jetzt auch in deinem lokalen Webbrowser möglich, und der Vorteil ist, dass sie mit sehr wenig Aufwand auf jedem Desktop, Laptop, Smartphone und Tablet der Welt zugänglich gemacht werden können.
Warum also strömen Pythonistas nicht in Scharen herbei, um ihre Daten in einer Form zu veröffentlichen, die sie selbst bestimmen? Die Alternative dazu ist, die Daten jemand anderem zu überlassen, was die meisten Datenwissenschaftler, die ich kenne, alles andere als ideal finden würden. Zunächst einmal steht der Begriff Webentwicklung für kompliziertes Markup, undurchsichtige Stylesheets, eine ganze Reihe neuer Tools, die man lernen muss, und IDEs, die man beherrschen muss. Und dann ist da noch JavaScript selbst, eine seltsame Sprache, die bis vor kurzem noch als Spielzeug galt und weder Fisch noch Fleisch ist. Ich möchte diese Probleme angehen und zeigen, dass du moderne Webvisualisierungen (oft einseitige Anwendungen) mit einem Minimum an HTML und CSS erstellen kannst, sodass du dich auf das Programmieren konzentrieren kannst, und dass JavaScript ein einfacher Sprung für Pythonisten ist. Aber du musst nicht springen; Kapitel 2 ist eine Sprachbrücke, die Pythonisten und Javaskriptern helfen soll, die Kluft zwischen den Sprachen zu überbrücken, indem sie gemeinsame Elemente hervorhebt und einfache Übersetzungen liefert.
Die zweite Geschichte ist eine häufige unter den JavaScript-Datenvisualisierern, die ich kenne. Die Verarbeitung von Daten in JavaScript ist alles andere als ideal. Es gibt nur wenige leistungsstarke Bibliotheken, und obwohl die jüngsten funktionalen Erweiterungen der Sprache die Datenverarbeitung viel angenehmer machen, gibt es immer noch kein echtes Ökosystem für die Datenverarbeitung, von dem man sprechen könnte. Es besteht also eine deutliche Asymmetrie zwischen den enorm leistungsfähigen Visualisierungsbibliotheken (D3 ist nach wie vor die wichtigste Bibliothek) und der Möglichkeit, alle Daten, die an den Browser geliefert werden, zu bereinigen und zu verarbeiten. All das macht es erforderlich, dass du deine Daten in einer anderen Sprache oder mit einem Toolkit wie Tableau bereinigst, verarbeitest und erkundest. Das führt oft zu stückweisen Ausflügen in das vage erinnerte Matlab, die steile Lernkurve von R oder die eine oder andere Java-Bibliothek.
Toolkits wie Tableau sind zwar sehr beeindruckend, aber für Programmierer oft frustrierend. Es gibt keine Möglichkeit, die Ausdruckskraft einer guten, universellen Programmiersprache in einer grafischen Benutzeroberfläche wiederzugeben. Und was ist, wenn du einen kleinen Webserver erstellen willst, um deine verarbeiteten Daten bereitzustellen? Das bedeutet, dass du mindestens eine neue webentwicklungsfähige Sprache lernen musst.
Mit anderen Worten: Javaskripter, die anfangen, ihre Datenvisualisierung zu erweitern, suchen nach einem ergänzenden Datenverarbeitungs-Stack, der den geringsten Zeitaufwand erfordert und die niedrigste Lernkurve hat.
Minimale Anforderungen für die Verwendung dieses Buches
Es widerstrebt mir immer, die Entdeckungsfreude der Menschen einzuschränken, vor allem im Zusammenhang mit dem Programmieren und dem Internet, das voll von Autodidakten ist (wie sollte man sonst lernen, wenn die akademischen Hallen den Trends Lichtjahre hinterherhinken?), die schnell und wütend lernen, ohne die formalen Einschränkungen, die früher für das Lernen galten. Python und JavaScript sind so ziemlich die einfachsten Programmiersprachen, die es gibt, und beide sind Top-Kandidaten für die beste erste Sprache. Das Interpretieren des Codes ist keine große kognitive Belastung.
In diesem Sinne gibt es erfahrene Programmierer, die ohne jegliche Erfahrung mit Python und JavaScript dieses Buch konsumieren und innerhalb einer Woche eigene Bibliotheken schreiben können.
Für Programmieranfänger, die neu in Python oder JavaScript sind, ist dieses Buch wahrscheinlich zu fortgeschritten. Ich empfehle, die zahlreichen Bücher, Webressourcen, Screencasts und Ähnliches zu nutzen, die das Lernen heutzutage so einfach machen. Konzentriere dich auf ein persönliches Bedürfnis, ein Problem, das du lösen willst, und lerne das Programmieren, indem du es tust - das ist der einzige Weg.
Für Leute, die schon ein bisschen in Python oder JavaScript programmiert haben, empfehle ich, dass du ein paar Bibliotheken benutzt hast, die grundlegenden Idiome deiner Sprache verstehst und dir ein Stück neuen Code ansehen kannst, um zu verstehen, was da vor sich geht - mit anderen Worten: Pythonisten, die ein paar Module der Standardbibliothek benutzen können, und Javaskripter, die die eine oder andere Bibliothek benutzt haben und ein paar Zeilen ihres Quellcodes verstehen würden.
Warum Python und JavaScript?
Warum JavaScript ist eine leicht zu beantwortende Frage. Im Moment und auf absehbare Zeit gibt es nur eine erstklassige, browserbasierte Programmiersprache. Es hat verschiedene Versuche gegeben, sie zu erweitern, zu verbessern und zu verdrängen, aber das gute alte, einfache JS ist immer noch überragend. Wenn du moderne, dynamische, interaktive Visualisierungen erstellen und sie auf Knopfdruck in die Welt bringen willst, wirst du irgendwann auf JavaScript stoßen. Du musst es zwar nicht unbedingt beherrschen, aber grundlegende Kenntnisse sind eine wichtige Voraussetzung für den Einstieg in einen der spannendsten Bereiche der modernen Datenwissenschaft. Dieses Buch bringt dich auf den richtigen Weg.
Warum nicht Python im Browser?
In letzter Zeit gab es einige Initiativen, um eine eingeschränkte Version von Python im Browser laufen zu lassen. Pyodide zum Beispiel ist eine Portierung von CPython auf WebAssembly. Diese Initiativen sind beeindruckend und interessant, aber im Moment besteht die wichtigste Möglichkeit, Webdiagramme in Python zu erstellen, darin, sie automatisch von einer Zwischenbibliothek konvertieren zu lassen.
Derzeit gibt es einige sehr beeindruckende Initiativen, die darauf abzielen, in Python erstellte Visualisierungen, die oft auf Matplotlib basieren, im Browser laufen zu lassen. Sie erreichen dies, indem sie den Python-Code in JavaScript konvertieren, das auf dem canvas
oder svg
Zeichenkontext basiert. Die populärsten und ausgereiftesten dieser Programme sind Plotly und Bokeh. In Kapitel 14 erfährst du, wie du mit Plotly Diagramme in einem Jupyter-Notizbuch erstellen und sie auf eine Webseite übertragen kannst. Für viele Anwendungsfälle ist dies ein großartiges Dataviz-Tool, das du in deinem Werkzeugkasten haben solltest.
Hinter diesen JavaScript-Konvertern steckt zwar brillanter Code und viele solide Anwendungsfälle, aber sie haben auch große Einschränkungen:
-
Eine automatisierte Codeumwandlung kann zwar die Arbeit erledigen, aber der erzeugte Code ist für einen Menschen meist ziemlich undurchschaubar.
-
Das Anpassen und Anpassen der resultierenden Plots mit der leistungsstarken browserbasierten JavaScript-Entwicklungsumgebung kann mühsam sein. In Kapitel 14 werden wir sehen, wie diese Schwierigkeiten durch die Verwendung der JS-API von Plotly gemildert werden können.
-
Du bist auf die Teilmenge der Plot-Typen beschränkt, die derzeit in den Bibliotheken verfügbar sind.
-
Die Interaktivität ist im Moment noch sehr einfach. Die Anpassung der Benutzerkontrollen erfolgt am besten in JavaScript mit den Entwickler-Tools des Browsers.
Bedenke, dass die Leute, die diese Bibliotheken erstellen, JavaScript-Experten sein müssen. Wenn du also etwas von dem verstehen willst, was sie tun, und dich schließlich selbst ausdrücken willst, dann musst du dich mit JavaScript auskennen.
Warum Python für die Datenverarbeitung
Warum du Python für deine Datenverarbeitung wählen solltest, ist ein bisschen komplizierter. Zunächst einmal gibt es gute Alternativen, wenn es um Datenverarbeitung geht. Schauen wir uns ein paar Kandidaten an, angefangen mit dem Unternehmensriesen Java.
Java
Von den anderen großen Allzweck-Programmiersprachen bietet nur Java ein ähnlich reichhaltiges Ökosystem an Bibliotheken wie Python, und das auch noch mit deutlich höherer nativer Geschwindigkeit. Obwohl Java viel einfacher zu programmieren ist als Sprachen wie C++, ist es meiner Meinung nach keine besonders angenehme Programmiersprache, da es zu viele mühsame Textbausteine und überflüssige Formulierungen gibt. Diese Dinge fallen nach einer Weile schwer ins Gewicht und machen die Arbeit am Code mühsam. Was die Geschwindigkeit angeht, ist der Standardinterpreter von Python langsam, aber Python ist eine großartige Sprache, die sich gut mit anderen Sprachen kombinieren lässt. Das zeigen die großen Python-Bibliotheken für die Datenverarbeitung wie NumPy (und das davon abhängige Pandas), SciPy und andere, die C++- und Fortran-Bibliotheken nutzen, um die schwere Arbeit zu erledigen und gleichzeitig die Benutzerfreundlichkeit einer einfachen Skriptsprache zu bieten.
R
Das ehrwürdige R war bis vor kurzem das Tool der Wahl für viele Datenwissenschaftler und ist wahrscheinlich der größte Konkurrent von Python in diesem Bereich. Wie Python profitiert auch R von einer sehr aktiven Community, einigen großartigen Tools wie der Plot-Bibliothek ggplot2 und einer Syntax, die speziell für Datenwissenschaft und Statistik entwickelt wurde. Aber diese Spezialisierung ist ein zweischneidiges Schwert. Da R für einen bestimmten Zweck entwickelt wurde, bedeutet das, dass du, wenn du zum Beispiel einen Webserver für deine mit R verarbeiteten Daten schreiben möchtest, eine andere Sprache mit dem entsprechenden Lernaufwand wählen oder versuchen musst, etwas auf eine Art Rund-um-die-Uhr-Bauweise zusammenzuhacken. Die Allzweckfähigkeit von Python und sein reichhaltiges Ökosystem bedeuten, dass man so ziemlich alles machen kann, was für eine Datenverarbeitungspipeline erforderlich ist (abgesehen von JS-Visualisierungen), ohne seine Komfortzone verlassen zu müssen. Für mich persönlich ist es ein kleines Opfer, das ich für ein wenig syntaktische Unübersichtlichkeit bezahle.
Andere
Es gibt auch andere Alternativen zur Datenverarbeitung mit Python, aber keine von ihnen kommt an die Flexibilität und Leistungsfähigkeit heran, die eine universell einsetzbare, einfach zu bedienende Programmiersprache mit einem reichhaltigen Ökosystem an Bibliotheken bietet. Mathematische Programmierumgebungen wie Matlab und Mathematica zum Beispiel haben aktive Communities und eine Fülle großartiger Bibliotheken, aber sie gelten kaum als Allzwecksprache, weil sie für den Einsatz innerhalb eines geschlossenen Gartens konzipiert sind. Außerdem sind sie proprietär, was eine beträchtliche Anfangsinvestition und eine ganz andere Stimmung als die durchschlagende Open-Source-Umgebung von Python bedeutet.
GUI-gesteuerte Dataviz-Tools wie Tableau sind großartige Kreationen, werden aber jemanden, der an die Freiheit der Programmierung gewöhnt ist, schnell frustrieren. Sie funktionieren in der Regel gut, solange du sozusagen von ihrem Liedblatt singst. Abweichungen vom vorgegebenen Pfad werden sehr schnell schmerzhaft.
Python wird immer besser
Meiner Meinung nach spricht vieles dafür, dass Python für angehende Datenwissenschaftler/innen die Sprache der Wahl ist. Aber die Dinge stehen nicht still; im Gegenteil, die Fähigkeiten von Python in diesem Bereich wachsen mit erstaunlicher Geschwindigkeit. Zum Vergleich: Ich programmiere seit über 20 Jahren in Python und habe mich daran gewöhnt, dass ich überrascht bin, wenn ich kein Python-Modul finde, das mir bei der Lösung eines Problems hilft. Ein Beispiel: Python ist traditionell schwach bei den Bibliotheken für statistische Analysen, da ist R weit voraus. In letzter Zeit haben einige leistungsstarke Module, wie z. B. statsmodels, diese Lücke schnell geschlossen.
Python ist ein florierendes Ökosystem für die Datenverarbeitung mit einem ziemlich unübertroffenen allgemeinen Zweck, und es wird von Woche zu Woche besser. Es ist verständlich, warum so viele in der Community so aufgeregt sind - es ist ziemlich aufregend.
Was die Visualisierung im Browser angeht, ist die gute Nachricht, dass JavaScript nicht nur einen privilegierten, nein, exklusiven Platz im Web-Ökosystem hat. Dank eines Wettrüstens der Interpreter, die ihre Leistung in atemberaubenden Sprüngen gesteigert haben, und einiger leistungsfähiger Visualisierungsbibliotheken wie D3, die jede Sprache da draußen ergänzen würden, hat JavaScript jetzt ernsthafte Chancen.
Kurz gesagt: Python und JavaScript sind wunderbare Ergänzungen für die Datenvisualisierung im Web, die sich gegenseitig brauchen, um eine wichtige fehlende Komponente zu liefern.
Was du lernen wirst
Es gibt einige große Python- und JavaScript-Bibliotheken in unserer Dataviz-Toolchain. Um sie alle umfassend zu behandeln, bräuchte man eine ganze Reihe von Büchern. Dennoch denke ich, dass die Grundlagen der meisten Bibliotheken, und sicherlich auch der hier behandelten, recht schnell erlernt werden können. Fachwissen braucht Zeit und Übung, aber das Grundwissen, das man braucht, um produktiv zu sein, ist sozusagen niedrig hängendes Obst.
In diesem Sinne zielt dieses Buch darauf ab, dir ein solides Grundgerüst an praktischem Wissen zu vermitteln, das stark genug ist, um die zukünftige Entwicklung zu tragen. Ich versuche, die Lernkurve so flach wie möglich zu halten und dich mit den praktischen Fähigkeiten auszustatten, die du brauchst, um deine Kunst zu verfeinern.
Dieses Buch legt den Schwerpunkt auf Pragmatismus und bewährte Methoden. Es deckt eine ganze Menge an Themen ab, und es gibt nicht genug Platz für viele theoretische Ablenkungen. Ich gehe auf die Aspekte der Bibliotheken in der Toolchain ein, die am häufigsten verwendet werden, und verweise dich auf Ressourcen für die anderen Themen. Die meisten Bibliotheken haben einen harten Kern von Funktionen, Methoden, Klassen und Ähnlichem, die die wichtigste funktionale Teilmenge darstellen. Mit diesen kannst du tatsächlich etwas anfangen. Irgendwann wirst du ein Problem finden, das du damit nicht lösen kannst. Dann sind gute Bücher, Dokumentationen und Online-Foren dein Freund.
Die Auswahl der Bibliotheken
Bei der Auswahl der Bibliotheken, die in diesem Buch verwendet werden, hatte ich drei Dinge im Sinn:
-
Open Source und kostenlos wie ein Bier - dusolltest kein zusätzliches Geld investieren müssen, um mit diesem Buch zu lernen.
-
Langlebigkeit - in der Regel gut etabliert, von der Gemeinschaft getragen und beliebt.
-
Das Beste seiner Art (gute Unterstützung und eine aktive Community vorausgesetzt), an der Schnittstelle zwischen Beliebtheit und Nutzen.
Die Fähigkeiten, die du hier lernst, sollten für eine lange Zeit relevant sein. Im Allgemeinen wurden die offensichtlichen Kandidaten ausgewählt - Bibliotheken, die sozusagen ihre eigene Eintrittskarte schreiben. Wo es angebracht ist, werde ich die Alternativen hervorheben und meine Auswahl begründen.
Präliminarien
Bevor wir mit der Transformation unseres Nobel-Datensatzes durch die Toolchain beginnen, sind ein paar vorbereitende Kapitel erforderlich. In diesen Kapiteln werden die grundlegenden Fähigkeiten vermittelt, die notwendig sind, damit die restlichen Kapitel der Toolchain flüssiger ablaufen. In den ersten Kapiteln geht es um Folgendes:
- Kapitel 2, "Eine Brücke zum Sprachenlernen zwischen Python und JavaScript"
-
Eine Sprachbrücke zwischen Python und JavaScript bauen
- Kapitel 3, "Lesen und Schreiben von Daten mit Python"
-
Wie man mit Python Daten in verschiedenen Dateiformaten und Datenbanken weitergibt
- Kapitel 4, "Webdev 101"
-
Abdeckung der grundlegenden Webentwicklung, die das Buch benötigt
Diese Kapitel sind zum Teil Tutorial, zum Teil Nachschlagewerk, und es ist in Ordnung, direkt zum Anfang der Toolchain zu springen und bei Bedarf zurückzuschauen.
Die Dataviz Toolchain
Im Hauptteil des Buches wird die Toolchain für die Datenvisualisierung vorgestellt. Dabei wird der Weg eines Datensatzes von Nobelpreisträgern von frisch gesammelten Rohdaten bis hin zu einer ansprechenden, interaktiven JavaScript-Visualisierung verfolgt. Während des Erfassungsprozesses wird die Verfeinerung und Umwandlung einer Reihe von großen Bibliotheken demonstriert, die in Abbildung I-2 zusammengefasst sind. Diese Bibliotheken sind die industriellen Drehbänke unserer Toolchain: reichhaltige, ausgereifte Tools, die die Leistungsfähigkeit des Python+JavaScript Dataviz-Stacks demonstrieren. Die folgenden Abschnitte enthalten eine kurze Einführung in die fünf Stufen unserer Toolchain und ihre wichtigsten Bibliotheken.
1. Scraping von Daten mit Scrapy
Die erste Herausforderung für jeden Datenvisualisierer ist es, an die Daten zu kommen, die er braucht, sei es aufgrund einer Anfrage oder aus eigenem Antrieb. Wenn du Glück hast, werden sie dir in einwandfreier Form geliefert, aber meistens musst du sie selbst suchen. Ich werde auf die verschiedenen Möglichkeiten eingehen, wie du mit Python Daten aus dem Internet beziehen kannst (z. B. über Web-APIs oder Google-Tabellen). Der Nobelpreis-Datensatz für die Toolchain-Demonstration wurde mithilfe von Scrapy aus den Wikipedia-Seiten ausgelesen.2
Pythons Scrapy ist ein industrieller Scraper, der alle Aufgaben der Datendrosselung und des Media Pipelining übernimmt, die unverzichtbar sind, wenn du vorhast, große Datenmengen zu scrapen. Scraping ist oft die einzige Möglichkeit, an die Daten zu kommen, die dich interessieren, und wenn du den Arbeitsablauf von Scrapy erst einmal beherrschst, sind all die Datensätze, die bisher tabu waren, nur noch eine Spinne entfernt.3
2. Daten mit Pandas bereinigen
Das schmutzige Geheimnis von Dataviz ist, dass so gut wie alle Daten schmutzig sind und dass es viel mehr Zeit in Anspruch nehmen kann, sie in etwas Brauchbares umzuwandeln, als du denkst. Das ist ein unglamouröser Prozess, der dir leicht die Hälfte deiner Zeit rauben kann. Umso wichtiger ist es, gut darin zu werden und die richtigen Tools zu benutzen.
pandas ist ein wichtiger Akteur im Ökosystem der Python-Datenverarbeitungsprogramme. Es ist eine Python-Bibliothek zur Datenanalyse, deren Hauptbestandteil der DataFrame ist, im Grunde eine programmatische Tabellenkalkulation. pandas erweitert NumPy, die leistungsstarke numerische Bibliothek von Python, um heterogene Datensätze, also die Art von kategorialen, zeitlichen und ordinalen Informationen, mit denen Datenvisualisierer umgehen müssen.
Pandas eignet sich nicht nur hervorragend für die interaktive Erkundung deiner Daten (mit den integrierten Matplotlib-Diagrammen), sondern auch für die mühsame Arbeit der Datenbereinigung, um doppelte Datensätze zu finden, fehlerhafte Datumsangaben zu korrigieren, fehlende Felder zu finden und so weiter.
3. Daten mit Pandas und Matplotlib erforschen
Bevor du mit der Umwandlung deiner Daten in eine Visualisierung beginnst, musst du sie verstehen. Die Muster, Trends und Anomalien, die in den Daten verborgen sind, geben Aufschluss über die Geschichten, die du mit ihnen erzählen willst, egal ob es darum geht, den jüngsten Anstieg der jährlichen Verkaufszahlen von Widgets zu erklären oder den globalen Klimawandel aufzuzeigen.
In Verbindung mit IPython, dem Python-Interpreter auf Steroiden, bieten Pandas und Matplotlib (mit Ergänzungen wie Seaborn) eine großartige Möglichkeit, deine Daten interaktiv zu erforschen, indem sie reichhaltige Inline-Diagramme von der Kommandozeile aus erzeugen und deine Daten aufschneiden, um interessante Muster zu erkennen. Die Ergebnisse dieser Untersuchungen können dann ganz einfach in einer Datei oder Datenbank gespeichert werden, um sie an deine JavaScript-Visualisierung weiterzugeben.
4. Übermittlung deiner Daten mit Flask
Sobald du deine Daten erforscht und verfeinert hast, musst du sie an den Webbrowser weitergeben, wo eine JavaScript-Bibliothek wie D3 sie umwandeln kann. Eine der großen Stärken einer Allzwecksprache wie Python ist, dass man mit wenigen Codezeilen einen Webserver erstellen kann, während man mit Spezialbibliotheken wie NumPy und SciPy große Datensätze verarbeiten kann.4 Flask ist der beliebteste leichtgewichtige Python-Server und eignet sich perfekt für die Erstellung kleiner, RESTful5 APIs zu erstellen, die von JavaScript genutzt werden können, um Daten vom Server, aus Dateien oder Datenbanken, in den Browser zu übertragen. Wie ich dir zeigen werde, kannst du mit wenigen Codezeilen eine RESTful-API erstellen, die Daten aus SQL- oder NoSQL-Datenbanken liefert.
5. Daten in interaktive Visualisierungen mit Plotly und D3 umwandeln
Sobald die Daten bereinigt und verfeinert sind, folgt die Visualisierungsphase, in der ausgewählte Spiegelungen des Datensatzes präsentiert werden und der Nutzer sie möglicherweise interaktiv erkunden kann. Je nach Datenlage kann es sich dabei um herkömmliche Diagramme, Karten oder neuartige Visualisierungen handeln.
Plotly ist eine brillante Diagrammbibliothek, mit der du deine Diagramme in Python entwickeln und ins Web übertragen kannst. Wie wir in Kapitel 14 sehen werden, hat Plotly auch eine JavaScript-API, die die Python-API nachahmt und dir eine kostenlose native JS-Diagrammbibliothek bietet.
D3 ist die leistungsstarke JavaScript-Visualisierungsbibliothek und wohl eines der mächtigsten Visualisierungstools, unabhängig von der Sprache. Wir werden D3 verwenden, um eine neuartige Nobelpreis-Visualisierung mit mehreren Elementen und Benutzerinteraktion zu erstellen, die es den Leuten ermöglicht, den Datensatz nach interessanten Elementen zu durchsuchen. D3 kann schwierig zu erlernen sein, aber ich bringe dich schnell auf den neuesten Stand und mache dich bereit, deine Fähigkeiten zu verfeinern.
Kleinere Bibliotheken
Zusätzlich zu den großen Bibliotheken gibt es eine große Anzahl kleinerer Bibliotheken. Das sind die unverzichtbaren kleineren Werkzeuge, die Hämmer und Schraubenschlüssel der Toolchain. Vor allem Python hat ein unglaublich reichhaltiges Ökosystem mit kleinen, spezialisierten Bibliotheken für fast jede denkbare Aufgabe. Unter den zahlreichen Hilfsprogrammen sind einige besonders erwähnenswert:
- Anfragen
-
Pythons beste HTTP-Bibliothek, die ihrem Motto "HTTP für Menschen" alle Ehre macht. Requests ist urllib2, einer der mitgelieferten Batterien von Python, weit überlegen.
- SQLAlchemy
-
Das beste Python-SQL-Toolkit und der beste objektrelationale Mapper (ORM), den es gibt. Es ist sehr funktionsreich und macht die Arbeit mit verschiedenen SQL-basierten Datenbanken zu einem Kinderspiel.
- seaborn
-
Eine großartige Ergänzung zu Pythons Plot-Kraftpaket Matplotlib, die einige sehr nützliche Plot-Typen hinzufügt, darunter einige statistische, die für Datenvisualisierer besonders nützlich sind. Außerdem bietet sie eine bessere Ästhetik als die Standardeinstellungen von Matplotlib.
- Kreuzfilter
-
Obwohl die JavaScript-Bibliotheken für die Datenverarbeitung noch nicht ausgereift sind, sind in letzter Zeit einige wirklich nützliche Bibliotheken entstanden, darunter Crossfilter. Er ermöglicht eine sehr schnelle Filterung von zeilen- und spaltenbasierten Datensätzen und ist ideal für die Arbeit mit Dataviz geeignet. Das ist nicht überraschend, denn einer seiner Schöpfer ist Mike Bostock, der Vater von D3.
- Marshmallow
-
Eine brillante und sehr praktische Bibliothek, die komplexe Datentypen wie Objekte in und aus nativen Python-Datentypen konvertiert.
Das Buch benutzen
Obwohl die verschiedenen Teile des Buches einem Prozess der Datentransformation folgen, muss dieses Buch nicht von vorne bis hinten gelesen werden. Der erste Teil bietet ein grundlegendes Toolkit für Python- und JavaScript-basiertes Web-Dataviz und wird zwangsläufig Inhalte enthalten, die vielen Lesern bekannt sind. Was du noch nicht kennst, kannst du dir heraussuchen und bei Bedarf nachlesen (es gibt auch weiterführende Links, wenn nötig). Die Brücke zwischen Python und JavaScript ist für diejenigen, die beide Sprachen bereits beherrschen, überflüssig, auch wenn es noch einige nützliche Informationen gibt.
Die übrigen Teile des Buches, die unsere Toolchain bei der Umwandlung einer recht einfallslosen Webliste in eine vollwertige, interaktive D3-Visualisierung begleiten, sind im Wesentlichen in sich abgeschlossen. Wenn du sofort in Teil III eintauchen möchtest, um Daten zu bereinigen und mit Pandas zu erforschen, kannst du das gerne tun, aber sei dir bewusst, dass du einen schmutzigen Nobelpreisdatensatz voraussetzt. Du kannst dir später ansehen, wie dieser von Scrapy erzeugt wurde, wenn das in deinen Zeitplan passt. Wenn du direkt mit der Erstellung der Nobel-Viz-App in Teil IV und Teil V beginnen möchtest, solltest du beachten, dass ein sauberer Nobelpreis-Datensatz vorausgesetzt wird.
Wie auch immer du dich entscheidest, ich schlage vor, dass du dir irgendwann alle grundlegenden Fähigkeiten aneignest, die in diesem Buch behandelt werden, wenn du Dataviz zu deinem Beruf machen willst.
Ein bisschen Kontext
Dies ist ein praktisches Buch und setzt voraus, dass der Leser oder die Leserin eine ziemlich gute Vorstellung davon hat, was er oder sie visualisieren möchte und wie diese Visualisierung aussehen und sich anfühlen soll, und dass er oder sie den Wunsch hat, ohne viel Theorie loszulegen. Dennoch kann ein Rückblick auf die Geschichte der Datenvisualisierung die zentralen Themen des Buches verdeutlichen und wertvollen Kontext hinzufügen. Sie kann auch erklären, warum es gerade jetzt so spannend ist, in dieses Gebiet einzusteigen, da technologische Innovationen neue Formen der Datenvisualisierung hervorbringen und die Menschen sich mit dem Problem auseinandersetzen, die zunehmende Menge an multidimensionalen Daten, die das Internet erzeugt, zu präsentieren.
Zur Datenvisualisierung gibt es eine beeindruckende Fülle von Theorien, und es gibt einige großartige Bücher, die ich dir zur Lektüre empfehle (unter "Empfohlene Bücher" findest du eine kleine Auswahl). Der praktische Nutzen des Verständnisses der Art und Weise, wie Menschen Informationen visuell aufnehmen, kann nicht hoch genug eingeschätzt werden. Es lässt sich zum Beispiel leicht zeigen, dass ein Tortendiagramm fast immer eine schlechte Art ist, vergleichende Daten darzustellen, und ein einfaches Balkendiagramm weitaus besser ist. Durch psychometrische Experimente wissen wir jetzt ziemlich genau, wie wir das menschliche visuelle System austricksen können, damit die Zusammenhänge in den Daten schwerer zu erfassen sind. Umgekehrt können wir zeigen, dass einige visuelle Formen nahezu optimal sind, um den Kontrast zu verstärken. Die Literatur liefert zumindest einige nützliche Faustregeln, die gute Kandidaten für eine bestimmte Datenerzählung vorschlagen.
Im Wesentlichen versucht gutes Dataviz, Daten, die durch Messungen in der Welt (empirisch) oder als Produkt abstrakter mathematischer Untersuchungen (z. B. die schönen fraktalen Muster der Mandelbrot-Menge) gesammelt wurden, so darzustellen, dass sie mögliche Muster oder Trends aufzeigen oder hervorheben. Diese Muster können einfach sein (z. B. das Durchschnittsgewicht nach Land) oder das Ergebnis einer ausgefeilten statistischen Analyse (z. B. die Clusterung von Daten in einem höherdimensionalen Raum).
In ihrem unbearbeiteten Zustand können wir uns diese Daten als eine nebulöse Wolke aus Zahlen oder Kategorien vorstellen. Alle Muster oder Zusammenhänge sind völlig unklar. Man vergisst leicht, dass es sich bei der einfachen Tabellenkalkulation(Abbildung I-3 a) um eine Datenvisualisierung handelt - die Anordnung der Daten in Zeilen- und Spaltenform ist ein Versuch, die Daten zu bändigen, ihre Bearbeitung zu erleichtern und Diskrepanzen hervorzuheben (z. B. bei der versicherungsmathematischen Buchführung). Natürlich sind die meisten Menschen nicht in der Lage, Muster in Zahlenreihen zu erkennen. Deshalb wurden zugänglichere, visuelle Formen entwickelt, um unseren visuellen Kortex anzusprechen, den wichtigsten menschlichen Kanal für Informationen über die Welt. So entstanden das Balkendiagramm, das Kreisdiagramm6 und das Liniendiagramm. Es wurden noch phantasievollere Methoden entwickelt, um statistische Daten in eine leichter zugängliche Form zu bringen. Eine der berühmtesten ist Charles Joseph Minards Visualisierung von Napoleons katastrophalem Russlandfeldzug von 1812(Abbildung I-3 b).
Der hellere hellbraune Strom in Abbildung I-3 b zeigt den Vormarsch von Napoleons Armee auf Moskau; die schwarze Linie zeigt den Rückzug. Die Dicke des Stroms zeigt die Größe von Napoleons Armee, die mit zunehmenden Verlusten immer kleiner wurde. Die Temperaturtabelle unten zeigt die Temperatur an den Orten entlang des Weges an. Beachte die elegante Art und Weise, in der Minard mehrdimensionale Daten (Opferstatistiken, geografische Lage und Temperatur) kombiniert hat, um einen Eindruck von dem Gemetzel zu vermitteln, der auf andere Weise nur schwer zu erfassen wäre (stell dir vor, du versuchst, von einer Tabelle mit den Opfern zu einer Liste mit den Orten zu springen und die notwendigen Verbindungen herzustellen). Ich würde behaupten, dass das Hauptproblem moderner interaktiver Dataviz genau dasselbe ist wie das von Minard: Wie kann man über herkömmliche eindimensionale Balkendiagramme (die für viele Dinge perfekt geeignet sind) hinausgehen und neue Wege entwickeln, um dimensionsübergreifende Muster effektiv zu vermitteln?
Bis vor kurzem unterschieden sich unsere Erfahrungen mit Diagrammen nicht wesentlich von denen des Publikums von Charles Joseph Minard. Sie waren vorgerendert und träge und zeigten ein Spiegelbild der Daten, hoffentlich ein wichtiges und aufschlussreiches, aber dennoch unter der vollständigen Kontrolle des Autors. In diesem Sinne war der Ersatz echter Tintenpunkte durch Pixel auf dem Computerbildschirm nur eine Veränderung des Verteilungsmaßstabs.
Mit dem Sprung ins Internet wurde Zeitungspapier durch Pixel ersetzt, wobei die Visualisierung immer noch nicht anklickbar und statisch war. In letzter Zeit hat die Kombination aus einigen leistungsstarken Visualisierungsbibliotheken (allen voran D3) und einer massiven Verbesserung der JavaScript-Leistung den Weg für eine neue Art der Visualisierung geebnet, die leicht zugänglich und dynamisch ist und tatsächlich zum Erforschen und Entdecken anregt. Die klare Unterscheidung zwischen Datenexploration und -präsentation ist verschwommen. Diese neue Art der Datenvisualisierung steht im Mittelpunkt dieses Buches und ist der Grund, warum Datenvisualisierung für das Web derzeit ein so spannender Bereich ist. Die Menschen versuchen, neue Wege zu finden, um Daten zu visualisieren und sie für den Endverbraucher zugänglicher und nützlicher zu machen. Das ist nichts weniger als eine Revolution.
Zusammenfassung
Datenvisualisierung im Web ist ein aufregender Ort, denn die Innovationen im Bereich der interaktiven Visualisierung nehmen rasant zu, und viele (wenn nicht sogar die meisten) werden mit D3 entwickelt. Da JavaScript die einzige browserbasierte Sprache ist, werden die coolen Visualisierungen zwangsläufig in dieser Sprache kodiert (oder in sie umgewandelt). Aber JavaScript fehlt es an den Werkzeugen oder der Umgebung, die für das weniger dramatische, aber ebenso wichtige Element des modernen Dataviz erforderlich sind: die Aggregation, Aufbereitung und Verarbeitung der Daten. Hier hat Python die Nase vorn, denn es ist eine universelle, prägnante und gut lesbare Programmiersprache, die Zugang zu einer wachsenden Zahl erstklassiger Datenverarbeitungswerkzeuge bietet. Viele dieser Tools nutzen die Leistungsfähigkeit sehr schneller Low-Level-Bibliotheken, die die Datenverarbeitung in Python nicht nur schnell, sondern auch einfach machen.
Dieses Buch stellt einige dieser schwergewichtigen Tools sowie eine Vielzahl anderer kleinerer, aber ebenso wichtiger Tools vor. Es zeigt auch, wie Python und JavaScript zusammen den besten Dataviz-Stack für alle darstellen, die ihre Visualisierungen ins Internet stellen wollen.
Als Nächstes folgt der erste Teil des Buches, in dem die für die Toolchain erforderlichen Vorkenntnisse vermittelt werden. Du kannst ihn jetzt durcharbeiten oder zu Teil II und dem Beginn der Toolchain übergehen und bei Bedarf darauf zurückgreifen.
Empfohlene Bücher
Hier sind ein paar wichtige Bücher zur Datenvisualisierung, die dir Appetit machen und die Bandbreite von interaktiven Dashboards bis hin zu schönen und aufschlussreichen Infografiken abdecken.
-
Bertin, Jacques. Semiologie der Grafik: Diagramme, Netzwerke, Karten. Esri Press, 2010.
-
Kairo, Alberto. Die funktionale Kunst. New Riders, 2012.
-
Few, Stephen. Information Dashboard Design: Displaying Data for At-a-Glance Monitoring, 2nd Ed. Analytics Press, 2013.
-
Rosenberg, Daniel und Anthony Grafton. Cartographies of Time: A History of the Timeline. Princeton Architectural Press, 2012.
-
Tufte, Edward. The Visual Display of Quantitative Information, 2. Graphics Press, 2001.
-
Wexler, Steve. The Big Book of Dashboards. Wiley, 2017.
-
Wilke, Claus. Fundamentals of Data Visualization. O'Reilly, 2019.(Kostenlose Online-Version.)
1 Auf der Website von Benchmarks Game findest du einen ziemlich krassen Vergleich.
2 Web Scraping ist eine Computersoftwaretechnik, mit der Informationen aus Webseiten extrahiert werden.
3 Die Controller von Scrapy werden Spider genannt.
4 Die wissenschaftliche Python-Bibliothek, Teil des NumPy-Ökosystems.
5 REST ist die Abkürzung für Representational State Transfer, den vorherrschenden Stil für HTTP-basierte Web-APIs und wird häufig empfohlen.
6 William Playfairs Statistisches Brevier von 1801 hat die zweifelhafte Ehre, das Tortendiagramm zu entwickeln.
Get Datenvisualisierung mit Python und JavaScript, 2. now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.