[PYTHON] Verwenden Sie Anwendungen vom Typ Notebook, um benutzerdefinierte Visualisierungen zu entwickeln (Teil 1).

Dieser Artikel ist ein Beitrag zu Data Visualization Advent Calendar 2015.

Einführung

Es gibt so viele verschiedene Tools für die Datenvisualisierung, dass die Auswahl schwierig ist. Neben Anwendungen wie Excel und Tableau stehen auch Toolkits wie D3 zum Erstellen benutzerdefinierter Visualisierungen für Einzelpersonen als Open-Source-Software zur Verfügung. Es gibt keine "Dies ist die richtige Antwort" bei der Auswahl eines Werkzeugs, und im Grunde sollten Sie eines auswählen, das je nach Ihren Fähigkeiten und Ihrem Datentyp einfach zu verwenden ist. Da dies jedoch ein Ort für Programmierer ist, konzentrieren wir uns auf die Visualisierung, die durch Schreiben von Code erfolgt. In diesem Artikel werden nützliche Tools für die Programmiervisualisierung vorgestellt, z. B. Jupyter Notebook und Beaker Notebook. __ Unter anderem werde ich mich auf den Teil konzentrieren, wie eine solche Umgebung verwendet wird, wenn Sie selbst JavaScript-Code schreiben und eine benutzerdefinierte Visualisierung erstellen. __ __

Visualisierungsworkflow

Unter den verschiedenen Visualisierungsaufgaben sind die Aufgaben beim Umgang mit relativ kleinen Daten wie folgt.

  1. Datenerfassung
  2. Verarbeitung in einen maschinenlesbaren Zustand
  3. Analyse
  4. Visualisierung
  5. Prüfung der Ergebnisse
  6. Weitere Analyse und Visualisierung nach Bedarf (zurück zu Nr. 4)

Sie sollten in einer Schleife wie dieser arbeiten. Das Folgende ist eine Überprüfung dieser Schritte aus einer Werkzeugperspektive.

Arbeit Werkzeug
Datensammlung Analoge Methoden wie Papier- und Digitalkameras, experimentelle Geräte, Programme wie Crawler(Für Daten im Web)
Verarbeitung in einen maschinenlesbaren Zustand(Reinigung) Python/R/Perl/Node.js/Datenverarbeitungsskripte wie awk
Analyse Python/R向けの統計Analyseパッケージ
Visualisierung Einzigartiger Zeichencode von JavaScript, Python/RのVisualisierungライブラリ

Natürlich ist es möglich, alles in einer Programmiersprache zu erledigen, aber ich denke, dass es oft notwendig ist, den Bereinigungs- und Analyseteil und den eigentlichen Zeichnungsteil in verschiedenen Sprachen auszuführen, insbesondere beim Erstellen einer benutzerdefinierten Visualisierung. .. Wenn Sie mehrere Sprachen und Tools wie dieses verwenden müssen, können Sie dies nur mit einem Texteditor, einem Terminal und einem Browser tun, um die Ergebnisse zu überprüfen. Für explorative Visualisierungsarbeiten müssen Sie jedoch auch jeden Schritt wiederholen. Das Problem ist, dass es schwierig ist, sich ein vollständiges Bild von der Arbeit zu machen.

