Ajoutez une touche de Python dans vos viz Tableau !

Share this post

Vous avez besoin d’ajouter une touche de Machine Learning dans vos viz Tableau ? Vous ne savez pas comment faire ? ce tuto a été conçu pour vous aider à mieux comprendre et utiliser les possibilités de Tableau sur l’intégration de scripts Python. A vos claviers donc et suivez le guide …

Architecture de TabPy

TabPy est un serveur. C’est en fait une passerelle qui va permettre la communication entre Tableau et le monde Python. Ce serveur doit donc est lancé afin que Tableau puisse passer des requêtes (commandes) Python.

Notez bien que ce qui sera exposé ici avecPython est tout aussi vrai pour R (a celà près que R dispose nativement de son serveur : RSERVE) .

Installation de TabPy

Tout commence par l’installation du serveur (TabPy) fourni par Tableau gratuitement via Github. Commencez donc par télécharger le projet TabPy.

Ensuite vous allez avoir besoin de Python (si ce dernier n’est pas déjà installé sur votre machine). Personnellement je recommanderai d’utiliser la distribution Anaconda (gratuite aussi) que vous pouvez aussi télécharger ici.

Résumons les étapes :

  • Installez Anaconda sur votre machine ou serveur.
  • Créez un environnement spécifique via Anaconda Navigator en Python 3.6, comme ci-dessous :
  • Ajoutez les modules/librairies dont vous avez besoin (scikit-learn, pandas, etc.)
  • Dézippez TabPy (téléchargé précédemment) dans un répertoire accessible.
  • Lancez une ligne de commande (shell)
    • Activez l’environnement que vous avez créé précédemment en utilisant la commande activate (anaconda)
    • Allez dans le répertoire TabPy
    • Lancer la commande startup.cmd ou startup.sh
$ activate tableau
$ cd /tools/TabPy
$ startup.sh

Normallement votre serveur doit démarrer et se mettre en attente de requêtes. Si vous avez un soucis c’est probablement du à des modules manquants, des soucis de librairies (vérifiez bien que vous êtes bien sur le bon environnement), ou autre. Bref, en cas de soucis allez sur le readme de TabPy

Premier test avec Desktop

Notre serveur TabPy est lancé. Nous allons maintenant ouvrir un Tableau Desktop et commencer avec une viz et une fonction Python très simple. Nous aurons comme données de prénoms et nous allons tout simplement les concaténer avec une chaîne fixe dans une fonction Python. Voilà la fonction en question :

lst= []
for i in range(0,len(_arg1)) :
     lst.append(_arg1[i]+', Hello from Python (direct)!')
return lst

Pour l’utiliser directement dans Tableau Desktop nous allons devoir créer un champ calculé dans lequel nous allons incorporer ce code. Nous utiliserons alors (selon le type de données) l’une des fonctions SCRIPT_* de Tableau . il existe 4 fonctions SCRIPT_*:

  • SCRIPT_BOOL : pour gérer des listes de bouléens
  • SCRIPT_INT : pour gérer des listes d’entiers
  • SCRIPT_STR : pour gérer des listes d’alphanumériques
  • SCRIPT_REAL : pour gérer des listes de réels

Celà nous amène a faire attention à certains points :

  • Les paramètres (entrées et sorties) doivent être uniformes (pas question d’utiliser des listes comprenant entier, réels et chaines).
  • Les paramètres qui seront passés à Python (ou R) doivent être syntaxés comme suit pour Python _arg# (_arg1, _arg2, etc.) et pour R .arg#
  • La taille/format des paramètres en entrée & sortie doit être la même !

Dans Tableau Desktop nous allons donc créer un champ calculé dans lequel nous allons utiliser la fonction SCRIPT_STR qui contiendra la fonction Python précédente:

Voici la fonction à coller :

SCRIPT_STR("
lst= []
for i in range(0,len(_arg1)) :
        lst.append(_arg1[i]+', Hello from Python (direct)!')
return lst
",
ATTR([Col1])
)

Glissez-déposez maintenant le nouveau champ calculé dans une ligne par exemple et constatez le résultat (cf. ci-dessus)

Déployer des fonctions

Je sais ce que vous allez dire : Ok c’est bien de pouvoir encapsuler du code Python dans des champs calculés. Mais celà deviendra vite ingérable si je dois appeler beaucoup de code ! et comment utiliser un modèle de Machine Learning déjà entrainé ? Heureusement Tableau permet de déployer sur le serveur TabPy des fonctions. Celà permet de simplifier les appels SCRIPTS mais aussi et surtout faciliter leur maintenance. Voyons comment celà fonctionne.

Créons tout d’abord notre fonction en utilisant Python directement ou via Jupyter Notebook (code ici):

import tabpy_client
toConcatenate = ", Hello from Python ! (deployed)"
def hello_python(_arg1):
    lst= []
    for i in range(0,len(_arg1)) :
        lst.append(_arg1[i] + toConcatenate)
    return lst
client = tabpy_client.Client('http://localhost:9004')
client.deploy('hello_python', hello_python, 'This is a simple Python call', override=True)

On retrouve bien sur la fonction hello_python() mais aussi et surtout la connexion au serveur TabPy via tabpy_client.Client() et le déploiement de la fonction via la méthode deploy()

Une fois le code exécuté, la fonction hello_python(_arg1) est directement utilisable par le serveur TabPy. L’appel via Desktop est alors considérablement simplifié :

Voici le code simplifié :

SCRIPT_STR("return tabpy.query('hello_python',_arg1)['response']", ATTR([Col1]) )

Au lieu du code de la fonction nous avons maintenant un appel aux registres de TabPy (endpoints) pour récupérer la fonction et y faire appel.

A ce propos vous pouvez voir la liste de toutes les fonctions déployées sur votre serveur en tapant dans votre navigateur : http://localhost:9004/endpoints

Voilà, vous avez vu comment installer et utiliser simplement TabPy, je vous encourage maintenant à aller sur la documentation officielle pour plus d’informations. Vous trouvez aussi pas mal d’informations sur les forums Tableau (par exemple ici).

Voilà, vous avez vu comment installer et utiliser simplement TabPy, je vous encourage maintenant à aller sur la documentation officielle pour plus d’informations. Vous trouvez aussi pas mal d’informations sur les forums Tableau (par exemple ici).

Comme d’habitude vous trouverez les sources de ce min-tuto sur GitHub.

La vidéo …

Share this post

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.