(Cependant, le serveur Beamer est requis pour l'exécution réelle, reportez-vous donc à la procédure ci-dessous.)
Dans Partie 1, un exemple concret de création d'un widget JS personnalisé intégré avec Jupyter et Beaker Notebook Je vous ai présenté. Cette fois, je voudrais jeter un oeil à la procédure pour utiliser réellement Beamer.
Dans la plupart des cas, "plain Python / R / JS" est rarement la voie à suivre. Par exemple, lors de la préparation des données, vous voudrez souvent utiliser pandas, et vous voudrez souvent dessiner avec matplotlib. __ Les applications de type bloc-notes permettent de conserver le processus de travail, mais il n'est pas possible d'enregistrer l'environnement dans lequel le travail a été effectué __.
C'est donc une technologie de conteneur telle que Docker qui peut encore améliorer la reproductibilité en l'utilisant en combinaison avec une application de type notebook. Comme mentionné ci-dessus, le problème avec le travail de visualisation / analyse en utilisation multilingue est qu'il est difficile de garder une trace du type d'environnement dans lequel le travail a été effectué. Bien sûr, il existe une main appelée image de machine virtuelle, mais ce genre de chose peut être enregistré sous la forme d'un environnement de conteneur pour un ordinateur portable, et il est possible de créer facilement un nouvel environnement de travail en les héritant. La compatibilité entre le travail et Docker est bonne pour la situation.
Le projet Beaker Notebook utilise également les langages pris en charge tels que Python, Node.js, R et Julia immédiatement l'image Docker est disponible .. Cette fois, nous allons travailler sur l'extension de cette image. Étant donné que ce thème n'apprend pas Docker, j'omettrai les détails sur Docker, mais après la sortie de Docker Toolbox, même ceux qui n'ont presque aucune connaissance préalable Il est devenu assez facile à utiliser, alors essayez-le.
L'image sur la page officielle est fournie avec un ensemble de langages de programmation à l'avance, mais ajoutons un package supplémentaire ici. En gros, il suffit d'appeler la commande requise pour l'installation avec `` RUN```.
Dockerfile à utiliser cette fois
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
Dans cet exemple, igraph, qui est souvent utilisé pour l'analyse de graphes en langage R, NetworkX, qui est également utilisé en Python, et J'ai installé py2cytoscape, qui comprend un utilitaire de conversion de données vers Cytoscape.js.
Beaker, comme Jupyter, gère les blocs-notes sous forme de fichiers au format JSON. Pour cette raison, il est très pratique de placer les fichiers Docker et les blocs-notes sur votre système de fichiers local et d'exécuter le conteneur avec eux montés.
Construire l'image
docker build -t keiono/beaker .
Lancer l'image
docker run -p 8800:8800 -v $PWD:/home/beaker/notebooks -t keiono/beaker
Le serveur de notebook fonctionnera maintenant avec le répertoire actuel monté dans le conteneur.
Après cela, le mot de passe de connexion sera affiché, alors utilisez-le pour accéder via https. Si l'hôte Docker est `` 192.168.99.100 '', vous serez invité à entrer le mot de passe lorsque vous accédez à l'adresse suivante avec un navigateur, alors entrez-le affiché sur le terminal.
https://192.168.99.100:8800
Le Dockerfile utilisé dans cet exemple se trouve également dans here, vous pouvez donc ajouter librement des commandes après avoir utilisé la fourche pour créer l'environnement requis pour votre travail. Veuillez remodeler.
Ouvrez l'exemple de bloc-notes (graph-final.bkr) dans le Référentiel ici.
Faites ceci. La méthode d'exécution de la cellule est la même que Jupyter, CTR + Return. Si vous l'exécutez dans l'ordre, vous verrez la dernière cellule ressembler à ceci:
Cela signifie que la cellule de visualisation réelle est en cours d'exécution, donc si vous remontez d'une cellule, vous devriez voir quelque chose comme ça.
Si vous cliquez sur un nœud dans celui-ci, l'affichage devrait changer pour ne révéler que ceux qui sont directement connectés à ce nœud.
Cette cellule interactive a été créée sur un ordinateur portable avec Cytoscape.js intégré. Dans cet exemple, nous avons créé une cellule de rendu réseau personnalisée, mais vous pouvez en fait utiliser n'importe quoi. D3.js est préparé depuis le début, vous pouvez donc commencer à écrire du code dans les cellules JavaScript soudainement.
À partir de maintenant, regardons de plus près le processus réel.
Dans cet exemple, les données sont échangées entre trois langages, R, Python3 et JavaScript, pour mettre en valeur la fonctionnalité principale de Beamer, Autotranslation. C'est une caractéristique de Beamer, qui permet un échange direct de données entre __ plusieurs langues. __
Dans cet exemple, R est utilisé dans la première cellule pour charger la liste d'arêtes dans le bloc de données.
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)
Vous pouvez trouver une notation inconnue sur la dernière ligne, mais il s'agit de la traduction automatique de Beamer. En bref, en passant des objets et des valeurs de chaque langue à cet objet bécher exposé globalement, il est automatiquement traduit en JSON et des données peuvent être échangées entre chaque cellule.
Si vous souhaitez accéder à ces données à partir de Python, vous pouvez utiliser le DataFrame converti automatiquement de pandas.
R DataFrame → Pandas DataFrame → NetworkX Graph → Cytoscape.js JSON
df2 = beaker.df1 #Cela seul le convertira automatiquement en Pandas DF
df2[["source", "target"]] = df2[["source", "target"]].astype('str')
#Convertir cette trame de données en un objet NetworkX
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 #Enfin, enregistrez à nouveau le graphique avec la fréquence, etc.
# Save range
beaker.net1_deg_range = (min(deg.values()), max(deg.values()))
Dans la dernière partie, un utilitaire que j'ai créé précédemment transforme un objet NetworkX en une forme qui peut être rendue avec Cytoscape.js. Vous disposez désormais de données pouvant être utilisées pour la visualisation.
Une fois que vous avez les données, créez une cellule en HTML pour la dessiner. Cela dit, il devrait généralement s'agir d'un CSS simple et d'un simple qui ne contient que les balises que vous souhaitez dessiner:
<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>
À ce stade, tout ce que vous avez à faire est de visualiser les données par essais et erreurs. Les détails de Cytoscape.js sortent du cadre de ce sujet, je n'entrerai donc pas trop dans les détails, mais le point est ici:
elements: beaker.net1["elements"]
La version convertie au format Cytoscape.js à l'aide de Python est directement importée via l'objet bécher. Avec cela, même si vous souhaitez inclure de nouvelles données dans la visualisation, vous pouvez retraiter les données dans la cellule Python ou R précédente, revenir à la cellule JS telle quelle et continuer à coder la partie de visualisation à nouveau. Je vais. C'est quelque chose que Jupyter ne peut pas faire pour le moment, et je pense que c'est le plus grand avantage de Beaker.
En utilisant Docker et Bearker Notebook de cette manière, il est possible d'enregistrer tout, du traitement des données à la visualisation sous une forme qui peut être reproduite dans un bloc-notes tout en utilisant plusieurs langues. Si vous le créez dans un navigateur et un éditeur, vous devez souvent modifier les données dans une autre application, mais avec cela, vous pouvez tout faire avec juste une note.
Il existe encore peu d'exemples d'utilisation, mais si vous souhaitez utiliser plusieurs langues ou si vous souhaitez visualiser avec des composants JS compliqués, veuillez l'utiliser.
Recommended Posts