Visualisation interactive des données avec Bokeh (et Python)

Contenu

introduction

Récemment, Je lisais une vidéo de la conférence SciPy 2015, « Création d'applications de données Python avec Blaze et Bokeh", Récemment tenue à Austin, Texas, EE. UU. Je ne pouvais pas m'empêcher de penser à la puissance que ces deux bibliothèques apportent aux data scientists utilisant Python dans le monde entier.. Dans cet article, Je vais vous présenter le monde des possibilités de visualisation de données à l'aide de Bokeh et pourquoi je pense qu'il s'agit d'une bibliothèque que tous les scientifiques des données devraient apprendre / utiliser.

bokeh_introduction-1496563 La source: bokeh.pydata.org

Qu'est-ce que Bokeh?

Bokeh est une bibliothèque Python pour la visualisation interactive qui cible les navigateurs Web pour le rendu. C'est la principale différence entre Bokeh et les autres bibliothèques d'affichage. Regardez l'instantané ci-dessous, qui explique le flux de processus de la façon dont Bokeh aide à présenter les données à un navigateur Web.

bokeh_intro-1850441La source: Analyse de continuum

Comme tu peux le voir, Bokeh a plusieurs liens linguistiques (Python, R, Lua et Julia). Ces liens produisent un fichier JSON, qui fonctionne comme entrée pour BokehJS (une bibliothèque javascript), qui à son tour présente les données aux navigateurs Web modernes.

Bokeh peut produire un affichage élégant et interactif comme D3.js avec une interactivité haute performance sur des ensembles de données très volumineux ou en streaming. Bokeh peut aider tous ceux qui souhaitent créer rapidement et facilement des graphiques, tableaux de bord de données interactifs et applications.

Qu'est-ce que Bokeh offre à un data scientist comme moi?

J'ai commencé mon parcours en science des données en tant que professionnel de la BI, puis j'ai travaillé sur la modélisation prédictive, science des données et apprentissage automatique. Je me suis principalement appuyé sur des outils tels que QlikView et Tableau pour la visualisation des données et SAS et Python pour l'analyse prédictive et la science des données.. J'avais presque aucune expérience avec JavaScript.

Ensuite, pour toutes mes données ou idées de produits, J'ai dû externaliser le travail ou présenter mes idées via des wire-frames, qui ne sont pas idéales pour construire des prototypes rapides. À présent, Bokeh con, puis-je continuer à travailler dans l'écosystème python, mais je peux quand même créer ces prototypes rapidement.

Avantages du bokeh:

  • Bokeh vous permet de créer des graphiques statistiques complexes rapidement et à l'aide de commandes simples
  • Bokeh vous fournit une sortie dans divers médias comme html, ordinateur portable et serveur
  • Nous pouvons également intégrer l'affichage Bokeh dans l'application flask et django
  • Bokeh peut transformer l'affichage écrit dans d'autres bibliothèques comme matplotlib, marin, ggplot
  • Bokeh a la flexibilité d'appliquer l'interaction, mises en page et différentes options de style d'affichage.

Défis avec Bokeh:

  • Comme pour toute bibliothèque open source à venir, Le bokeh connaît un grand développement. Donc, le code que vous écrivez aujourd'hui peut ne pas être entièrement réutilisable à l'avenir.
  • A relativement moins d'options d'affichage, par rapport à D3.js. Donc, il est peu probable qu'il défie D3.js pour sa couronne dans un avenir proche.

Étant donné les avantages et les défis, il est aujourd'hui idéal pour développer rapidement des prototypes. Cependant, si vous voulez créer quelque chose pour l'environnement de production, D3.js pourrait être votre meilleur choix.

Pour installer Bokeh, suivre les instructions données ici.

Visualisation avec Bokeh

Bokeh offre des fonctionnalités puissantes et flexibles qui confèrent simplicité et personnalisation très avancée. Fournir plusieurs interfaces d'affichage à l'utilisateur comme indiqué ci-dessous:bokeh_interface-7671639

  • Graphique: une haut niveau interface utilisée pour construire des graphiques statistiques complexes si rapidement et de manière simpliste.
  • Graphique: un niveau intermédiaire interface qui se concentre sur la composition visuelle des glyphes.
  • Des modèles: une niveau bas interface qui offre une flexibilité maximale aux développeurs d'applications.

Dans cet article, nous ne verrons que les graphismes et la disposition des deux premières interfaces. Nous discuterons des modèles et autres fonctionnalités avancées de cette bibliothèque dans le prochain article..

Graphique

Comme mentionné précédemment, est une interface de haut niveau utilisée pour présenter des informations sous la forme d'un affichage standard. Ces formulaires incluent box plot, graphique à barres, diagramme de zone, carte de chaleur, diagramme de beignet et bien d'autres. Vous pouvez générer ces graphiques en passant simplement des blocs de données, matrices et dictionnaires.

