Le problème adressé ici : le flou dans lequel on se trouve en attente d'un feedback sur une production/livrable à envoyer au client et le coût émotionnel de l'attente (angoisse, stress, deadlines, etc.) :
Personne ne m'aime 😭
Le client va me tuer 🔪
Le problème vient du fait que tous les Datactivist sont surchargés, trop de messages. Ils doivent faire le tri dans les informations et certaines passent à la trappe.
Le problème se pose particulièrement sur les missions récupérées sur le tard. Par exemple, on récupère la mission d'un collègue surchargé. On ne dispose pas de moment pour poser toutes les bases du projet. On traite dans l'urgence, pas vraiment le temps de s'organiser, d'anticiper d'éventuels goulots d'étranglement. Manque de vision globale sur le projet et sur le plan de charge.
En jeu de données, on peut modéliser ce phénomène de la façon suivante :
ID | Utilisateur_origine | Utilisateur_cible | Interaction1_temps | Interaction2_temps | Interaction3_temps |
---|---|---|---|---|---|
1 | Arthur | Tout_le_monde | Boost | Reponse_message | |
2 | Diane | Collègue1 | |||
3 | Arthur | Clients | Rdv_gather | ||
4 | Diane | Binome | Reponse_message | ||
5 | Diane | Collègue2 | Rdv_gather | Reponse_message | Boost |
Dans ce jeu de données non-tidy, chaque ligne représente une interaction spécifique effectuée par un utilisateur. Cependant, les interactions sont dispersées dans différentes colonnes, ce qui peut rendre l'analyse et la compréhension des données difficiles.
Le manque de feedback est causé par les valeurs manquantes dans les colonnes d'interaction. Par exemple, le premier utilisateur (ID=1) a effectué une interaction "Like" et une interaction "Comment", mais la troisième interaction est manquante.
Ce format non-tidy peut rendre difficile l'agrégation des interactions pour chaque utilisateur, car il nécessite des manipulations supplémentaires pour regrouper les interactions ensemble.
Nous avons généré un fichier .csv pour pouvoir le traiter ⬇️
import csv data = [ ["ID", "Utilisateur_origine", "Utilisateur_cible", "Interaction1_temps", "Interaction2_temps", "Interaction3_temps"], [1, "Arthur", "Tout_le_monde", "Boost", "Reponse_message", ""], [2, "Diane", "Collègue1" ,"", "", "Jojo"], [3, "Arthur", "Clients" ,"Rdv_gather", "", ""], [4, "Diane", "Binome" ,"", "Reponse_message", ""], [5, "Diane" , "Collègue2" , "Rdv_gather" , "Reponse_message" , "Boost"] ] filename = 'data.csv' with open(filename, 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerows(data) print(f"Fichier {filename} généré avec succès.")
Ce code utilise la bibliothèque
csv
pour écrire les données dans le fichier .csv spécifié (dans cet exemple,data.csv
). Les données sont stockées dans une liste de listes appeléedata
, où chaque sous-liste représente une ligne du fichier .csv.
Diane parle à son canard pour solutionner le problème 🗣️ :
Une interaction est générée par un utilisateur, à destination d'un autre. La réponse à la demande peut durer un certain temps (=plusieurs périodes), ce qui se traduit en valeurs manquantes (NA) dans le jeu de données. Ce sont ces NA qui sont problématiques.
Le canard n'ayant pas suffi, Diane fait appel à un copilote. Arthur arrive.
Nous partons du jeu de données et nous réduisons sa complexité jusqu'à atteindre un jeu de données de complexité nulle, à savoir une seule cellule l
Collègue1 interaction nulle 😶🌫️
Utilisateur_cible | Interaction1_temps |
---|---|
Collègue1 | NA |
Pour arrive à la solution du problème, on réaugmente la complexité du jeu de données
Utilisateur_cible | Interaction1_temps |
---|---|
Collègue | NA |
Si une valeur manquante ☝️, alors :
-23
pour avoir la réponse en 1 (qui correspond en réalité au 24). Oui, on essaye de remonter le temps. Interaction -23 | Utilisateur_cible | Interaction1_temps |
---|---|---|
Collègue1 | NA | |
Espace Problème
Pas de réponse avant le temps 9
Utilisateur_origine | Utilisateur_cible | Temps | Demande_emise | Réponse |
---|---|---|---|---|
Diane | Collègue1 | 0 | TRUE | NA |
Diane | Collègue1 | 1 | FALSE | NA |
Diane | Collègue1 | 2 | FALSE | NA |
Diane | Collègue1 | 3 | FALSE | NA |
Diane | Collègue1 | 4 | FALSE | NA |
Diane | Collègue1 | 5 | FALSE | NA |
Diane | Collègue1 | 6 | FALSE | NA |
Diane | Collègue1 | 7 | FALSE | NA |
Diane | Collègue1 | 8 | FALSE | NA |
Diane | Collègue1 | 9 | FALSE | Message_basecamp |
Espace Solution
Demande émise en temps -8 donc réponse à temps, c'est à dire en 1.
Utilisateur_origine | Utilisateur_cible | Temps | Demande_emise | Réponse |
---|---|---|---|---|
Diane | Collègue1 | -8 | TRUE | NA |
Diane | Collègue1 | -7 | FALSE | NA |
Diane | Collègue1 | -6 | FALSE | NA |
Diane | Collègue1 | -5 | FALSE | NA |
Diane | Collègue1 | -4 | FALSE | NA |
Diane | Collègue1 | -3 | FALSE | NA |
Diane | Collègue1 | -2 | FALSE | NA |
Diane | Collègue1 | -1 | FALSE | NA |
Diane | Collègue1 | 0 | FALSE | NA |
Diane | Collègue1 | 1 | FALSE | Message_basecamp |
Maintenant que nous avons un jeu de données représentant la solution, nous pouvons aussi expliquer en une phrase cette solution :
Si interaction1_temps = NA, alors priorisation 📈
C'est à dire que le message en attente devient plus prioritaire.
Sur chaque message, mettre des niveaux d'alerte. Exemple de fonctionnement
Vous mettez un message. Si pas de réponse et stress et deadline (et envie de dormir), ajouter au message un certain nombre d'emoji "🚨" (voir grille ci-dessous). Si pas de réponse malgré émojis, augmentez le nombre de "🚨". Si urgence traitée ou en cours de traitement, alors diminuer le nombre de 🚨.
Proposition d'une échelle d'urgence :
🚨🚨🚨🚨🚨 ==> Urgence absolue. A n'utiliser qu'en cas d'extrême nécessité 😱
🚨🚨🚨🚨 ==> Urgence très très forte.
🚨🚨🚨 ==> Urgence forte.
🚨🚨 ==> Urgence à traiter dans les meilleurs délais
🚨 ==> Urgence à traiter