Plateforme de Business Intelligence : Tutoriel sur l'utilisation du pipeline d'agrégation MongoDB
Publié: 2022-03-11Utiliser les données pour répondre à des questions intéressantes, c'est ce que les chercheurs s'affairent à faire dans le monde actuel axé sur les données. Compte tenu des énormes volumes de données, le défi de leur traitement et de leur analyse est de taille ; en particulier pour les statisticiens ou les analystes de données qui n'ont pas le temps d'investir dans l'apprentissage des plates-formes ou des technologies de business intelligence fournies par l'écosystème Hadoop, Spark ou les bases de données NoSQL qui les aideraient à analyser des téraoctets de données en quelques minutes.
Aujourd'hui, la norme veut que les chercheurs ou les statisticiens construisent leurs modèles sur des sous-ensembles de données dans des packages d'analyse tels que R, MATLAB ou Octave, puis donnent les formules et les étapes de traitement des données aux équipes informatiques qui créent ensuite des solutions d'analyse de production.
Un problème avec cette approche est que si le chercheur réalise quelque chose de nouveau après avoir exécuté son modèle sur toutes les données en production, le processus doit être répété à nouveau.
Et si le chercheur pouvait travailler avec un développeur MongoDB et exécuter son analyse sur toutes les données de production et les utiliser comme ensemble de données exploratoires, sans avoir à apprendre de nouvelles technologies ou de langages de programmation complexes, ou même SQL ?
Si nous utilisons efficacement le pipeline d'agrégation de MongoDB et MEAN, nous pouvons y parvenir en un temps raisonnablement court. À travers cet article et le code disponible ici dans ce référentiel GitHub, nous souhaitons montrer à quel point il est facile d'y parvenir.
La plupart des outils de Business Intelligence qui sont sur le marché offrent aux chercheurs des moyens d'importer des ensembles de données de NoSQL et d'autres technologies Big Data dans l'outil, puis les transformations et l'analyse sont effectuées à l'intérieur de l'outil. Mais dans ce didacticiel d'informatique décisionnelle, nous utilisons la puissance de MongoDB Aggregation Pipeline sans extraire les données de MongoDB, et le chercheur utilise une interface simple pour effectuer toutes sortes de transformations sur un système de Big Data de production.
Pipeline d'agrégation MongoDB pour la Business Intelligence
En termes simples, le pipeline d'agrégation de MongoDB est un cadre permettant d'effectuer une série de transformations de données sur un ensemble de données. La première étape prend l'intégralité de la collection de documents en entrée, puis chaque étape suivante prend en entrée le jeu de résultats de la transformation précédente et produit une sortie transformée.
Il existe 10 types de transformations pouvant être utilisées dans un pipeline d'agrégation :
$geoNear : affiche les documents dans l'ordre du plus proche au plus éloigné d'un point spécifié
$match : filtre l'enregistrement d'entrée défini par n'importe quelle expression donnée
$project : crée un ensemble de résultats avec un sous-ensemble de champs d'entrée ou de champs calculés
$redact : restreint le contenu des documents en fonction des informations du document
$unwind : prend un champ de tableau avec n éléments d'un document et renvoie n documents avec chaque élément ajouté à chaque document en tant que champ remplaçant ce tableau
$group : regroupe par une ou plusieurs colonnes et effectue des agrégations sur d'autres colonnes
$limit : sélectionne les n premiers documents dans les ensembles d'entrée (utile pour les calculs de centiles, etc.)
$skip : ignore les n premiers documents du jeu d'entrée
$sort : trie tous les documents d'entrée en fonction de l'objet donné
$out : prend tous les documents renvoyés à l'étape précédente et les écrit dans une collection
À l'exception du premier et du dernier de la liste ci-dessus, il n'y a pas de règles sur l'ordre dans lequel ces transformations peuvent être appliquées. $out ne doit être utilisé qu'une seule fois, et à la fin, si nous voulons écrire le résultat du pipeline d'agrégation dans une collection nouvelle ou existante. $geoNear ne peut être utilisé que comme première étape d'un pipeline.
Afin de faciliter la compréhension, passons en revue deux ensembles de données et deux questions pertinentes pour ces ensembles de données.
Différence de salaires par désignation
Afin d'expliquer la puissance du pipeline d'agrégation de MongoDB, nous avons téléchargé un ensemble de données contenant des informations sur les salaires du personnel enseignant universitaire pour l'ensemble des États-Unis. Ces données sont disponibles sur nces.ed.gov. Nous avons des données de 7598 institutions avec les champs suivants :
var FacultySchema = mongoose.Schema({ InstitutionName : String, AvgSalaryAll : Number, AVGSalaryProfessors : Number, AVGSalaryAssociateProfessors : Number, AVGSalaryAssistantProfessors : Number, AVGSalaryLecturers : Number, AVGSalaryInstructors : Number, StreetAddress : String, City : String, State : String, ZIPCode : String, MenStaffCount : Number, WomenStaffCount : Number }
Avec ces données, nous voulons savoir (en moyenne) quelle est la différence entre les salaires des professeurs associés et des professeurs par État. Ensuite, un professeur agrégé peut se rendre compte dans quel état il est plus valorisé qu'un professeur en termes de salaire.
Pour répondre à cette question, un chercheur doit d'abord éliminer les mauvaises données de la collection, car il y a quelques lignes/documents dans notre ensemble de données où le salaire moyen est une chaîne nulle ou vide. Pour accomplir ce nettoyage du jeu de données nous ajouterons l'étape suivante :
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
Cela filtrera toutes les entités qui ont des valeurs de chaîne dans ces deux champs. Dans MongoDB, chaque type est représenté par un numéro unique - pour les chaînes, le numéro de type est 2.
Cet ensemble de données est un bon exemple, car dans l'analyse de données du monde réel, les ingénieurs doivent souvent également gérer le nettoyage des données.
Maintenant que nous avons des données stables, nous pouvons passer à l'étape suivante où nous ferons la moyenne des salaires par État :
{$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}
Nous avons juste besoin d'exécuter une projection de l'ensemble de résultats ci-dessus et d'obtenir la différence entre les salaires moyens de l'État, comme indiqué ci-dessous à l'étape 3 de notre pipeline :
{$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}
Cela devrait nous donner la différence de salaire moyenne au niveau de l'État entre les professeurs et les professeurs associés à partir d'un ensemble de données de 7519 établissements d'enseignement partout aux États-Unis. Pour rendre encore plus pratique l'interprétation de ces informations, faisons un tri simple afin de savoir quel état a le moins de différence en ajoutant une étape $sort :

{$sort: { SalaryDifference: 1}}
À partir de cet ensemble de données, il ressort que l'Idaho, le Kansas et la Virginie-Occidentale sont les trois États où la différence de salaire des professeurs associés et des professeurs est la plus faible par rapport à tous les autres États.
Le pipeline d'agrégation complet généré pour cela est illustré ci-dessous :
[ {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}, {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}, {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}, {$sort: { SalaryDifference: 1}} ]
L'ensemble de données résultant qui apparaît ressemble à ceci. Les chercheurs peuvent également exporter ces résultats au format CSV afin d'en faire rapport à l'aide de packages de visualisation tels que Tableau, ou via de simples graphiques Microsoft Excel.
Salaire moyen par type d'emploi
Un autre exemple que nous allons explorer dans cet article implique un ensemble de données obtenu à partir de www.data.gov. Compte tenu des informations sur la masse salariale de toutes les organisations gouvernementales étatiques et locales aux États-Unis d'Amérique, nous aimerions déterminer le salaire moyen des employés à temps plein et à temps partiel de « l'administration financière » dans chaque État.
L'ensemble de données a été importé, résultant en 1975 documents où chaque document suit ce schéma :
mongoose.Schema({ State : String, GovernmentFunction : String, FullTimeEmployees : Number, VariationPCT : Number, FullTimePay : Number, PartTimeEmployees : Number, PartTimePay : Number, PartTimeHours : Number, FullTimeEquivalentEmployment : Number, TotalEmployees : Number, TotalMarchPay : Number }, {collection: 'payroll'});
La réponse à cette question peut aider un employé de l'administration financière à choisir le meilleur état où déménager. Avec notre outil basé sur le pipeline d'agrégation MongoDB, cela peut être fait assez facilement :
Dans la première étape, filtrez sur la colonne GovernmentFunction pour supprimer toutes les entités non "Financial Administration" :
{$match:{GovernmentFunction:'Financial Administration'}}
Dans la prochaine étape du didacticiel, nous regrouperons les entités par état et calculerons les salaires moyens à temps plein et à temps partiel dans chaque état :
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
Enfin, nous trierons les résultats des États les mieux rémunérés aux États les moins bien rémunérés :
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
Cela devrait permettre à l'outil de générer le pipeline d'agrégation suivant :
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
L'exécution du pipeline d'agrégation devrait produire des résultats comme celui-ci :
Blocs de construction
Pour créer cette application de business intelligence, nous avons utilisé MEAN, qui est une combinaison de MongoDB, ExpressJS, AngularJS et NodeJS.
Comme vous le savez peut-être déjà, MongoDB est une base de données de documents sans schéma. Même si chaque document qu'il stocke est limité à 16 Mo, sa flexibilité et ses performances, ainsi que le cadre de pipeline d'agrégation qu'il fournit, font de MongoDB une solution idéale pour cet outil. La prise en main de MongoDB est très simple, grâce à sa documentation complète.
Node.js, un autre composant intégral du MEAN, fournit l'environnement Javascript côté serveur piloté par les événements. Node.js exécute Javascript en utilisant le moteur V8 de Google Chrome. Les promesses d'évolutivité de Node.js sont ce qui pousse de nombreuses organisations vers cette solution.
Express.js est le framework d'application Web le plus populaire pour Node.js. Il facilite la création d'API ou de tout autre type de couche métier côté serveur pour les applications Web. Il est très rapide en raison de sa nature minimaliste, mais est également assez flexible.
AngularJS, créé et maintenu par un certain nombre d'ingénieurs Google, devient rapidement l'un des frameworks Javascript frontaux les plus populaires disponibles à notre disposition.
Il y a deux raisons pour lesquelles MEAN est si populaire et notre choix pour le développement d'applications chez techXplorers :
La compétence est simple. Un ingénieur qui comprend JavaScript est bon pour aller sur toutes les couches.
La communication entre le front-end, l'entreprise et les couches de base de données se fait via des objets JSON, ce qui nous fait gagner un temps considérable dans la conception et le développement à différentes couches.
Conclusion
Dans ce didacticiel sur le pipeline d'agrégation MongoDB, nous avons démontré un moyen rentable de donner aux chercheurs un outil leur permettant d'utiliser les données de production comme ensembles de données exploratoires et d'exécuter différents ensembles de transformations pour analyser et construire des modèles.
Nous avons pu développer et déployer cette application de bout en bout en seulement 3 jours. Cette applicaton a été développée par une équipe de 4 ingénieurs expérimentés (2 aux États-Unis et 2 en Inde) et un designer et expert UX freelance nous aidant avec quelques réflexions sur la conception d'interface. À un moment donné dans le futur, je prendrai le temps d'expliquer comment ce niveau de collaboration fonctionne pour créer des produits impressionnants en un temps incroyablement court.
Nous espérons que vous tirerez parti du pipeline d'agrégation de MongoDB et que vous mettrez le pouvoir entre les mains de vos chercheurs qui peuvent changer le monde grâce à leurs analyses et leurs idées intelligentes.
Cette application est en direct pour être jouée ici.