Regardons la méthodologie commune pour créer un graphique:

  1. Importer la bibliothèque et les fonctions / méthodes
  2. Préparer les données
  3. Définir le mode de sortie (portable, navigateur Web ou serveur)
  4. Créer un graphique avec l'option de style (si c'est nécessaire)
  5. Voir le graphique

Pour mieux comprendre ces étapes, permettez-moi de démontrer ces étapes en utilisant l'exemple ci-dessous:

Exemple graphique 1: créer un graphique à barres et l'afficher dans un navigateur Web à l'aide de Bokeh

Nous suivrons les étapes énumérées ci-dessus pour créer un graphique:

#Importer la bibliothèque
de bokeh.charts importer la barre, fichier de sortie, show #use output_notebook pour le visualiser dans le notebook
# préparer les données (données factices)
données = {"Oui": [1, 2, 3, 4, 5]}
# Sortie vers Line.HTML
fichier de sortie("lignes.html", titre="exemple de tracé de ligne") #mettre output_notebook() pour ordinateur portable
# créer une nouvelle discussion en ligne avec un titre et des étiquettes d'axe
p = barre(Les données, titre="Exemple de graphique en courbes", xlabel="X", ylabel="valeurs", largeur=400, hauteur=400)
# montrer les résultats
spectacle(p)
bar_chart-7356470

Dans le graphique ci-dessus, vous pouvez voir les outils en haut (Zoom, redimensionnement, redémarrer, zoom de rueda) et ces outils vous permettent d'interagir avec le graphique. Vous pouvez également voir les multiples options de graphique (Légende, xlabel, ylabel, xgrid, largeur, élevé et bien d'autres) et divers exemples de graphiques ici.

Exemple de graphique 2: Comparez la distribution de la longueur des sépales et de la longueur des pétales à partir de l'ensemble de données IRIS à l'aide de la boîte à moustaches du cahier

Pour créer cette visualisation, en premier lieu, je vais importer un ensemble de données d'iris à l'aide de la bibliothèque sklearn. Alors, suivez les étapes décrites ci-dessus pour afficher le graphique dans le cahier ipython.

#Ensemble de données IRIS
à partir de sklearn.datasets importer load_iris
importer des pandas au format pd
iris = load_iris()
df=pd.DataFrame(iris.data)
df.columns=['petal_width','petal_length','sepal_width','sepal_length']
#Importer la bibliothèque
de bokeh.charts importer BoxPlot, output_notebook, spectacle
données=df[['petal_length','sepal_length']]
# Sortie vers Notebook
output_notebook()
# créer une nouvelle discussion en ligne avec un titre et des étiquettes d'axe
p = BoxPlot(Les données, largeur=400, hauteur=400)
# montrer les résultats
spectacle(p)

bokeh_box_plot-8049544

Exemple de graphique 3: créer un graphique en courbes sur le serveur bokeh

Avant de tracer la visualisation sur le serveur Bokeh, doit l'exécuter.

Si vous utilisez un package conda, vous pouvez utiliser la commande run serveur de bokeh depuis n'importe quel répertoire à l'aide de la commande. Le reste, python ./bokeh-server La commande devrait fonctionner en général. Pour plus de détails à ce sujet, regarde ce lien « Implémentation du serveur Bokeh".

Il y a plusieurs avantages à tracer l'affichage sur le serveur Bokeh:

  • Les colis peuvent être publiés pour un public plus large
  • Visualisez un grand ensemble de données de manière interactive
  • Transmission de données pour mettre à jour les graphiques automatiquement
  • Tableau de bord et création d'applications

Pour commencer à tracer sur le serveur Bokeh, j'ai exécuté la commande serveur de bokeh pour l'initialiser suivi des commandes utilisées pour l'affichage.

bokeh_server-8085815

à partir de la figure d'importation bokeh.plotting, serveur_sortie, spectacle
serveur_sortie("ligne")
p = chiffre(largeur_intrigue=400, plot_height=400)
# ajouter un rendu de ligne
p.ligne([5, 2, 3, 4, 5], [5, 7, 2, 4, 5], largeur_ligne=2)
spectacle(p)

bokeh_server_visualization-6360568

Graphique

