Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

Blog

Les analyses et les idées des plus grands esprits de l'analyse.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index
WilliamR
Alteryx
Alteryx

Dans cet article, nous ferons l'intégration d'un modèle disponible dans la librairie scikit-learn.

L'objectif étant de montrer comment l'intégration du code peut se faire et quelle est la manière pour envoyer les données à l'outil Python et récupérer les résultats.

Les bénéfices à utiliser Alteryx Designer pour la préparation des données sont multiples :

  • meilleure lisibilité des transformations effectuées sur les données, qui deviennent plus visuelles,
  • gain de temps (à noter que les équipes de Data Scientiste passent 80% de leur temps environ sur cette phase),
  • possibilité "d'externaliser" cette phase au niveau des équipes métiers qui bénéficient de la plateforme sans code pour préparer les données avant les phases d'entrainement.

 

Afin d'illustrer notre propos, nous utiliserons un exemple de prédiction du niveau de satisfaction de la population en fonction d'un indicateur de santé économique d'un pays comme le PIB par habitant.

(Cet exemple est tiré du Livre d'Aurélien Géron Hands-On Machine Learning with Scikit-Learn and TensorFlow).

 

Tout d'abord, commençons par examiner les données. Nous avons deux fichiers:

  • PIB par habitants (gdp_per_capita.csv),
  • Données OCDE contenant l'indice de satisfaction (oecd_bli_2015.csv)

 

Exemple des données de PIB:

 

WilliamR_0-1576491831307.png

 

Exemple des données de l'OCDE:

 

WilliamR_1-1576491947801.png

 

La première étape va consister à préparer les données pour les associer.

  • La colonne "2015" du jeu de donnée PIB par habitant possède un séparateur des milliers avec une virgule, nous enlevons cette virgule à l'aide de l'outil RegEx.WilliamR_1-1576492338910.png
  • Nous filtrons les données de l'OCDE sur l'information qui nous intéresse: l'indice de satisfaction à l'aide d'un filtre:WilliamR_0-1576492313559.png

 

  • Puis nous associons les deux jeux de données à l'aide d'une jointure (outil Join) sur le champ commun qui est le pays (colonne "country" des deux sources de données).

         WilliamR_2-1576492437535.png

 

Voici où nous en sommes:

 

WilliamR_0-1576492530770.png

Imaginons maintenant que nous cherchons à prédire l'indice de satisfaction de Chypre en fonction du PIB par habitant qui est de 22587 en 2015).

Nous créons cette entrée de donnée avec un Text Input et nous renseignons les informations :

WilliamR_1-1576492698119.png

 

Puis nous connectons maintenant l'outil Python qui va recevoir à la fois les données d'entrainement et les données à scorer.

 

WilliamR_2-1576492900152.png

Voici enfin le code Python du modèle (ici documentation de l'outil Pyhton), à noter que la librairie scikit-learn est incluse en standard dans l'outil.

 

 

 

 

 

 

from ayx import Alteryx

import numpy as np
import pandas as pd
import sklearn.linear_model

#Load the data from Alteryx WF
df=Alteryx.read("#1")
newdata=Alteryx.read("#2")

# Prepare the data
X = np.c_[df["GDP per capita"]]
y = np.c_[df["Life satisfaction"]]


# Select a linear model
model = sklearn.linear_model.LinearRegression()

# Train the model
model.fit(X, y)

# Make a prediction for New Data coming from #2 Alteryx Connection
X_new = pd.DataFrame(newdata["GDP per capita"])  
dfres=pd.DataFrame((model.predict(X_new)))

#Write to Alteryx WF output #1
Alteryx.write(dfres,1)

 

 

 

 

Explications:

 

Les instructions df=Alteryx.read("#1") et newdata=Alteryx.read("#2") permettent de lire les données en provenance des connexions #1 et #2 (respectivement sortie de la jointure et Text Input) sous forme de DataFrame. Le DataFrame est une structure de donnée très courant en Python et lors de l'utilisation de modèles de Machine Learning.

Plus de littérature sur les structures DataFrame ici.

Nous utilisons ensuite la librairie numpy pour accéder aux deux colonnes de données qui nous intéressent (le PIB pour l'ensemble des pays et le PIB pour Chypre).

Plus d'information sur numpy ici.

 

La suite du code contient :

  • la sélection d'un type de modèle (régression linéaire): model = sklearn.linear_model.LinearRegression()
  • l'entrainement : model.fit(X, y)
  • le formatage de la nouvelle donnée à scorer en dataframe : X_new = pd.DataFrame(newdata["GDP per capita"]) 
  • puis le scoring : model.predict(X_new)
  • sauvegardé à nouveau dans une structure de type dataframe, qui est la structure utilisée par Alteryx pour pouvoir renvoyer les résultats au workflow :dfres=pd.DataFrame((model.predict(X_new)))

Finalement, le résultat est ensuite renvoyé au workflow dans le connecteur n°1 de l'outil python à l'aide de l'instruction :

  • Alteryx.write(dfres,1)

Vous pouvez ensuite sauvegarder le résultat dans un fichier.yxdb par exemple.

 

Voici le workflow finalisé :

WilliamR_0-1576495115983.png

N'hésitez pas à envoyer vos commentaires ou difficultés à faire fonctionner cet exemple.

 

Commentaires
Étiquettes