Ein sehr nützlicher Fall in diesem Fall ist eine Anwendung vom Typ Notebook. Ursprünglich eine Software, die von Experten wie Mathematica [Experimental Notes] verwendet wurde (https://ja.wikipedia.org/wiki/%E5%AE%9F%E9%A8%93%E3%83%8E%E3%83] Es ist ein Konzept, das in einer Position wie der digitalen Version von% BC% E3% 83% 88 erstellt wurde. Für Datenanalysten ist es jedoch sehr praktisch, Code mit lesbaren Dokumenten, Visualisierungsergebnissen usw. zu mischen. Heutzutage ist es nicht nur in der Wissenschaft, sondern auch im Bereich der Datenanalyse weit verbreitet.

Typische Notebook-Anwendung

Jupyter Notebook

main-logo.png

Ich denke, es ist das berühmteste Open Source. Ursprünglich eine Anwendung mit dem Namen IPython Notebook für Python, hat sie vor einiger Zeit ihre Meinung geändert und wurde in einen Notebook-Anwendungsteil und einen Kernel-Teil aufgeteilt, der den eigentlichen Code ausführt, und jetzt Python, R, Julia Es unterstützt über 40 Programmiersprachen einschließlich.

Es hat eine sehr hohe Affinität zur ursprünglich unterstützten Sprache Python, und Visualisierungen wie die bekannte Bibliothek matplotlib werden ohne besondere Maßnahmen unterstützt. Aber was ist, wenn Sie Ihre eigenen Visualisierungen wie D3.js mit JavaScript entwickeln möchten?

Erstellen Sie mit Jupyter ein benutzerdefiniertes Visualisierungsmodul

スクリーンショット 2015-12-06 18.28.00.png

Dieser Screenshot wird in auf diesem Notizbuch Cytocsape.js verwendet. Dies ist ein gerendertes Netzwerkdiagramm mit dem eingebetteten Visualisierungsmodul unter //js.cytoscape.org/). Auf diese Weise ist es möglich, eine Visualisierungsbibliothek eines Drittanbieters in eine Zelle in einem Notizbuch einzubetten. Die Methode ist jedoch nicht sehr ausgefeilt ...

Wie kann man beliebige Visualisierungen einbetten?

Hier kann ich mit pip basierend auf dem [Prototyp] von @domitory (https://github.com/domitry/cytoscape-ipy) [Python Package](https: //pypi.python) installieren. Werfen wir einen Blick auf die in (org / pypi / py2cytoscape) zusammengefassten Fälle.

1. Bereiten Sie eine HTML-Datei mit Stilen usw. vor.

Bereiten Sie zunächst HTML vor, das eingebettet werden kann. Auch dies ist nicht genau HTML, sondern etwas, das Jupyter Notebook als Vorlage für [jinja2] interpretieren kann (http://jinja.pocoo.org/docs/dev/). In diesem Fall würden Sie die eigentliche Visualisierung für die folgenden Tags einfügen.

<div id="{{uuid}}"></div>
2. Verwenden Sie require.js, um externes JavaScript zu laden

Dies ist auch ein Problem mit dem aktuellen JavaScript, aber da ES5 keinen Mechanismus hat, um externe Module sauber zu handhaben, verwendet IPython Notebook RequireJS, um extern zu arbeiten. Unterstützt das Einbetten von JavaScript.

if (window['cytoscape'] === undefined) {

    //Speicherort der JS-Bibliothek, die von außen gelesen werden soll
    var paths = {
        cytoscape: 'http://cytoscape.github.io/cytoscape.js/api/cytoscape.js-latest/cytoscape.min'
    };

    require.config({
        paths: paths
    });

    require(['cytoscape'], function (cytoscape) {
        console.log('Loading Cytoscape.js Module...');
        window['cytoscape'] = cytoscape;

        var event = document.createEvent("HTMLEvents");
        event.initEvent("load_cytoscape", true, false);
        window.dispatchEvent(event);
    });
}
3. Schreiben Sie Python-Code, um Daten an ihn zu übergeben

Schreiben Sie abschließend den Code, um die Daten von der Python-Seite an die vorbereiteten JS- und HTML-Vorlagen zu übergeben. Sie benötigen den Code, um die Vorlage zu rendern, nachdem Sie die Daten auf der Python-Seite in einer Form übergeben haben, die der JavaScript-Code interpretieren kann.

cyjs_widget = template.render(
  nodes=json.dumps(nodes),
  edges=json.dumps(edges),
  background=background,
  uuid="cy" + str(uuid.uuid4()),
  widget_width=str(width),
  widget_height=str(height),
  layout=layout_algorithm,
  style_json=json.dumps(style)
)

display(HTML(cyjs_widget))

Auf diese Weise hatte das aktuelle Jupyter-Notizbuch ursprünglich keinen Zweck, eine Mischung aus mehreren Sprachen oder eine benutzerdefinierte Visualisierung vor Ort zu erstellen. Laden Sie daher eine externe JS-Bibliothek und erstellen Sie eine Visualisierung durch Ausprobieren in der Zelle. Ich denke, es ist besser für diejenigen geeignet, die ein vorhandenes Visualisierungsmodul haben und es in einer Zelle verwenden möchten, anstatt zu gehen.

Derzeit ist das Jupyter-Projekt dabei, seinen Umfang durch den Erwerb großer Zuschüsse von verschiedenen Sponsoren zu erweitern. Daher ist es wahrscheinlich, dass der Expansionsmechanismus in diesem Bereich in Zukunft verbessert wird.

Beaker Notebook

スクリーンショット 2015-12-06 23.37.22.png

Notebook für Polyglot-Datenanalyseumgebung

Jupyter / IPython Notebook ist ein sehr leistungsfähiges Tool, aber derzeit gibt es keine Möglichkeit, mehrere Sprachen in einem Notebook zu mischen oder Daten zwischen mehreren Sprachen auszutauschen. Da es keinen Mechanismus gibt, mit dem JS für beliebiges HTML einfach ausgeführt werden kann, ist die obige Arbeit erforderlich, wenn ein anderes eindeutiges Visualisierungsmodul als das vorbereitete Visualisierungsmodul (matplotlib, Bokeh usw.) verwendet wird. Wird sein. Beamer ist eine Anwendung vom Typ Notebook, die über einen Mechanismus zur Lösung dieser Probleme verfügt.

Unterschied zu Jupyter

Der größte Unterschied zu Jupyter besteht darin, dass __Jupyter die Kernel, die mit jedem Notebook verbunden sind, begrenzt und in Form einer Sprache pro Notebook verwaltet, während dies in Beaker Zelle für Zelle verwaltet wird. __. Daher können Sie auf demselben Notebook Folgendes ausführen:

Insbesondere wird standardmäßig ein Mechanismus bereitgestellt, der den Datenaustausch zwischen Zellen unter Verwendung eines gemeinsamen Objekts namens "Becher" ermöglicht. Zum Beispiel der in Python zugewiesene Wert,

beaker.mydata = "My sample data"

Zugriff in R-Sprache

beaker::get('mydata')

Sie können es einfach mit JavaScript verwenden.

var myJsData = beaker.mydata + " updated by JS";

Auf diese Weise können Sie CSV mit Pandas of Python lesen, in ein Dictionary-Objekt konvertieren, wie über ein Becherobjekt an eine JavaScript-Zelle übergeben und zum Zeichnen usw. mit nur Standardfunktionen verwenden.

Im Folgenden finden Sie ein Beispiel für die Vorbereitung von Daten in Python und das Zeichnen in der eingebetteten HTML-Zelle mit JavaScript-Code mithilfe von Cytoscape.js:

スクリーンショット 2015-12-05 17.19.39.png

Auf diese Weise wird diese Anwendung empfohlen, wenn Sie Python für die Verarbeitung von __ Daten und R für die statistische Berechnung verwenden möchten, die Daten jedoch hauptsächlich mit D3.js __ zeichnen möchten. Dies liegt daran, dass alle Schritte in einem Notizbuch ausgeführt werden können.

Zusammenfassung

Dieses Mal haben wir die Einbettung von benutzerdefinierten Modulen in Jupyter und Baker Notebook eingeführt. Im zweiten Teil werden wir uns jedoch mit der tatsächlichen Arbeit mit Beamer befassen.

Recommended Posts

Verwenden Sie Anwendungen vom Typ Notebook, um benutzerdefinierte Visualisierungen zu entwickeln (Teil 1).
Verwenden Sie Notebook-Anwendungen, um benutzerdefinierte Visualisierungen zu entwickeln. 2
Verwendung des Entwicklernetzwerks von cybozu.com (Teil 2)
Verwendung von Tweepy ~ Teil 1 ~ [Getting Tweet]
Verwendung von Tweepy ~ Teil 2 ~ [Folgen, Gefällt mir usw.]