Trace est un niveau intermédiaire interface qui se concentre sur la composition visuelle des glyphes. Ici, créer une visualisation en combinant plusieurs éléments visuels (point, cercles, ligne, patch et bien d'autres) Oui instruments (outil de défilement, Zoom, sauvegarder, réinitialiser et autres).

Graphismes bokeh créés avec le bokeh.traçage L'interface est livrée avec un ensemble d'outils et de styles visuels par défaut. Tracer, suivez les étapes ci-dessous:

  1. Importer la bibliothèque, méthodes ou fonctions
  2. Sélectionnez le mode de sortie (portable, Navigateur Web, serveur)
  3. Activer un chiffre (similaire à matplotlib)
  4. Effectuer les opérations de traçage suivantes, affectera le chiffre généré.
  5. Visualisez-le

Pour mieux comprendre ces étapes, permettez-moi de démontrer ces étapes en utilisant les exemples ci-dessous:

Exemple graphique-1: Créez un carré de dispersion sur le cadre XY du bloc-notes

de bokeh.traçage importer chiffre, output_notebook, spectacle

# sortie vers le bloc-notes
output_notebook()
p = chiffre(largeur_intrigue=400, plot_height=400)
# ajouter un carré avec une taille, Couleur, et alpha
p.carré([2, 5, 6, 4], [2, 3, 2, 1, 2], Taille=20, Couleur="marine")
# montrer les résultats
spectacle(p)

bokeh_scatter-9023945

De la même manière, peut créer divers autres graphiques comme la ligne, cales et arc, ovales, images, patchs et bien d'autres, regarde ça Relier voir divers exemples.

Exemple de tracé-2: Combinez deux visuels dans un seul graphique

à partir de la figure d'importation bokeh.plotting, output_notebook, spectacle
# sortie vers le bloc-notes
output_notebook()
p = chiffre(largeur_intrigue=400, plot_height=400)
# ajouter un carré avec une taille, Couleur, et alpha
p.carré([2, 5, 6, 4], [2, 3, 2, 1, 2], taille=20, couleur="marine")
p.ligne([1, 2, 3, 4, 5], [1, 2, 2, 4, 5], largeur_ligne=2) #ajout d'un tracé linéaire à la figure existante
# montrer les résultats
spectacle(p)

multiple_plots-2934996

Exemple de tracé-3: Ajoutez un outil flottant et des étiquettes d'axe au graphique ci-dessus

à partir de la figure d'importation bokeh.plotting, output_notebook, spectacle
de bokeh.models importer HoverTool, BoxSelectTool #Pour activer les outils
# sortie vers le bloc-notes
output_notebook()
#Ajouter des outils
OUTILS = [BoîteSélection Outil(), HoverTool()]
p = chiffre(largeur_intrigue=400, plot_height=400, outils=OUTILS)
# ajouter un carré avec une taille, Couleur, et alpha
p.carré([2, 5, 6, 4], [2, 3, 2, 1, 2], taille=20, couleur="marine", alpha=0,5)
#Éléments visuels
p.xaxis.axis_label = "Axe X"
p.yaxis.axis_label = "Axe Y"
# montrer les résultats
spectacle(p)

bokeh_tools_visualize-1363299

Pour plus de détails sur les attributs visuels et les outils, regarde ces liens:

Exemple de graphique-4: Carte de l'Inde utilisant les données de latitude et de longitude pour les limites

Noter: J'ai des données de polygone latitude longitude pour les frontières indiennes au format csv. je vais l'utiliser pour tracer.

Ici, nous irons avec le patch, voyons les commandes ci-dessous:

#Importer des bibliothèques
importer des pandas au format pd
à partir de la figure d'importation bokeh.plotting, spectacle, output_notebook
#Importer les coordonnées de latitude et de lanogitude
Inde=pd.read_csv('E:/India.csv')
de l'Inde['ID']
Inde.index=['IN0','IN1','IN2','IN3','IN4','IN5']
#Convertir les valeurs de chaîne en flottant car les coordonnées dans le cadre de données sont des chaînes
pour j dans la plage(0,longueur(Inde)):
 a = Inde['lats'][j]
 Inde['lats'][j] = [flotter(je) pour moi dans un[1:longueur(une)-1].diviser(",")]
pour j dans la plage(0,longueur(Inde)):
 a = Inde['lons'][j]
 Inde['lons'][j] = [flotter(je) pour moi dans un[1:longueur(une)-1].diviser(",")]
# Option de sortie
output_notebook()
# Créez votre intrigue
p = chiffre(plot_height=400, largeur_intrigue=400, barre_outils_location="droit",x_axis_type=Aucun, y_axis_type=Aucun)
p.correctifs(xs=Inde['lons'], ys=Inde['lats'], fill_color="blanche",line_color="le noir", line_width=0.5)
#Visualisez votre graphique
spectacle(p)

Inde-7239691

Remarques finales

Dans cet article, nous analysons la création de visualisations à l'aide de Bokeh et des méthodes pour les présenter dans des cahiers, html et bokeh-server. Nous avons également discuté des méthodes de création d'une visualisation personnalisée à l'aide du traçage., ici, vous pouvez combiner plusieurs visuels pour représenter des informations.

Dans mon prochain article sur Bokeh, Je parlerai de modèles et de fonctionnalités d'affichage plus interactifs. Par exemple, J'ai coordonné les frontières pour chaque pays du monde. À présent, Je veux créer une visualisation pour représenter la carte de chaque pays dans un cycle (boucle). Commencez à dessiner avec une carte de pays et attendez 3 secondes et itération pour tous les pays. Ça a l'air intéressant! Ce n'est pas comme ça?

Avez-vous trouvé cet article utile? Faites-nous part de vos réflexions sur cet article dans la section commentaires ci-dessous..

Si vous aimez ce que vous venez de lire et souhaitez continuer à apprendre sur l'analyse, abonnez-vous à nos e-mails, Suivez-nous sur Twitter ou comme le nôtre page le Facebook.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données