
Candlestick charts – Partie 1 (Alteryx)
Bonjour à tous ! Aujourd’hui, nous allons nous lancer dans la réalisation de graphiques inspirés des graphes types « Candlestick » ou Chandeliers Japonais comme ceux que l’on voit en bourse.
Voici le résultat que nous obtiendrons à l’issue des deux tutoriels :
Ce graphe est agréable à l’oeil. Il permet de voir en un instant les évolutions des Profits (ou pertes) au cours du temps pour chaque produit vendu.
Ce tutoriel est relativement long et avancé dans son utilisation d’Alteryx et de Tableau.
Problématique
Nous utiliserons le jeu de de données Sample Superstore qui est à votre disposition dans Tableau :
Assez rapidement, nous pouvons construire une Feuille de calcul permettant de visualiser l’évolution des Profits au cours du temps pour une certaine catégorie de produits. Je ne rentrerai pas en détails dans la construction de cette feuille. Pour la reproduire, inspirez-vous de l’image ci-dessous (n’oubliez pas le calcul de table de somme cumulée ;)…)
Comme vous l’avez remarqué, notre graphe est là mais il est loin de ressembler à ce que nous souhaitons. Nous remarquons alors qu’un graphe candlestick a besoin de deux points de datas pour représenter enregistrement. En effet, une barre est constituée de deux points. Nous n’avons donc pas d’autre choix que de commencer par un peu de data-preparation avec Alteryx…
1/ Data preparation avec Alteryx :
Avant de commencer, récupérons le fichier Excel contenant nos données, je l’ai trouvé sur un forum de la communauté : Sample Superstore.
Ouvrons Alteryx et connectons-nous à ce fichier Excel, on s’intéressera à la feuille Orders. Je commence tout d’abord par un outil Select pour ne garder que quelques colonnes. Je souhaite en effet simplifier notre Workflow au maximum pour ce tutoriel. Voici les champs que j’ai désélectionné (vous pouvez en garder plus si vous le souhaitez) :
Je calcule tout d’abord la date la plus ancienne et la date la plus récente avec deux outils Summarize.
Je souhaite en effet que l’évolution des prix de chaque produit commence et se termine à la même date (pour des raisons esthétiques que nous verrons plus tard). Nous verrons en effet que si N est mon nombre de lignes initial, j’aurais donc 2N+1 lignes en sortie de mon workflow.
2/ Ajout première ligne de données vide par Produit
Je souhaite rajouter une ligne de données « vide » pour chaque Produit qui marquerait le début de l’analyse.
Pour cela, je liste chaque Produit, Category et Sub-Category ensemble avec un outil Summarize et sa fonction GroupBy. J’utilise ensuite un outil Append pour y rajouter la valeur [Min Order Date] (nommée [Order Date] ici…). Pour terminer, afin de faire les choses proprement, je recrée les colonnes correspondant à des mesures en les peuplant de zéros avec un outil Formula. Ces colonnes sont [Sales], [Quantity], [Discount] et [Profit]. Comme nous rajoutons des lignes, il s’agit de faire en sorte que les mesures correspondantes sont à zéro pour ne pas fausser les calculs.
Je termine en réintégrant les lignes générées avec un outil Union. Vous devriez avoir le workflow suivant à ce stade :
3/ Ajout de variables de « construction »
Notons que nous avons à ce stade la même structure de données qu’au début. Nous n’avons fait que rajouter des lignes à notre dataset.
Il est temps de construire quelques variables qui nous seront utiles par la suite. Je ne vais pas tenter d’expliquer en grand détail quelle est leur fonction. Je pense que vous comprendrez très vite que l’idée globale est de dupliquer des lignes et de les modifier intelligemment.
A la suite de l’outil Union, les données ont été mélangées, il faut donc les trier avec un outil Sort.
Ensuite, nous allons « compter » le nombre d’enregistrement par produit grâce à l’outil Multi-Row Formula. Nous allons ainsi créer une colonne [RowId] qui s’incrémentera à partir de 1 suivant [Order date] en recommençant pour chaque Produit. Il vous faudra :
- sélectionner l’option Create New Field,
- nommer le champ RowId
- nommer choisir un groupement par Product Name
- renseigner le calcul [Row-1:RowId]+1 (qui prend la valeur de la ligne précédente pour lui ajouter 1)
J’ai donc désormais une colonne qui va me permettre de compter mes lignes pour chaque produit.
Il se trouve que je vais avoir besoin de traiter différemment les dernières lignes de mes produits. Je calcule donc quel est le [Max_RowId] pour chaque Produit avec un outil Summarize. J’y rajoute au passage la [Max_Order Date] (calculée à l’étape 1) avec un outil Append. Je termine par un outil Join sur [Product Name] afin de rajouter ces nouvelles colonnes dans mon flux principal.
Enfin, nous allons terminer en dupliquant chaque ligne de donnée à l’aide de l’outil Generate Rows :
- sélectionner Create New Field
- nommer le champ Duplicate
- assigner 0 en Initialization Expression
- spécifier Duplicate <= 1 en tant que Condition Expression (on arrête la duplication à 2 lignes ainsi)
- spécifier Duplicate + 1 en tant que Loop Expression (on ajoute 1 à la ligne suivante)
Voici donc ce à quoi devrait ressembler la deuxième partie de votre workflow :
4/ Modifications des dates et des mesures:
Nous avons presque terminé, courage ! 🙂
Ce que je cherche à faire en dupliquant les lignes c’est de faire en sorte que les Profits soient constants entre deux enregistrements. Pour cela, je dois « reporter » la valeur de [Order Date] d’une ligne sur l’autre astucieusement. Modifions donc [Order Date] à l’aide d’un outil Multi-Row Formula :
- Sélectionnez Update Existing Field
- Sélectionnez Order Date parmi les champs proposés
- Dans Group By sélectionnez Product Name
- Renseignez le calcul suivant dans Expression :
IF [Duplicate] = 0 THEN
[Order Date]
ELSE
IF [Max_RowId] = [RowId] THEN
[Max_Order Date]
ELSE
[Row+1:Order Date]
ENDIF
ENDIF
Comme vous le remarquez, si je suis sur une ligne initiale non dupliquée alors rien ne change. Par contre, j’applique un traitement différent aux lignes dupliquées. J’ai choisi de remplacer la date par celle qui suit [Row+1:Order Date] sauf dans le cas de la dernière ligne [Max_RowId] = [RowId]. Dans ce dernier cas je remplace la date par [Max_Order Date] (mais je pourrais choisir de la supprimer également, à vous de voir…).
Nous avons presque terminé. Je rajoute ensuite un outil Select pour éliminer les champs inutiles et modifier le type des colonnes :
Enfin, n’oublions pas qu’en ayant dupliqué les lignes nous avons potentiellement changé la valeur des calculs en les multipliant par deux. Pour régler ce problème je rajoute deux outils Multi-Field Formula à la suite pour mettre à Null() ou à zéro ces valeurs pour les lignes dupliquées. Les formules sont les suivantes :
Pour les champs numériques :
IF [Duplicate] = 0 THEN [_CurrentField_] ELSE 0 ENDIF
Pour les champs textes :
IF [Duplicate] = 0 THEN [_CurrentField_] ELSE Null() ENDIF
Et voilà ! Notre travail dans Alteryx est terminé, vous pouvez utiliser l’outil Output Data pour générer votre nouveau .tde. Voici une capture d’écran de mon workflow que vous pouvez télécharger ici :
La semaine prochaine, nous passerons à l’utilisation de Tableau basée sur le dataset que nous venons de faire. Bon week-end ! 🙂