Lier Python et JavaScript avec le notebook Jupyter

introduction

Avec jupyter notebook, une série de flux allant de l'analyse des données à la visualisation est possible avec seulement python, mais si vous regardez l'expressivité et l'interactivité élevées de D3.js, la visualisation se fait avec JavaScript. Je pense qu'il y aura de nombreux cas. Par conséquent, je voudrais vous présenter comment préparer les données en python et les transmettre à JavaScript.

Dans l'explication suivante, nous utiliserons un package appelé py_d3 qui exécute et affiche le code de D3.js sur le notebook jupyter, mais il n'est pas limité à D3.js et est arbitraire. JavaScript peut être exécuté. [^ 1]

Configuration de py_d3

pip install py_d3

Vous pouvez l'installer avec. Pour utiliser la fonction, écrivez comme suit au début du cahier.

%load_ext py_d3

Ensuite, si vous écrivez «%% d3» au début de la cellule, le code de cette cellule sera interprété comme HTML et JavaScript.

Pour plus de détails, veuillez consulter cet article. [^ 2]

Préparation

La coopération utilise la fonction du package IPython.display.HTML, mais il est difficile à utiliser tel quel, donc je vais définir la fonction JavaScript suivante et l'envelopper. Exécutez-le dans la cellule immédiatement après % load_ext py_d3```. Il est bon de s'inscrire dans des extraits de code, etc.

%%d3
<script>
function pyexec(command) {
    return new Promise(res => {
        IPython.notebook.kernel.execute(command,
            {iopub: {
                output: 
                    out => res(JSON.parse(eval(out.content.data["text/plain"])))
            }}, 
            {silent: false});
    });
}
</script>

La coopération

Passez le code python à exécuter sous forme de chaîne à la fonction pyexec ci-dessus. Du côté python, veuillez renvoyer la valeur au format json.

Par exemple, définissez la fonction côté python comme suit.

import json
import numpy as np
def get_data(count):
    return json.dumps((np.random.rand(count)*10).tolist())

Le côté JavaScript est décrit comme suit. Décrivez le traitement à effectuer après réception des données puis après pyexec. Cette fois, j'exécute un exemple simple du didacticiel D3.js.

%%d3
<g></g>
<style>
element {
    height: 25px;
}
div.bar {
    display: inline-block;
    width: 20px;
    height: 75px;
    margin-right: 2px;
    background-color: teal;
}
</style>

<script>
pyexec("get_data(7)")
.then(dataset => {
    d3.select("g").selectAll("div")
    .data(dataset)
    .enter()
    .append("div")
    .attr("class", "bar")
    .style("height", function(d) {
        let barHeight = d * 5;
        return barHeight + "px";
    });
});
</script>

Ensuite, le graphique suivant sera dessiné sur le cahier.

スクリーンショット 2017-06-12 18.46.40.png

Je publierai le notebook créé cette fois → http://nbviewer.jupyter.org/gist/ssugiyama/29b586b25dc63730eb67ee6c1daefac8

référence

note de bas de page

[^ 1]: Il est possible de créer un lien avec le package standard IPython.display.HTML sans utiliser py_d3, mais comme il est nécessaire d'écrire du code JavaScript et HTML dans la chaîne de caractères et que l'échappement est gênant, c'est dans la cellule. Nous recommandons py_d3, qui vous permet d'écrire directement du JavaScript et du HTML.

[^ 2]: Cependant, la méthode de chargement de py_d3 a été modifiée par rapport à la description de cet article, veuillez donc utiliser % load_ext py_d3.

Recommended Posts

Lier Python et JavaScript avec le notebook Jupyter
3 astuces du notebook Jupyter (Python)
Afficher de manière interactive des courbes algébriques en Python, Jupyter
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Utiliser Cython avec Jupyter Notebook
Jouer avec Jupyter Notebook (IPython Notebook)
[Windows] [Python3] Installer python3 et Jupyter Notebook (anciennement ipython notebook) sous Windows
Essayez d'exécuter Python avec Try Jupyter
python avec pyenv et venv
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
notebook jupyter dans l'environnement venv python3.8
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Autoriser les connexions externes avec le notebook Jupyter
Formatage avec autopep8 sur le notebook Jupyter
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Paramètres d'extrait de code pour le notebook jupyter python
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Mémo Python Anaconda x Jupyter Notebook
Visualisez l'arbre de décision avec le notebook Jupyter
Faites un son avec le notebook Jupyter
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Générer le notebook Jupyter ".ipynb" en Python
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Jupyter Notebook: 4 trucs et astuces banals
Lire et écrire NetCDF avec Python
Utiliser Markdown avec le notebook Jupyter (avec raccourci)
Ajouter plus de noyaux avec Jupyter Notebook
J'ai joué avec PyQt5 et Python3
Analyse pratique avec Pandas + notebook Jupyter
Bloc-notes Jupyter facile à utiliser (Python3.5)
Lire et écrire du CSV avec Python
Comparez les boucles de tableau Python et JavaScript
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Comment démarrer par lots un programme Python créé avec le notebook Jupyter
Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Différence d'authenticité entre Python et JavaScript
Utiliser nbextensions avec le notebook Jupyter d'Anaconda
Surveiller les pannes de Mojo avec Python et Skype
Fuite de mémoire dans Python Jupyter Lab (Notebook)?
Créer un environnement Jupyter Lab (Python) avec Docker
Modulation et démodulation FM avec Python Partie 3