(Der Beamer-Server ist jedoch für die tatsächliche Ausführung erforderlich. Befolgen Sie daher das nachstehende Verfahren.)
In Teil 1 ein konkretes Beispiel für die Erstellung eines eingebetteten benutzerdefinierten JS-Widgets mit Jupyter und Beaker Notebook. Ich habe dich vorgestellt. Dieses Mal möchte ich einen Blick auf das Verfahren zur tatsächlichen Verwendung von Beamer werfen.
In den meisten Fällen ist "einfaches Python / R / JS" selten der richtige Weg. Wenn Sie beispielsweise Daten vorbereiten, möchten Sie häufig pandas verwenden und häufig mit matplotlib zeichnen. __ Anwendungen vom Typ Notebook eignen sich gut, um den Arbeitsprozess aufrechtzuerhalten, es ist jedoch nicht möglich, die Umgebung aufzuzeichnen, in der die Arbeit ausgeführt wurde __.
Daher ist es eine Containertechnologie wie Docker, die die Reproduzierbarkeit weiter verbessern kann, indem sie in Kombination mit einer Anwendung vom Typ Notebook verwendet wird. Wie oben erwähnt, besteht das Problem bei der mehrsprachigen Visualisierungs- / Analysearbeit darin, dass es schwierig ist, Aufzeichnungen darüber zu führen, in welcher Umgebung die Arbeit ausgeführt wurde. Natürlich gibt es eine Hand, die als Image einer virtuellen Maschine bezeichnet wird, aber so etwas kann in Form einer Containerumgebung für ein Notebook aufgezeichnet werden, und es ist möglich, einfach eine neue Arbeitsumgebung zu erstellen, indem man sie erbt. Die Kompatibilität zwischen Arbeit und Docker ist gut für die Situation.
Das Beaker Notebook-Projekt verwendet auch sofort die unterstützten Sprachen wie Python, Node.js, R und Julia Docker-Image ist verfügbar. .. Dieses Mal werden wir daran arbeiten, dieses Bild zu erweitern. Da sich dieses Thema nicht mit Docker befasst, werde ich die Details zu Docker weglassen, aber nach der Veröffentlichung von Docker Toolbox auch diejenigen, die fast keine Vorkenntnisse haben Es ist recht einfach zu bedienen, also versuchen Sie es bitte.
Das Bild auf der offiziellen Seite enthält im Voraus eine Reihe von Programmiersprachen. Fügen wir hier jedoch ein zusätzliches Paket hinzu. Grundsätzlich müssen Sie nur die für die Installation erforderlichen Befehle mit `` `RUN``` aufrufen.
Dockerfile, die dieses Mal verwendet werden soll
FROM beakernotebook/beaker
# Add Extra library for data analysis
# R Libraries
RUN Rscript -e "install.packages('igraph',,'http://cran.us.r-project.org')"
# Python 3 libraries
RUN /home/beaker/py3k/bin/pip install requests networkx py2cytoscape
# Add a new directory for user's notebooks
RUN mkdir /home/beaker/notebooks
In diesem Beispiel igraph, das häufig für die Diagrammanalyse in der R-Sprache verwendet wird, NetworkX, das auch in Python verwendet wird, und Ich habe py2cytoscape installiert, das ein Datenkonvertierungsprogramm für Cytoscape.js enthält.
Beaker verwaltet Notebooks wie Jupyter als JSON-formatierte Dateien. Aus diesem Grund ist es sehr praktisch, Docker-Dateien und -Notizbücher in Ihrem lokalen Dateisystem abzulegen und den Container mit diesen zu starten.
Image erstellen
docker build -t keiono/beaker .
Bild ausführen
docker run -p 8800:8800 -v $PWD:/home/beaker/notebooks -t keiono/beaker
Der Notebook-Server wird jetzt mit dem aktuellen Verzeichnis ausgeführt, das im Container bereitgestellt ist.
Danach wird das Anmeldekennwort angezeigt. Verwenden Sie es daher, um über https darauf zuzugreifen. Wenn der Docker-Host "192.168.99.100" lautet, werden Sie aufgefordert, das Kennwort einzugeben, wenn Sie mit einem Browser auf die folgende Adresse zugreifen. Geben Sie es daher auf dem Terminal ein.
https://192.168.99.100:8800
Die in diesem Beispiel verwendete Docker-Datei befindet sich auch in hier, sodass Sie nach dem Verzweigen frei Befehle hinzufügen können, um die für Ihre Arbeit erforderliche Umgebung zu erstellen. Bitte umbauen.
Öffnen Sie das Beispielnotizbuch (graph-final.bkr) in diesem Repository.
Mach das. Die Zellenausführungsmethode ist dieselbe wie bei Jupyter, CTR + Return. Wenn Sie es der Reihe nach ausführen, sieht die letzte Zelle folgendermaßen aus:
Dies bedeutet, dass die eigentliche Visualisierungszelle ausgeführt wird. Wenn Sie also eine Zelle zurücksetzen, sollten Sie so etwas sehen.
Wenn Sie auf einen Knoten darin klicken, sollte sich die Anzeige ändern und nur diejenigen anzeigen, die direkt mit diesem Knoten verbunden sind.
Diese interaktive Zelle wurde auf einem Notizbuch mit eingebettetem Cytoscape.js erstellt. In diesem Beispiel haben wir eine benutzerdefinierte Netzwerk-Rendering-Zelle erstellt, aber Sie können tatsächlich alles verwenden. D3.js ist von Anfang an vorbereitet, sodass Sie plötzlich Code in JavaScript-Zellen schreiben können.
Schauen wir uns von nun an den tatsächlichen Prozess genauer an.
In diesem Beispiel werden Daten zwischen den drei Sprachen R, Python3 und JavaScript ausgetauscht, um das Hauptmerkmal von Beamer, Autotranslation, hervorzuheben. Dies ist ein charakteristisches Merkmal von Beamer, das den direkten Datenaustausch zwischen __ mehreren Sprachen ermöglicht. __ __
In diesem Beispiel wird R in der ersten Zelle verwendet, um die Kantenliste in den Datenrahmen zu laden.
df1 <- read.table('/home/beaker/notebooks/fbnet.edges', header=FALSE, sep=' ')
colnames(df1) <- c('source', 'target')
# Save it as a shared beaker object
beaker::set('df1', df1)
Möglicherweise finden Sie in der letzten Zeile eine unbekannte Notation, aber hier geht es nur um die automatische Übersetzung von Beamer. Kurz gesagt, durch Übergeben von Objekten und Werten aus jeder Sprache an dieses global exponierte Becherobjekt wird es automatisch in JSON übersetzt, und Daten können zwischen jeder Zelle ausgetauscht werden.
Wenn Sie über Python auf diese Daten zugreifen, können Sie den automatisch konvertierten DataFrame von Pandas verwenden.
R DataFrame → Pandas DataFrame → NetworkX-Diagramm → Cytoscape.js JSON
df2 = beaker.df1 #Dies allein konvertiert es automatisch in Pandas DF
df2[["source", "target"]] = df2[["source", "target"]].astype('str')
#Konvertieren Sie diesen Datenrahmen in ein NetworkX-Objekt
g2 = nx.from_pandas_dataframe(df2, "source", "target")
# Calculate Betweenness Centrarity of the graph
cent_1 = nx.betweenness_centrality(g2)
deg = nx.degree(g2)
nx.set_node_attributes(g2, 'b-cent', cent_1)
nx.set_node_attributes(g2, 'deg', deg)
# Convert networkX data into Cytoscape.js JSON
net1 = nxutil.from_networkx(g2)
# Save it into Beaker object
beaker.net1 = net1 #Registrieren Sie abschließend den Graphen einschließlich der Frequenz usw. erneut
# Save range
beaker.net1_deg_range = (min(deg.values()), max(deg.values()))
Im letzten Teil wandelt ein zuvor erstelltes Dienstprogramm ein NetworkX-Objekt in ein Formular um, das mit Cytoscape.js gerendert werden kann. Jetzt haben Sie Daten, die zur Visualisierung verwendet werden können.
Sobald Sie die Daten haben, erstellen Sie eine Zelle in HTML, um sie zu zeichnen. Das heißt, es sollte normalerweise ein einfaches CSS sein und ein einfaches, das nur die Tags enthält, die Sie zeichnen möchten:
<style>
#cyjs {
width: 100%;
height: 600px;
background-color: #000000;
}
h1 {
color: #555555;
}
</style>
<h1>Anonymized Facebook Network Data from Stanford Network Analysis Project</h1>
<div id="cyjs"></div>
<h3>(Cytoscape.js Demo)</h3>
An diesem Punkt müssen Sie lediglich die Daten durch Ausprobieren visualisieren. Die Details von Cytoscape.js sind nicht Gegenstand dieses Themas, daher werde ich nicht zu sehr ins Detail gehen, aber der Punkt ist hier:
elements: beaker.net1["elements"]
Die mit Python in das Cytoscape.js-Format konvertierte Version wird direkt über das Becherobjekt importiert. Selbst wenn Sie neue Daten in die Visualisierung aufnehmen möchten, können Sie damit die Daten in der vorherigen Python- oder R-Zelle erneut verarbeiten, zur aktuellen JS-Zelle zurückkehren und den Visualisierungsteil erneut codieren. Ich werde. Dies ist ein Teil, der mit dem aktuellen Jupyter nicht möglich ist, und ich denke, es ist der größte Vorteil von Beamer.
Durch die Verwendung von Docker und Baker Notebook auf diese Weise ist es möglich, alles von der Datenverarbeitung bis zur Visualisierung in einer Form aufzuzeichnen, die in einem Notebook unter Verwendung mehrerer Sprachen reproduziert werden kann. Wenn Sie es in einem Browser und einem Editor erstellen, müssen Sie häufig die Daten in einer anderen Anwendung ändern. Mit dieser Funktion können Sie jedoch alles mit nur einer Notiz erledigen.
Es gibt noch wenige Anwendungsbeispiele. Wenn Sie jedoch mehrere Sprachen verwenden oder mit komplizierten JS-Komponenten visualisieren möchten, verwenden Sie diese bitte.
Recommended Posts