Business-Intelligence-Plattform: Lernprogramm zur Verwendung der MongoDB-Aggregationspipeline
Veröffentlicht: 2022-03-11Die Nutzung von Daten zur Beantwortung interessanter Fragen ist das, was Forscher in der heutigen datengesteuerten Welt tun. Angesichts riesiger Datenmengen ist die Herausforderung, sie zu verarbeiten und zu analysieren, groß; insbesondere für Statistiker oder Datenanalysten, die nicht die Zeit haben, in das Erlernen von Business-Intelligence-Plattformen oder Technologien zu investieren, die von Hadoop-Ökosystemen, Spark- oder NoSQL-Datenbanken bereitgestellt werden, die ihnen helfen würden, Terabytes an Daten in Minuten zu analysieren.
Heutzutage ist es üblich, dass Forscher oder Statistiker ihre Modelle auf Teilmengen von Daten in Analysepaketen wie R, MATLAB oder Octave aufbauen und dann die Formeln und Datenverarbeitungsschritte an IT-Teams weitergeben, die dann Produktionsanalyselösungen entwickeln.
Ein Problem bei diesem Ansatz besteht darin, dass, wenn der Forscher etwas Neues realisiert, nachdem er sein Modell auf allen Daten in der Produktion ausgeführt hat, der Prozess noch einmal wiederholt werden muss.
Was wäre, wenn der Forscher mit einem MongoDB-Entwickler zusammenarbeiten und seine Analyse auf alle Produktionsdaten anwenden und als seinen explorativen Datensatz verwenden könnte, ohne neue Technologien oder komplexe Programmiersprachen oder sogar SQL lernen zu müssen?
Wenn wir die Aggregation Pipeline von MongoDB und MEAN effektiv nutzen, können wir dies in relativ kurzer Zeit erreichen. Durch diesen Artikel und den Code, der hier in diesem GitHub-Repository verfügbar ist, möchten wir zeigen, wie einfach dies zu erreichen ist.
Die meisten der auf dem Markt erhältlichen Business-Intelligence-Tools bieten Forschern die Möglichkeit, Datensätze aus NoSQL und anderen Big-Data-Technologien in das Tool zu importieren, dann werden die Transformationen und Analysen innerhalb des Tools durchgeführt. Aber in diesem Business-Intelligence-Tutorial nutzen wir die Leistungsfähigkeit der MongoDB Aggregation Pipeline, ohne die Daten aus MongoDB herauszuziehen, und der Forscher verwendet eine einfache Schnittstelle, um alle Arten von Transformationen auf einem Big-Data-Produktionssystem durchzuführen.
MongoDB-Aggregationspipeline für Business Intelligence
Einfach ausgedrückt ist die Aggregationspipeline von MongoDB ein Framework, um eine Reihe von Datentransformationen an einem Datensatz durchzuführen. Die erste Stufe verwendet die gesamte Sammlung von Dokumenten als Eingabe, und von da an verwendet jede nachfolgende Stufe die Ergebnismenge der vorherigen Transformation als Eingabe und erzeugt eine transformierte Ausgabe.
Es gibt 10 Arten von Transformationen, die in einer Aggregationspipeline verwendet werden können:
$geoNear: Gibt Dokumente in der Reihenfolge vom nächsten zum am weitesten entfernten Punkt aus
$match: Filtert den Eingabedatensatz nach beliebigen angegebenen Ausdrücken
$project: Erstellt eine Ergebnismenge mit einer Teilmenge von Eingabefeldern oder berechneten Feldern
$redact: schränkt den Inhalt der Dokumente basierend auf Informationen aus dem Dokument ein
$unwind: Nimmt ein Array-Feld mit n Elementen aus einem Dokument und gibt n Dokumente zurück, wobei jedes Element jedem Dokument als Feld hinzugefügt wird, das dieses Array ersetzt
$group: gruppiert nach einer oder mehreren Spalten und führt Aggregationen für andere Spalten durch
$limit: wählt die ersten n Dokumente aus Eingabesätzen aus (nützlich für Perzentilberechnungen usw.)
$skip: Ignoriert die ersten n Dokumente aus dem Eingabesatz
$sort: sortiert alle Eingabedokumente nach dem angegebenen Objekt
$out: Nimmt alle Dokumente, die von der vorherigen Phase zurückgegeben wurden, und schreibt sie in eine Sammlung
Mit Ausnahme der ersten und letzten in der obigen Liste gibt es keine Regeln für die Reihenfolge, in der diese Transformationen angewendet werden können. $out sollte nur einmal und am Ende verwendet werden, wenn wir das Ergebnis der Aggregationspipeline in eine neue oder vorhandene Sammlung schreiben möchten. $geoNear kann nur als erste Stufe einer Pipeline verwendet werden.
Lassen Sie uns zum besseren Verständnis zwei Datensätze und zwei für diese Datensätze relevante Fragen durchgehen.
Gehaltsunterschiede nach Bezeichnung
Um die Leistungsfähigkeit der Aggregationspipeline von MongoDB zu erläutern, haben wir einen Datensatz heruntergeladen, der Gehaltsinformationen von Universitätslehrkräften für die gesamten USA enthält. Diese Daten sind unter nces.ed.gov verfügbar. Wir haben Daten von 7598 Institutionen mit folgenden Feldern:
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 }
Mit diesen Daten wollen wir (im Durchschnitt) herausfinden, wie hoch der Unterschied zwischen den Gehältern von außerordentlichen Professoren und Professoren nach Bundesland ist. Dann kann ein außerordentlicher Professor erkennen, in welchem Bundesland er gehaltsmäßig näher an einem Professor bewertet wird.
Um diese Frage zu beantworten, muss ein Forscher zunächst schlechte Daten aus der Sammlung aussortieren, da es einige Zeilen/Dokumente in unserem Datensatz gibt, in denen das Durchschnittsgehalt eine Null- oder leere Zeichenfolge ist. Um diese Bereinigung des Datensatzes zu erreichen, fügen wir die folgende Stufe hinzu:
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
Dadurch werden alle Entitäten herausgefiltert, die Zeichenfolgenwerte in diesen beiden Feldern enthalten. In MongoDB wird jeder Typ mit einer eindeutigen Nummer dargestellt – für Strings ist die Typnummer 2.
Dieser Datensatz ist ein gutes Beispiel, denn in der realen Datenanalyse müssen sich Ingenieure oft auch mit Datenbereinigungen befassen.
Jetzt, da wir einige stabile Daten haben, können wir mit der nächsten Phase fortfahren, in der wir die Gehälter nach Bundesstaat mitteln:
{$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}
Wir müssen nur eine Projektion des obigen Ergebnissatzes durchführen und die Differenz der staatlichen Durchschnittsgehälter ermitteln, wie unten in Stufe 3 unserer Pipeline gezeigt:
{$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}
Dies sollte uns den durchschnittlichen Gehaltsunterschied zwischen Professoren und außerordentlichen Professoren auf Bundesstaatsebene aus einem Datensatz von 7519 Bildungseinrichtungen in den gesamten USA geben. Um es noch bequemer zu machen, diese Informationen zu interpretieren, lassen Sie uns eine einfache Sortierung durchführen, damit wir wissen, welcher Zustand den geringsten Unterschied aufweist, indem wir eine $sort-Stufe hinzufügen:

{$sort: { SalaryDifference: 1}}
Aus diesem Datensatz geht hervor, dass Idaho, Kansas und West Virginia drei Bundesstaaten sind, in denen die Gehaltsunterschiede zwischen außerordentlichen Professoren und Professoren im Vergleich zu allen anderen Bundesstaaten am geringsten sind.
Die vollständige dafür generierte Aggregationspipeline ist unten dargestellt:
[ {$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}} ]
Der resultierende Datensatz, der angezeigt wird, sieht so aus. Forscher können diese Ergebnisse auch in CSV exportieren, um sie mit Visualisierungspaketen wie Tableau oder über einfache Microsoft Excel-Diagramme zu berichten.
Durchschnittliches Gehalt nach Beschäftigungsart
Ein weiteres Beispiel, das wir in diesem Artikel untersuchen werden, betrifft einen Datensatz, der von www.data.gov bezogen wurde. Angesichts der Gehaltsinformationen aller staatlichen und lokalen Regierungsorganisationen in den Vereinigten Staaten von Amerika möchten wir die durchschnittlichen Gehälter von Vollzeit- und Teilzeitangestellten der „Finanzverwaltung“ in jedem Bundesstaat ermitteln.
Der Datensatz wurde importiert, was zu Dokumenten von 1975 führte, in denen jedes Dokument diesem Schema folgt:
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'});
Die Antwort auf diese Frage kann einem Mitarbeiter der Finanzverwaltung helfen, das beste Bundesland für den Umzug auszuwählen. Mit unserem MongoDB-Aggregator-Pipeline-basierten Tool ist dies ganz einfach möglich:
Filtern Sie in der ersten Stufe nach der Spalte GovernmentFunction, um alle Nicht-„Finanzverwaltung“-Entitäten zu verwerfen:
{$match:{GovernmentFunction:'Financial Administration'}}
In der nächsten Phase des Tutorials gruppieren wir die Einheiten nach Staat und berechnen die durchschnittlichen Vollzeit- und Teilzeitgehälter in jedem Staat:
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
Abschließend werden wir die Ergebnisse von Staaten mit höherer Bezahlung zu Staaten mit niedrigerer Bezahlung sortieren:
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
Dies sollte es dem Tool ermöglichen, die folgende Aggregationspipeline zu generieren:
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
Das Ausführen der Aggregationspipeline sollte zu folgenden Ergebnissen führen:
Bausteine
Um diese Business-Intelligence-Anwendung zu erstellen, haben wir MEAN verwendet, eine Kombination aus MongoDB, ExpressJS, AngularJS und NodeJS.
Wie Sie vielleicht bereits wissen, ist MongoDB eine schemalose Dokumentendatenbank. Obwohl jedes gespeicherte Dokument auf eine Größe von 16 MB begrenzt ist, eignet sich MongoDB aufgrund seiner Flexibilität und Leistung zusammen mit dem bereitgestellten Aggregationspipeline-Framework perfekt für dieses Tool. Der Einstieg in MongoDB ist dank der umfassenden Dokumentation sehr einfach.
Node.js, ein weiterer integraler Bestandteil des MEAN, stellt die ereignisgesteuerte serverseitige Javascript-Umgebung bereit. Node.js führt Javascript mit der V8-Engine von Google Chrome aus. Das Skalierbarkeitsversprechen von Node.js treibt viele Unternehmen dazu.
Express.js ist das beliebteste Webanwendungs-Framework für Node.js. Es macht es einfach, APIs oder jede andere Art von serverseitiger Geschäftsschicht für Webanwendungen zu erstellen. Es ist aufgrund seiner minimalistischen Natur sehr schnell, aber auch sehr flexibel.
AngularJS, das von einer Reihe von Google-Ingenieuren erstellt und gepflegt wird, entwickelt sich schnell zu einem der beliebtesten Front-End-JavaScript-Frameworks, die uns zur Verfügung stehen.
Es gibt zwei Gründe, warum MEAN so beliebt und unsere Wahl für die Anwendungsentwicklung bei techXplorers ist:
Das Skillset ist einfach. Ein Ingenieur, der JavaScript versteht, ist für alle Ebenen gut geeignet.
Die Kommunikation zwischen Front-End-, Geschäfts- und Datenbankebenen erfolgt ausschließlich über JSON-Objekte, was uns viel Zeit bei Design und Entwicklung auf verschiedenen Ebenen spart.
Fazit
In diesem Tutorial zur MongoDB-Aggregationspipeline haben wir eine kostengünstige Möglichkeit aufgezeigt, Forschern ein Tool an die Hand zu geben, mit dem sie Produktionsdaten als explorative Datasets verwenden und verschiedene Sätze von Transformationen ausführen können, um daraus Modelle zu analysieren und zu erstellen.
Wir konnten diese Anwendung in nur 3 Tagen End-to-End entwickeln und bereitstellen. Diese Anwendung wurde von einem Team aus 4 erfahrenen Ingenieuren (2 in den USA und 2 in Indien) und einem Designer und freiberuflichen UX-Experten entwickelt, die uns bei einigen Gedanken zum Schnittstellendesign helfen. Irgendwann in der Zukunft werde ich mir die Zeit nehmen, zu erklären, wie dieses Maß an Zusammenarbeit funktioniert, um in unglaublich kurzer Zeit großartige Produkte zu entwickeln.
Wir hoffen, dass Sie die Aggregationspipeline von MongoDB nutzen und Ihren Forschern die Macht geben, die mit ihren cleveren Analysen und Erkenntnissen die Welt verändern können.
Diese Anwendung kann hier live gespielt werden.